Codeforces Round #297 (Div. 2) 纪念第一次Div2 AK

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

// 虽然是virtual participant但还是爽到、

A Vitaliy and Pie

题目链接:点击打开链接

思路:水题

AC代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

int cnt[50];

int main()
{
    FSIO;
    int N;
    string sst;
    while(cin>>N)
    {
        cin>>sst;
        memset(cnt,0,sizeof(cnt));
        int ans = 0;
        for(int i=0;i<sst.length();++i)
        {
            if(sst[i]>='a'&&sst[i]<='z')    cnt[sst[i]-'a']++;
            else
            {
                if(cnt[sst[i]-'A']==0)  ans++;
                else    cnt[sst[i]-'A']--;
            }
        }
        cout<<ans<<endl;
    }

    return 0;
}



B Pasha and String

题目链接:点击打开链接

题意:给以串和n次反转操作,每次反转 a_i 到 len-a_i+1,(关于中心对称)

思路:从第一个字母到中间字母,用前缀和记录翻转操作次数,偶数不反转,奇数反转。

AC代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

string nnn;
int mk[MAXN];

int main()
{
    FSIO;
    int M;
    while(cin>>nnn)
    {
        cin>>M;
        memset(mk,0,sizeof(mk));
        int tmp;
        for(int i=1;i<=M;++i)
        {
            cin>>tmp;
            mk[tmp]++;
        }
        long long summ = 0;
        for(int i=0;i<nnn.length()/2;++i)
        {
            summ = summ + mk[i+1];
            mk[i+1] = summ%2;
            if(mk[i+1])   swap(nnn[i],nnn[nnn.length()-i-1]);
        }
        cout<<nnn<<endl;
    }

    return 0;
}


C Ilya and Cubes

题目链接:点击打开链接

题意:给你n根棍子,每根棍子长为a_i,每根棍子长度可以减1,使用四根如长为b, b, c, c的棍子可以拼成一个矩形。问这些棍子能拼成的最大举行面积之和。

思路:贪心。每根棍子只能和自己长度一样的或者少1长的棍子组合。故只需要排序,从大到小不断找这样组合累加就好了。

AC代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

long long stick[MAXN];
long long curx, cury;


