这场和div3差不多嘛(后来发现就是div3),就是网太卡10min交一发就不错了,简直自闭。

A

签到。

B

记录每一段的字母数,满足条件即:段数相同+字母相同+字母数下>=上。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
char a[N],b[N];
int n,m,n1,n2,c1[N],s1[N],c2[N],s2[N];
bool check()
{int now=0;n1=n2=0;for(int i=1;i<=n;i++)if(i==1||a[i]!=a[i-1])c1[++n1]=a[i],s1[n1]=1;else s1[n1]++;for(int i=1;i<=m;i++)if(i==1||b[i]!=b[i-1])c2[++n2]=b[i],s2[n2]=1;else s2[n2]++;if(n1!=n2)return 0;for(int i=1;i<=n1;i++)if(c1[i]!=c2[i]||s1[i]>s2[i])return 0;return 1;
}
int main()
{int T;scanf("%d",&T);while(T--){scanf("%s",a+1),n=strlen(a+1);scanf("%s",b+1),m=strlen(b+1);if(check())puts("YES");else puts("NO");}
}

View Code

C

签到。不知设成C1和C2除了卡网速还有什么意义?根据ti<=100,直接数组维护每种t出现的次数,然后从大到小贪心删。不知为啥这签到题有人用treap?还T了?

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+7;
int n,m,a[N],s[N],num[102];
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]),s[i]=s[i-1]+a[i];for(int i=1;i<=n;i++)if(s[i]<=m)printf("0 "),num[a[i]]++;else{int rest=s[i]-m,ans=0;for(int j=100;j;j--)if(j*num[j]<rest)rest-=j*num[j],ans+=num[j];else{ans+=(rest+j-1)/j;break;}printf("%d ",ans);num[a[i]]++;}
}

View Code

D

把数列排个序,讨论删队头和队尾,其余的差分维护下即可。忘讨论还WA了两发。

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+7;
struct node{int id,v;}a[N];
int n,d[N],l[N],r[N];
bool cmp(node a,node b){return a.v<b.v;}
bool judge1()
{for(int i=3;i<n;i++)if(d[i]!=d[2])return 0;return 1;
}
bool judge2()
{for(int i=2;i<n-1;i++)if(d[i]!=d[1])return 0;return 1;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i].v),a[i].id=i;sort(a+1,a+n+1,cmp);for(int i=1;i<n;i++)d[i]=a[i+1].v-a[i].v;if(judge1()){printf("%d",a[1].id);return 0;}if(judge2()){printf("%d",a[n].id);return 0;}l[1]=1;for(int i=2;i<n;i++)if(d[i]==d[i-1])l[i]=1;else break;r[n-1]=1;for(int i=n-2;i;i--)if(d[i]==d[i+1])r[i]=1;else break;if(r[3]&&d[1]+d[2]==d[3]){printf("%d",a[2].id);return 0;}if(l[n-3]&&d[n-1]+d[n-2]==d[n-3]){printf("%d",a[n-1].id);return 0;}for(int i=3;i<=n-2;i++)if(l[i-2]&&r[i+1]&&d[1]==d[n-1]&&d[i-1]+d[i]==d[1]){printf("%d",a[i].id);return 0;}puts("-1");
}

View Code

E

写&交这题时网均卡了至少10min,导致我被Gloid吊打(虽然不卡还是被吊打)。就是每种字母分别枚举一下,然后直接做即可。

#include<bits/stdc++.h>
using namespace std;
const int N=2002;
int n,m,r1[27],c1[27],r2[27],c2[27],hr[N],hc[N];
char mp[N][N];
bool judge(int x)
{int sr=0,sc=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]=='a'+x-1){if(!hr[i])hr[i]=1,sr++;if(!hc[j])hc[j]=1,sc++;}if(sr>1&&sc>1)return 0;if(!sr&&!sc){r1[x]=r2[x]=r1[x+1],c1[x]=c2[x]=c1[x+1];return 1;}if(sr==1&&sc==1){for(int i=1;i<=n;i++)if(hr[i])hr[i]=0,r1[x]=r2[x]=i;for(int i=1;i<=m;i++)if(hc[i])hc[i]=0,c1[x]=c2[x]=i;return 1;}if(sr==1){for(int i=1;i<=n;i++)if(hr[i])r1[x]=r2[x]=i;for(int i=1;i<=m;i++)if(mp[r1[x]][i]=='a'+x-1){c1[x]=i;break;}for(int i=m;i;i--)if(mp[r1[x]][i]=='a'+x-1){c2[x]=i;break;}for(int i=c1[x];i<=c2[x];i++)if(mp[r1[x]][i]<'a'+x-1)return 0;}if(sc==1){for(int i=1;i<=m;i++)if(hc[i])c1[x]=c2[x]=i;for(int i=1;i<=n;i++)if(mp[i][c1[x]]=='a'+x-1){r1[x]=i;break;}for(int i=n;i;i--)if(mp[i][c1[x]]=='a'+x-1){r2[x]=i;break;}for(int i=r1[x];i<=r2[x];i++)if(mp[i][c1[x]]<'a'+x-1)return 0;}for(int i=r1[x];i<=r2[x];i++)hr[i]=0;for(int j=c1[x];j<=c2[x];j++)hc[j]=0;return 1;
}
int main()
{int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)hr[i]=0;for(int j=1;j<=m;j++)hc[j]=0;for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);int mx=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]>='a'&&mp[i][j]<='z')mx=max(mx,mp[i][j]-'a'+1);if(!mx){puts("YES\n0");continue;}for(int i=mx;i;i--)if(!judge(i)){mx=0;break;}if(!mx){puts("NO");continue;}printf("YES\n%d\n",mx);for(int i=1;i<=mx;i++)printf("%d %d %d %d\n",r1[i],c1[i],r2[i],c2[i]);}
}

