codeforces 791B 791 C

来源:互联网 发布:mac os 10.11.6 懒人 编辑:程序博客网 时间:2024/05/22 06:42

好久没打CF了,打一次找回手感,结果还是被虐,只写出了3题,而且第二题还因为少开了10倍的空间,没用long long 导致被卡掉(CF给的pretest是有多么神奇,当时都已经过了pretest),第三题还被我写成暴力了。。。

B题其实就是求是否是完全图就可以了,直接暴力DFS。

C题的话,其实每个区间各自对应着不同的起止点,如果又起止点来决定这个区间是否有重复的字符串的话,就能保证不影响其他字符串了。

代码:

#include <bits/stdc++.h>#define maxn 160000#define maxm 320000#define ll long longusing namespace std;int n,m;int pre[maxm],now[maxn],son[maxm],tot;bool vis[maxn];int tot_B,tot_D;void build(int a,int b){pre[++tot]=now[a];now[a]=tot;son[tot]=b;}bool dfs(int x,int fa){vis[x]=1;for (int p=now[x];p;p=pre[p]){if (!vis[son[p]]){tot_D++;dfs(son[p],x);}tot_B++;}}int main(){scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int a,b;scanf("%d%d",&a,&b);build(a,b);build(b,a);}for (int i=1;i<=n;i++)if (!vis[i]){tot_D=1; tot_B=0;dfs(i,0);tot_B/=2;if (tot_B!=(1LL*tot_D*(tot_D-1)/2)){puts("NO");return 0;}}puts("YES");return 0;}
C题代码:
#include <bits/stdc++.h>#define ll long longusing namespace std;int n,k;char s[1000];bool bo[5000];char ch[100][5];int ans[10000];bool st[1000],ed[1000],bo_op[1000];int main(){scanf("%d%d",&n,&k);for (int i=1;i<=26;i++){ch[i][0]=i+'A'-1;ch[i+26][0]=i+'A'-1;ch[i+26][1]=i+'a'-1;}for (int i=1;i<=n-k+1;i++){scanf("%s",s);if (s[0]=='Y')bo[i]=1;elsebo[i]=0;}for (int i=1;i<=n;i++)ans[i]=i;for (int i=1;i<=n-k+1;i++)if (!bo[i])ans[i+k-1]=ans[i];for (int i=1;i<n;i++)printf("%s ",ch[ans[i]]);printf("%s\n",ch[ans[n]]);return 0;}

0 0