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

A

签到。

B

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

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

C

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

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

D

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

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

E

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

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

F

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

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

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=,mod=1e9+;
int n,T,ans,f[][N][N*N],g[][N][N][N],s[N][N][N],fac[N];
vector<int>G[];
void add(int&x,int y){x=x+y>=mod?x+y-mod:x+y;}
int main()
{
scanf("%d%d",&n,&T);
fac[]=;for(int i=;i<=n;i++)fac[i]=1ll*fac[i-]*i%mod;
s[][][]=g[][][][]=g[][][][]=g[][][][]=;
for(int i=;i<n;i++)
for(int j=;i+j<n;j++)
for(int k=;i+j+k<n;k++)
for(int l=;l<;l++)
if(g[l][i][j][k])
{
if(l!=)add(g[][i+][j][k],g[l][i][j][k]);
if(l!=)add(g[][i][j+][k],g[l][i][j][k]);
if(l!=)add(g[][i][j][k+],g[l][i][j][k]);
}
for(int i=;i<=n;i++)
for(int j=;i+j<=n;j++)
for(int k=;i+j+k<=n;k++)
if(i||j||k)
s[i][j][k]=(1ll*g[][i][j][k]+g[][i][j][k]+g[][i][j][k])%mod*fac[i]%mod*fac[j]%mod*fac[k]%mod;
for(int i=,x,y;i<=n;i++)scanf("%d%d",&x,&y),G[y-].push_back(x);
for(int i=;i<;i++)
{
f[i][][]=;
for(int p=;p<G[i].size();p++)
{
int t=G[i][p];
for(int j=G[i].size()-;~j;j--)
for(int k=;k<=T-t;k++)add(f[i][j+][k+t],f[i][j][k]);
}
}
for(int i=;i<=G[].size();i++)
for(int t0=;t0<=T;t0++)
if(f[][i][t0])
for(int j=;j<=G[].size();j++)
for(int t1=;t0+t1<=T;t1++)
if(f[][j][t1])
for(int k=;k<=G[].size();k++)
if(f[][k][T-t0-t1])
add(ans,1ll*f[][i][t0]*f[][j][t1]%mod*f[][k][T-t0-t1]%mod*s[i][j][k]%mod);
printf("%d",ans);
}

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

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

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

Codeforces Round #568 (Div. 2)网卡&垫底记的更多相关文章

  1. Educational Codeforces Round 58 Div. 2 自闭记

    明明多个几秒就能场上AK了.自闭. A:签到. #include<iostream> #include<cstdio> #include<cmath> #inclu ...

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

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

  3. Codeforces Round #528 Div. 1 自闭记

    整天自闭. A:有各种讨论方式.我按横坐标排了下然后讨论了下纵坐标单调和不单调两种情况.写了15min也就算了,谁能告诉我printf和cout输出不一样是咋回事啊?又调了10min啊?upd:突然想 ...

  4. Codeforces Round #568 (Div. 2)B

    B. Email from Polycarp 题目链接:http://codeforces.com/contest/1185/problem/B 题目: Methodius received an e ...

  5. Codeforces Round #568 (Div. 2)A

    A. Ropewalkers 题目链接:http://codeforces.com/contest/1185/problem/A 题目: Polycarp decided to relax on hi ...

  6. codeforces Round #568(Div.2)A B C

    有点菜,只写出了三道.活不多说,上题开干. A. Ropewalkers Polycarp decided to relax on his weekend and visited to the per ...

  7. Codeforces Round #568 (Div. 2) D. Extra Element

    链接: https://codeforces.com/contest/1185/problem/D 题意: A sequence a1,a2,-,ak is called an arithmetic ...

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

    链接: https://codeforces.com/contest/1185/problem/C2 题意: The only difference between easy and hard ver ...

  9. Codeforces Round #568 (Div. 2) B. Email from Polycarp

    链接: https://codeforces.com/contest/1185/problem/B 题意: Methodius received an email from his friend Po ...

随机推荐

  1. C++面试常见问题——05字符串的逆序

    字符串的逆序 #include<iostream> #include<string.h> using namespace std; void ReverseStr(char s ...

  2. Oracle 序列(查询序列的值,修改序列的值)

    1.序列的语法形式 create sequence 序列名 increment by n start with n maxvalue n | nomaxvalue minvalue n | nomin ...

  3. 云时代架构阅读笔记二——Java性能优化(二)

    承接上文Java性能优化(一)https://www.cnblogs.com/guo-xu/p/11019267.html 4)尽量确定StringBuffer的容量 在说和这个标题相关之前,先说一下 ...

  4. Java笔记: protected的真正含义

    关于protected关键字,即使是Java初学者也能够说出它的含义:protected修饰的成员可以被子类访问.但是这样理解并不完全准确,下面考虑它的真正含义. Java访问控制回顾 Java语言定 ...

  5. 二、【重点】环境安装:通过淘宝 cnpm 快速安装使用 React,生成项目,运行项目、安装项目

    1.cnpm代替npm 如果你的系统还不支持 Node.js 及 NPM 可以参考我们的 Node.js 教程. 我们建议在 React 中使用 CommonJS 模块系统,比如 browserify ...

  6. spring boot配置druid连接池连接mysql

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  7. CF1209B Koala and Lights

    It is a holiday season, and Koala is decorating his house with cool lights! He owns n lights, all of ...

  8. zoj 2314Reactor Cooling

    秘制神奇上下界网络流%%% 什么什么有(木)源汇可行流什么的,,看不懂(一下纯属个人sb言论) 看了半天知道点,一个点u,从S连到u的流量是全部流入u的下界,u到T是全部流出u的下界和.(进去出来的约 ...

  9. Vulkan SDK之 Swapchain

    Swapchain是一系列最终会展示给用户的图像的集合. /* * Set up swapchain: * - Get supported uses for all queues * - Try to ...

  10. 八、CI框架之输出URI路径,相当于GET

    一.controller中的代码如下: 二.我们打开一个路径,输出对应的路径URI的值 http://127.0.0.1/CodeIgniter-3.1.10/index.php/welcome/in ...