View Code

F

签到,把每种馅料压缩成一个二进制位,枚举。这根本不能称之为题目。

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,ans1,ans2,a[512],mn[512],id[512];
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){int x,y,S=0;scanf("%d",&x);while(x--)scanf("%d",&y),S|=1<<y-1;a[S]++;}for(int i=0;i<512;i++)mn[i]=1e9+7;for(int i=1;i<=m;i++){int c,x,y,S=0;scanf("%d%d",&c,&x);while(x--)scanf("%d",&y),S|=1<<y-1;if(mn[S]>c)mn[S]=c,id[S]=i;}ans=-1;for(int i=0;i<511;i++)for(int j=i+1;j<512;j++)if(mn[i]<1e9+7&&mn[j]<1e9+7){int sum=0;for(int k=0;k<512;k++)if(((i|j)&k)==k)sum+=a[k];if(sum>ans)ans=sum,ans1=i,ans2=j;else if(sum==ans&&mn[ans1]+mn[ans2]>mn[i]+mn[j])ans1=i,ans2=j;}if(ans==-1)puts("1 2");else printf("%d %d",id[ans1],id[ans2]);
}

View Code

G

G1裸状压DP即可,不知这G1给2750分是啥意思?

咕了的G2终于写了。看大佬们各种常数小的暴力跑过,我也来写了一发暴力。注意g[i]<=3,可以考虑把其拆成3个背包,f[0/1/2][i][j]表示第0/1/2类,选了i件物品,体积和为j的方案数,直接暴力DP即可。然后可以枚举前两个背包的i和j,第三个背包的k,然后只需要预处理出s[i][j][k]表示每一类分别是i、j、k个物品的合法排列方案数,复杂度O(T^2*n^3),准确说是O(T^2*n^3/54)≈O(T^2*n^2),但是中途搜索排除了一些dp值为0的情况,所以实际复杂度明显比这小。

#include<bits/stdc++.h>
using namespace std;
const int N=52,mod=1e9+7;
int n,T,ans,f[3][N][N*N],g[3][N][N][N],s[N][N][N],fac[N];
vector<int>G[3];
void add(int&x,int y){x=x+y>=mod?x+y-mod:x+y;}
int main()
{scanf("%d%d",&n,&T);fac[0]=1;for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod;s[0][0][0]=g[0][1][0][0]=g[1][0][1][0]=g[2][0][0][1]=1;for(int i=0;i<n;i++)for(int j=0;i+j<n;j++)for(int k=0;i+j+k<n;k++)for(int l=0;l<3;l++)if(g[l][i][j][k]){if(l!=0)add(g[0][i+1][j][k],g[l][i][j][k]);if(l!=1)add(g[1][i][j+1][k],g[l][i][j][k]);if(l!=2)add(g[2][i][j][k+1],g[l][i][j][k]);}for(int i=0;i<=n;i++)for(int j=0;i+j<=n;j++)for(int k=0;i+j+k<=n;k++)if(i||j||k)s[i][j][k]=(1ll*g[0][i][j][k]+g[1][i][j][k]+g[2][i][j][k])%mod*fac[i]%mod*fac[j]%mod*fac[k]%mod;for(int i=1,x,y;i<=n;i++)scanf("%d%d",&x,&y),G[y-1].push_back(x);for(int i=0;i<3;i++){f[i][0][0]=1;for(int p=0;p<G[i].size();p++){int t=G[i][p];for(int j=G[i].size()-1;~j;j--)for(int k=0;k<=T-t;k++)add(f[i][j+1][k+t],f[i][j][k]);}}for(int i=0;i<=G[0].size();i++)for(int t0=0;t0<=T;t0++)if(f[0][i][t0])for(int j=0;j<=G[1].size();j++)for(int t1=0;t0+t1<=T;t1++)if(f[1][j][t1])for(int k=0;k<=G[2].size();k++)if(f[2][k][T-t0-t1])add(ans,1ll*f[0][i][t0]*f[1][j][t1]%mod*f[2][k][T-t0-t1]%mod*s[i][j][k]%mod);printf("%d",ans);
}

