首页 > 其他分享 >Codeforces Round 894 (Div. 3) ABCDEFG AK

Codeforces Round 894 (Div. 3) ABCDEFG AK

时间:2023-08-26 18:33:51浏览次数:43  
标签:894 int res AK Codeforces find it2 ll it1

Codeforces Round 894 (Div. 3)

image

第一次div3 ak,虽然是vp的,后三题质量不错

A - Gift Carpet

穷举四个不同列即可,时间复杂度 \(O(M ^ 4)\)

int a[100][100];
void solve()
{       
    memset(a, 0, sizeof a);
    int n,  m;  cin>>n>>m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            char x; cin>>x;
            a[j][x - 'a' + 1] = 1;
        }
    bool ok = false;
    for(int i = 1; i <= m; i++)
        for(int j = i + 1; j <= m; j++)
            for(int k = j + 1; k <= m; k++)
                for(int l = k + 1; l <= m; l++)
                    if(a[i]['v' - 'a' + 1] && a[j]['i' - 'a' + 1]
                    && a[k]['k' - 'a' + 1] && a[l]['a' - 'a' + 1])
                        ok = true;
    if(ok)
        cout<<"YES\n";
    else
        cout<<"NO\n";
    return;
}

B - Sequence Game

分两种情况:

  1. 对 b 数组 的每个 \(b_{i - 1} > b_i (2 \leq i \leq n )\) ,放 \(2\) 个 \(b_i\) 到答案数组
  2. 对 b 数组 的每个 \(b_{i - 1} \leq b_i (2 \leq i \leq n )\) ,放 \(1\) 个 \(b_i\) 到答案数组
const int N = 4e5 + 10;

int a[N];
void solve()
{       

    vector<int> res;
    int m, n = 0;   cin>>m;
    for(int i = 1; i <= m; i++) 
    {
        cin>>a[i];
    }  
    res.push_back(a[1]);
    for(int i = 2; i <= m; i++) 
    {
        if(a[i] >= a[i - 1])
            res.push_back(a[i]);
        else
        {
            res.push_back(a[i]);
            res.push_back(a[i]);
        }

    }
    cout<<res.size()<<'\n';
    for(auto it : res)
        cout<<it<<" ";
    cout<<'\n';
    return;
}

C - Flower City Fence

对于水平放置的篱笆在高度上差分一下,即可求出水平放置的篱笆高度

有的篱笆比 \(n\) 长,要特判一下

const int N = 4e5 + 10;
 
ll n, a[N], b[N];
void solve()
{       
    bool ok = true;
    cin>>n;
    for(int i = 1; i <= n + 1; i++)
        a[i] = b[i] = 0;
    for(int i = 1; i <= n; i++)
    {
        cin>>a[i];
        b[1]++, b[min(n + 1, a[i] + 1)]--;
    }
    for(int i = 1; i <= n; i++)
        b[i] += b[i - 1];
    for(int i = 1, j = n; i <= n; i++, j--)
        if(a[i] != b[i])
            ok = false;
    if(ok && a[1] == n)
        cout<<"YES\n";
    else
        cout<<"NO\n";
    return;
}

D - Ice Cream Balls

问的是刚好能组合出有 \(n\) 这个数量,先二分出 \(\dfrac{l \times (l - 1)}{2} \geq n\), 因为相同冰激凌可以组合起来,且贡献为 \(1\),则答案:

  1. \(\dfrac{l \times (l - 1)}{2} = n\) 答案就为 \(l\)
  2. 否则为 \(n - \dfrac{l \times (l - 1)}{2} + l\)
ll n;
bool check(ll x)
{
    x--;
    ll s = (1ll + x) * x / 2;
    if(s >= n)  return true;
    return false;
    return s >= n;
}

void solve()
{       
    cin>>n;
    ll l = 1, r = 1e10;
    while(l < r)
    {
        ll mid = (l + r) >> 1;
        if(check(mid))  r = mid;
        else l = mid + 1;
    }
    if(l * (l - 1) / 2 > n) l--;
    cout<<n - (l) * (l - 1) / 2 + l<<'\n';
    return;
}

E - Kolya and Movie Theatre

观察得到,对于任意一种方案,其方案的最后一天看电影是第 \(r\) 天,则 \(\texttt{兴趣减弱的总和} = r \times d\) ,也就是说可以枚举 \(r\) ,求出最大的 \([1, r]\) 的前 \(m\) 大之和即可,发现是个可持久化板子,刚好还存了,交了MLE4, 改了下数组大小就过了