int main()
{
    FSIO;
    int N;
    while(cin>>N)
    {

        for(int i=1;i<=N;++i)   cin>>stick[i];
        long long ans = 0;
        curx = 0;
        sort(stick+1,stick+1+N);
        for(int i=N;i>=1;--i)
        {
            if(stick[i]==-1)    continue;
            if(i>=2)
            {
                if(stick[i]-stick[i-1]>1)   continue;
                if(curx!=0)
                {
                    ans = ans + curx*min(stick[i],stick[i-1]);
                    curx = 0;
                }
                else    curx = min(stick[i],stick[i-1]);
                stick[i-1] = -1;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}



D Arthur and Walls

题目链接:点击打开链接

题意:一个N x M的地方,*代表墙,相邻的 . 组合代表房间,现在要你敲掉最小的墙的数量将所有房间都变成矩形。问最后这块地方是怎样的。

思路:需要敲墙的时候,必然是对于四个邻接点有一个*,所以只需要不断地找这样的方格改变就好了。

AC代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 2005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

char mapp[MAXN][MAXN];
int N, M;

void dfs(int x, int y)
{
    int cnt = 0;
    if(x+1>N||y+1>M||x<1||y<1)    return;
    int ggx, ggy;   ggx=ggy=-1;
    for(int i=x;i<=x+1;++i)
        for(int j=y;j<=y+1;++j)
            if(mapp[i][j]=='*')
            {
                ggx=i;
                ggy=j;
                cnt++;
            }
    if(cnt==1)
    {
        mapp[ggx][ggy] = '.';
        dfs(x-1,y);dfs(x-1,y-1);
        dfs(x,y-1);dfs(x-1,y+1);
        dfs(x+1,y);dfs(x+1,y-1);
        dfs(x,y+1);dfs(x+1,y+1);
    }
}

int main()
{
    FSIO;
    while(cin>>N>>M)
    {
        memset(mapp,0,sizeof(mapp));
        for(int i=1;i<=N;++i)
            for(int j=1;j<=M;++j)
                cin>>mapp[i][j];
        for(int i=1;i<N;++i)
            for(int j=1;j<M;++j)
                dfs(i,j);
        for(int i=1;i<=N;++i)
        {
            for(int j=1;j<=M;++j)
                cout<<mapp[i][j];
            cout<<endl;
        }
    }

    return 0;
}



E Anya and Cubes

题目链接:点击打开链接

题意:有n个立方体,上面标有数字num,你可以使用贴纸将其变为num!。现在给你n个立方体,k个贴纸,和一个数字S,要你求经过一系列操作之后选则一定数量的立方体求其上数字之和为S的方案数。

思路:首先,S范围不超过1e16,故只有原标数字小于19的立方体贴纸才有意义。而一个立方体只有三种可能,即不取,取原数字,取原数字的阶乘。

考虑到暴力枚举所有方案,很难存储下这么多数据。

故不妨将原盒子分为两部分来凑成S。这样复杂度变为O(12^3 * 13^3 * 25),而考虑到每次枚举完后,k不可能每次都那么大,故复杂度近似为O(1e9)。

AC代码如下:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>

using namespace std;

#define FSIO  ios::sync_with_stdio(0);cin.tie(0);
#define DEBUG(a)   cout<<"DEBUG: "<<(a)<<endl;

const int MAXN = 100005;
const int MOD = 1e9+7;
const int INF = 1e9+7;

long long fac[25];
map<long long, int> res[30];
long long num[30];
long long S;
int n, k, mid;
long long ans;

void init()
{
    fac[0] = 1;
    for(int i=1;i<19;++i)
        fac[i] = (long long)i*fac[i-1];
}

void foredfs(int index, int kki, long long summ)
{
    if(kki>k||summ>S)   return ;
    if(index>n)
    {
        res[kki][summ]++;
        return;
    }
    if(num[index]<19)  foredfs(index+1,kki+1,summ+fac[num[index]]);
    foredfs(index+1,kki,summ+num[index]);
    foredfs(index+1,kki,summ);
}

void aftdfs(int index, int kki, long long summ)
{
    if(kki>k||summ>S)   return ;
    if(index>mid)
    {
        for(int i=0;i<=k-kki;++i)
            ans = ans + res[i][S-summ];
        return;
    }
    if(num[index]<19)  aftdfs(index+1,kki+1,summ+fac[num[index]]);
    aftdfs(index+1,kki,summ+num[index]);
    aftdfs(index+1,kki,summ);
}

int main()
{
    init();
    while(scanf("%d%d%I64d",&n,&k,&S)!=EOF)
    {
        for(int i=1;i<=n;++i)   scanf("%I64d",num+i);
        ans = 0;
        for(int i=0;i<=k;++i)   res[i].clear();
        mid = n/2;
        foredfs(mid+1,0,0);
        aftdfs(1,0,0);

        printf("%I64d\n",ans);
    }

    return 0;
}

Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2 寒假每日训练2021/1/21 每日亿题 这套Div2 好简单呀,我写了不到两个小时就快AK了… 阅读详情

相关推荐

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4027

Codeforces #303 Div 2 简要题解

比赛总结第一次AKdiv 2,非常开心,罚时也还好。 比赛中的提交记录 在正式和非正式选手中排名179名(共6932) 在正式选手里排名27名(2826人)A. Toy Cars题目链接http://codeforces.com/contest/545/problem/A题目大意给出每个车ii和其他车jj的碰撞情况(ii撞毁、jj撞毁、i、ji、j均撞毁、i、ji、j均未撞毁),问有

某沙茶的OI代码库 649

Mac用户必看:Typora最新版永久激活+弹窗屏蔽保姆级教程(附崩溃解决方案)

本文为Mac用户提供了一份详尽的Typora最新版永久激活与弹窗屏蔽教程。通过修改关键JS文件,实现软件激活状态并彻底关闭成功提示弹窗。文章深入剖析了操作原理,并重点提供了解决由此引发的多文档崩溃问题的实用临时方案,同时客观讨论了该方法的局限性与潜在风险。

wine的专栏 2081

【11.3】【VP】Codeforces Round #726 (Div. 2)

一个有瑕疵的思路是,先后缀排序一下,找到最长的后缀。思路:策略就是,找到最长的一个后缀,去掉或者不去掉这个后缀之后,剩下的部重复复制即可。如果有奇数环,那么一定有解,求解的策略为:在奇数环上顺次跑一边,一定可以使得某个点。记念第一次 AK div.2 ,这一场后几道题做起来比较顺手,而且是比较擅长的题。是最小的,如果复制一份,第二份就会又影响到字典序,因此要复制一份之后跑后缀排序。思路:赛时打表找的规律,不会证明。你可以随意的进行操作,也可以不进行操作。,二者轮流行动,每次行动可以在当前的。

ZhgDgE的博客 374

Codeforces Round 856 (Div. 2) 最好akdiv2

阴间场的奇迹

qq_52358098的博客 1288

Codeforces Round #148 (Div. 2)AK

A:...比赛的时候居然写挂了。。。 A 1 #include<cstdio> 2 int main(){ 3 int y,k,n; 4 while(~scanf("%d%d%d",&y,&k,&n)){ 5 bool f=0; 6 for(int i=1;i*k<=n;i++)...

weixin_30273175的博客 116

Codeforces Round #796 (Div. 2)(A-D)

tnnd,为什么不AKdiv2?(还不是因为不会做+时间少。

eyuhaobanga的博客 164

Codeforces Round #272 (Div. 2)AK报告

A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Dreamoon wants to climb up a stair of n steps.

Last Order 1893

Codeforces Round #297 (Div. 2) D题. Arthur and Walls(BFS)

题目地址:Arthur and Walls 这题有一个脑洞,对于当前的点(i,j)并且此点为”*”来说,若存在包含它的2*2正方形中除了它自己外,另外三个点都是”.”,那么这个点就必须要变成”.”。由于去掉这个点之后会对周围的8个点造成影响,所以可以用BFS去搜。WA第12组的应该是只考虑了会影响到周围的4个点了。 代码如下:#include <iostream> #include <strin

scf0920 1449

Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs

题目链接: http://codeforces.com/contest/525/problem/D 题意 给你一个n*m的田地,有一些*的地方是可以移除变成"."的,然后问你移除最少的"*",使的每一个"."的联通块都是矩形 题解: 2*2 的矩形中,如果有一个 '*' 与三个 '.' ,那么这个 '*' 就一定要变成 ‘.' ,然后bfs 代码 1 #incl...

weixin_30900589的博客 118

Cf 98 Div.2

ak了一场 div2。。。 A题 给定一个CCPPCCPPCCCCCPPPP这样的只有C,P的串,从左到右,每次最多取5个字符,每次取的字符必须相同,问最少要取多少次。 我的代码比较短: 每次循环定个初始位置,以该位置的下一个位置开始for循环4次. int main() { int ans,i,n; char ch[110]; while(cin>

坐井观天 631

Codeforces #309(div2

从来没有写过博客,想想是该写点自己的博客了,但是并不知道该写点什么。 昨晚做的codeforces感觉还不错,排名排到自己的最好成绩div2第118名。 前面两题有点简单,就不多做说明,如果看了题目觉得有困难的同学,可以参考一下我的代码,然后再认真析一下,应该是没多大问题的。 #include using namespace std; int main() { string str;

Yick_Liao的专栏 688

ACM-ICPC 2018 焦作赛区网络预赛(A B E F G H I K L)

ACM-ICPC 2018 沈阳赛区网络预赛(待更新) A. Magic Mirror 题目链接 题面: Jessie has a magic mirror. Every morning she will ask the mirror: ‘Mirror mirror tell me, who is the most beautiful girl in the world?’ If...

LFhase‘s Blog 2663

Codeforces Round #464 (Div. 2) C Convenient For Everybody

题目链接:点击打开链接题意:一天n个小时,全球n个时区,当第一个时区当地时间为1时,第i个时区当地时间为i。现在要举办某种比赛,历时1小时,每个时区有a_i个人参加。给定s和f,如果对于某个时区i,(均为当地时间)比赛开始时间不早于s且结束时间不迟于f则当地选手都会参加这个比赛。现在要求某个对第1时区的时间,使得比赛在这个时间开始时全球参加的人数最多。思路:时区换算比较麻烦,比如n=5时,时间的推...

LFhase‘s Blog 1520

Kick Start 2019 Round A Problem C. Contention

Round A - Kick Start 2019 Problem C. Contention C. Contention 题目链接 题面: You are selling tickets for the front row of seats at a movie theater. The front row has N seats, numbered 1 to N from left to ...

LFhase‘s Blog 1413

2018 CCPC 网络赛 (待更新) HDU 6438 ~ 6447

2018 CCPC 网络赛 (待更新) HDU 6438 ~ 6447 莫干山半日游,体验略差啊、、 (1001) HDU 6438 Buy and Resell 题目链接 题意: 思路: AC代码: (1003) HDU 6440 Dream 题目链接 题意: 对一个质数P,对小于P的非负数定义一种乘法和加法运算,使得其满足封闭性,且对于存在...

LFhase‘s Blog 1335

ACM-ICPC 2018 北京赛区网络预赛(A B C D H)

ACM-ICPC 2018 北京赛区网络预赛(待更新) A. Saving Tang Monk II #####题目链接 题面: 划掉 题意: 大搜索,队友写的 思路: 大搜索,队友写的 AC代码: #include &amp;amp;amp;amp;lt;cmath&amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt; #include &amp;amp;amp;am

LFhase‘s Blog 1206

ACM-ICPC 2018 徐州赛区网络预赛(除C、E外题解)

ACM-ICPC 2018 Xuzhou Online 徐州赛区网络赛(待更新) D Easy Math 题目链接 题意: 计算Σmi=1μ(in)Σi=1mμ(in)\Sigma_{i=1}^{m}\mu(in) 思路: 莫比乌斯反演+筛法。 设 f(m,n)=Σmi=1μ(in)=Σmi=1μ(i)[gcd(i,n)=1]μ(n)f(m,n)=Σi=1mμ(...

LFhase‘s Blog 1139

Codeforces Round #458 C Travelling Salesman and Special Numbers

题目链接:点击打开链接 题意:给定一种reduce操作(将某数置成其二进制表示下1的个数),某数reduce到1所需要的操作次数为其步长,给一个二进制数,要求求出小于该数且步长为k的所有数的个数模1e9+7。 思路:  注意到所有范围内的数的二进制表示下1的个数不会超过1000,所以所有数经一步操作后会落在1-1000范围内,同理,再操作一次会 落到1-10的范围,而1-10内步长最长的为

LFhase‘s Blog 1051

CCPC 秦皇岛站体验

2017 CCPC秦皇岛站算是第一次非常正式的比赛了 之前就听说来了许多强校,没想到左边是哈工大一队对面是南大一队斜对面是qls 被金牌队纷纷包围让鶸十紧张 总的来说,体验还是非常好的,除了环卫工人,救生衣,草稿纸,滚榜BGMbalabala 热身赛,上来切AC,B卡了一会用java上了高精度,排名大概银尾(弱队orz) 正式赛, A的气球好多啊?难道是水题?哦,原来是L L太紧张

LFhase‘s Blog 881

HDU 6208 The Dominator of Strings (kkkkkk....mp)

鶸不想说话 #include #include #include #include #include using namespace std; int nextj[100005]; char S[100005]; int N, num_max; int be[100005], len[100005]; void get_next(char*ss, int M) {

LFhase‘s Blog 773
上一篇: Codeforces Round #472 A-D
下一篇: 牛客网多校赛第一场 J Different Integers
LFhase
博客等级 码龄10年 9粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值