View Code

强烈谴责出题人,这题目难度排列顺序十分不合理。其实本场CF要是作为div2,应该删了C1、F和G1才正常,不过毕竟本来是作为div3的嘛,怪自己打完才发现。

result:rank37,以为上不了橙结果rating=2106,压线上橙,好啊好啊。不过rank1的Gloid(即poorinenglish)不知道为啥被ban了?

感觉这场就是比网速+开题顺序的。先开F/G1的人赢了。幸好这是小号吧(不过大号都unrated也无所谓了)。

转载于:https://www.cnblogs.com/hfctf0210/p/11056542.html

Codeforces Round #568 (Div. 2)网卡垫底记相关推荐

  1. Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)

    Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version) 贪心+暴力 大致题意:N个人考试,每个人花费的时间是a[i],他们总共花费 ...

  2. Codeforces Round #530 Div. 1 自闭记

    A:显然应该让未确定的大小尽量大.不知道写了啥就wa了一发. #include<iostream> #include<cstdio> #include<cmath> ...

  3. 【Codeforces Round #767 (Div. 2)】 C. Meximum Array 题解

    [Codeforces Round #767 (Div. 2) ]C. Meximum Array 题解 1629C: Meximum Array 题解 [Codeforces Round #767 ...

  4. Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

    传送门 题意: 有一颗nnn个节点的树,其中一个简单路径集合被称为kkk合法当且仅当: 树的每个节点至多属于一条路径,且每条路径恰好包含kkk个点. 对于k∈[1,n]k\in [1,n]k∈[1,n ...

  5. Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确定当前这个 ...

  6. Codeforces Round #599 (Div. 2) E. Sum Balance 图转换 + 子集dp + 环

    传送门 文章目录 题意: 思路: 题意: 思路: 首先我们知道如果所有数的和summodk!=0sum\bmod k!=0summodk!=0那么此时无解,否则我们设need=sum/kneed=su ...

  7. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  8. Codeforces Round #628 (Div. 2) E. Ehab‘s REAL Number Theory Problem 巧妙的质因子建图

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数的因子个数不超过777个,选出最少的数使其乘积为平方数. n≤1e5n\le 1e5n≤1e5 思路: 由于因子不超过777个,所以由约 ...

  9. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  10. Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑到最大面积是由四种颜色构成的,且四种颜色可以从中心扩展出去,所以我们分别维护四种颜色的二维前缀和,O(1)O(1)O(1)计算矩阵内颜色的个数.现 ...

最新文章

  1. c/c++ 修改文件的创建时间,修改时间,访问时间 [和弦]
  2. vantUI弹框组件 message文字,如何换行 ?
  3. 关于sha1加密的一个问题。。。。
  4. python极简代码实现快速排序
  5. spring 事务配置
  6. json转java对象_java对象与json对象间的相互转换的方法
  7. 如何做肌电信号手势识别?
  8. 均匀线阵常规波束形成 matlab程序,波束形成Matlab程序
  9. Socket编程模型之完成端口模型
  10. Linux课程--实验四 shell 编程
  11. pixi 小游戏_学习如何用pixi.js开发微信小游戏
  12. matplotlib is required for plotting.
  13. WiFi大师终极版4.1.8独立源码
  14. 在osgEarth中添加模型的简单示例
  15. 单位dB(分贝)的含义和好处,dBm(dBmW 分贝毫瓦)的含义 dB的含义
  16. CMS-by-Asp.net
  17. jive论坛消息的threaded显示模式解析
  18. java 正则大小写转换_JS应用正则表达式转换大小写示例
  19. PHP调用外部程序的方法
  20. [技巧] 网页视频倍速播放(以百度云盘为例)

热门文章

  1. SSM整理笔记3——配置解析
  2. 【Spring 核心】装配Bean(一) 自动化装配
  3. 关于在ubuntu14.04下firefox升级后refresh插件不好用
  4. shell中exec命令
  5. 【算法】普通方法和筛选法求素数
  6. (一〇二)静态库(.a)的打包
  7. 2014-08-06 小代码,大道理
  8. OpenERP __sql_constrants doesn't work.
  9. CSS hack:区分IE6,IE7,firefox
  10. EMNLP'21 | Dialogue System 对话系统