等会看看有没有更简单的方法

F - Magic Will Save the World

由于 \(n\) 的大小无法求其方案,但观察到 \(n = 100\) , \(s_i \leq 10 ^ 4\)

我们能不能二分天数,以一种能量的总和,对敌人能量做一个 01 背包呢,再对剩下的敌人能量判断是否小于另一种能量

\(\sum_{i = 1}^{n} s_i \leq 10 ^ 6\)

开 $\sum_{i = 1}^{n} s_i $ 的数组大小

每次二分判断转移次数有 \(n \times \sum_{i = 1}^{n} s_i\)

时间复杂度是 \(O(T n \sum_{i = 1}^{n} s_i \log n)\) 看上去很寄,但给了 4s,最终3900ms过了

标签:894,int,res,AK,Codeforces,find,it2,ll,it1
From: https://www.cnblogs.com/magicat/p/17659255.html

相关文章

  • zlmediakit源码学习(扩展支持算法分析)
    在zlmediakit源码基础上继续探索扩展支持算法分析功能。参照上一篇帖子:https://www.cnblogs.com/feixiang-energy/p/17623567.html算法模型使用opencv自带的人脸检测库:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xmlzlme......
  • 【转载】CMake从头开始学习-上
    这篇文章写的太好了非常适合新手入门,原文链接是https://subingwen.cn/cmake/CMake-primer/index.html......
  • CodeForces 825G Tree Queries
    洛谷传送门CF传送门模拟赛赛时做法。看到查询路径点权最小值,想到建重构树,满足重构树上\(\operatorname{LCA}(x,y)\)为原树上\(x\toy\)路径的点权最小值。建树方法可以参考CF1797FLiHuaandPath。于是问题变成了,维护一个点集,支持加点,查询给定点\(x\)到点集中所有......
  • Codeforces Round 894 (Div. 3)
    CodeforcesRound894(Div.3)因为最近开学了,所以晚上可能就没有什么时间打这个了,不过以后一定会在第二天把题给补掉A题传送门A题意:就是在一个n*m的的字符矩阵中从左往右依次取出4列,使得每列包含vika这四个字符中按顺序出现一个。必须保证是按顺序出现。A思路:这是一个简......
  • Makefile学习笔记
    规则:每条规则由三个部分组成分别是目标(target),依赖(depend)和命令(command)。#示例#规则1app:a.ob.oc.ogcca.ob.oc.o-oapp#规则2a.o:a.cgcc-ca.c#规则3b.o:b.cgcc-cb.c#规则4c.o:c.cgcc-cc.c makefile有自动推导功能,有时漏......
  • HTB 靶场笔记 ACCESS wakeUP
    AccessSYNOPSISAccessisan"easy"difficultymachine,thathighlightshowmachinesassociatedwiththephysicalsecurityofanenvironmentmaynotthemselvesbesecure.AlsohighlightedishowaccessibleFTP/filesharesoftenleadtogetting......
  • Python的循环语句2——break和continue
    whileTrue:content=input("请输入你要发送的内容(q结束):")print("发送内容:",content)这样的代码会无限循环因此我们需要使用break字段让循环立即停止添加一个判断,如果输入q,即可结束循环跳出whileTrue:content=input("请输入你要发送的内容(q结束):")......
  • Codeforces Round 894 (Div. 3) A-F题解
    A.GiftCarpet题意最近,特马和维卡庆祝了家庭日。他们的朋友Arina送给他们一块地毯,这块地毯可以用拉丁文小写字母的\(n\cdotm\)表来表示。维卡还没看过礼物,但特马知道她喜欢什么样的地毯。如果维卡能在地毯上读出自己的名字,她一定会喜欢的。她从左到右逐列阅读,并从当前列中......
  • cmake定义宏
    比如在打印日志信息的时候定义宏test.cpp#include<stdio.h>#defineNUMBER3intmain(){inta=10;#ifdefDEBUGprintf("我是一个程序猿,我不会爬树...\n");#endiffor(inti=0;i<NUMBER;++i){printf("hello,GCC!!!\n");......
  • cmake中list,set的对字符串操作
    cmake中所有的对象都是string,所以我们对这些的操作就是对字符串的操作,里面提供追加和删除的方法 CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#方式二file(GLOBSRC${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)message("=========================")m......