没有找到这场div3被改成div2的理由。

  A:签到。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 1000000010
  5. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  6. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  7. int read()
  8. {
  9. int x=0,f=1;char c=getchar();
  10. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  11. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  12. return x*f;
  13. }
  14. int a[3],d;
  15. signed main()
  16. {
  17. cin>>a[0]>>a[1]>>a[2]>>d;
  18. sort(a,a+3);
  19. cout<<max(0,d-(a[1]-a[0]))+max(0,d-(a[2]-a[1]));
  20. return 0;
  21. //NOTICE LONG LONG!!!!!
  22. }

  B:随便做?

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 1000000010
  5. #define N 1000010
  6. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  7. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  8. int read()
  9. {
  10. int x=0,f=1;char c=getchar();
  11. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  12. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  13. return x*f;
  14. }
  15. int T;
  16. char a[N],b[N];
  17. signed main()
  18. {
  19. T=read();
  20. while (T--)
  21. {
  22. scanf("%s",a+1);int n=strlen(a+1);
  23. scanf("%s",b+1);int m=strlen(b+1);
  24. int cur=0;bool flag=1;
  25. for (int i=1;i<=n;i++)
  26. if (i==n)
  27. {
  28. if (cur==m) {flag=0;break;}
  29. for (int j=cur+1;j<=m;j++)
  30. if (a[i]!=b[j]) {flag=0;break;}
  31. }
  32. else if (a[i]==a[i+1])
  33. {
  34. if (cur==m||a[i]!=b[cur+1]) {flag=0;break;}
  35. else cur++;
  36. }
  37. else
  38. {
  39. if (cur==m||b[cur+1]!=a[i]) {flag=0;break;}
  40. cur++;int tmp=cur;
  41. while (cur<m&&b[cur+1]==b[tmp]) cur++;
  42. }
  43. if (flag) printf("YES\n");
  44. else printf("NO\n");
  45. }
  46. return 0;
  47. //NOTICE LONG LONG!!!!!
  48. }

  C:显然应该先删权值大的。注意到值域只有100,于是记录每个权值出现次数从大到小删直到满足条件即可。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 1000000010
  5. #define N 200010
  6. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  7. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  8. int read()
  9. {
  10. int x=0,f=1;char c=getchar();
  11. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  12. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  13. return x*f;
  14. }
  15. int n,m,a[N],cnt[N];
  16. signed main()
  17. {
  18. n=read(),m=read();
  19. for (int i=1;i<=n;i++) a[i]=read();
  20. int s=0;
  21. for (int i=1;i<=n;i++)
  22. {
  23. int u=m-a[i],c=0,w=s;
  24. if (s>u)
  25. for (int j=100;j>=1;j--)
  26. if (w-cnt[j]*j>u) c+=cnt[j],w-=cnt[j]*j;
  27. else {c+=(w-u-1)/j+1;break;}
  28. cnt[a[i]]++;s+=a[i];
  29. printf("%d ",c);
  30. }
  31. return 0;
  32. //NOTICE LONG LONG!!!!!
  33. }

  D:判一下删第一个数或删第二个数可不可行。不行的话公差就被固定下来,直接check。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 2000000010
  5. #define N 200010
  6. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  7. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  8. int read()
  9. {
  10. int x=0,f=1;char c=getchar();
  11. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  12. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  13. return x*f;
  14. }
  15. int n;
  16. struct data
  17. {
  18. int x,i;
  19. bool operator <(const data&a) const
  20. {
  21. return x<a.x;
  22. }
  23. }a[N];
  24. int check(int l,int r)
  25. {
  26. int d=a[l+1].x-a[l].x;
  27. for (int i=l+2;i<=r;i++) if (a[i].x-a[i-1].x!=d) return inf;
  28. return d;
  29. }
  30. signed main()
  31. {
  32. n=read();
  33. for (int i=1;i<=n;i++) a[i].x=read(),a[i].i=i;
  34. sort(a+1,a+n+1);
  35. if (n==2||n==3) {cout<<1;return 0;}
  36. if (check(2,n)!=inf) {cout<<a[1].i;return 0;}
  37. if (check(3,n)==a[3].x-a[1].x) {cout<<a[2].i;return 0;}
  38. int d=a[2].x-a[1].x;
  39. bool flag=0;int ans=0,last=a[2].x;
  40. for (int i=3;i<=n;i++)
  41. if (a[i].x-last!=d)
  42. {
  43. if (flag) {cout<<-1;return 0;}
  44. else flag=1,ans=a[i].i;
  45. }
  46. else last=a[i].x;
  47. cout<<ans;
  48. return 0;
  49. //NOTICE LONG LONG!!!!!
  50. }

  E:找到每种字母最左上和最右下出现位置。然后依次覆盖并check。注意细节。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 2000000010
  5. #define N 2010
  6. char getc(){char c=getchar();while ((c!='.')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  7. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  8. int read()
  9. {
  10. int x=0,f=1;char c=getchar();
  11. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  12. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  13. return x*f;
  14. }
  15. int T,n,m,c,first[30][2],last[30][2];
  16. char a[N][N],b[N][N];
  17. signed main()
  18. {
  19. T=read();
  20. while (T--)
  21. {
  22. n=read(),m=read();c=0;
  23. memset(first,0,sizeof(first));
  24. memset(last,0,sizeof(last));
  25. for (int i=1;i<=n;i++)
  26. for (int j=1;j<=m;j++)
  27. {
  28. a[i][j]=getc();
  29. if (a[i][j]!='.')
  30. {
  31. c=max(c,a[i][j]-'a'+1);
  32. if (!first[a[i][j]-'a'+1][0]) first[a[i][j]-'a'+1][0]=i,first[a[i][j]-'a'+1][1]=j;
  33. last[a[i][j]-'a'+1][0]=i,last[a[i][j]-'a'+1][1]=j;
  34. }
  35. }
  36. bool flag=1;
  37. for (int i=1;i<=c;i++) if (first[i][0]!=last[i][0]&&first[i][1]!=last[i][1]) {flag=0;break;}
  38. if (!flag) printf("NO\n");
  39. else
  40. {
  41. for (int i=1;i<=n;i++)
  42. for (int j=1;j<=m;j++)
  43. b[i][j]='.';
  44. for (int i=1;i<=c;i++)
  45. if (first[i][0])
  46. if (first[i][0]==last[i][0])
  47. for (int j=first[i][1];j<=last[i][1];j++)
  48. b[first[i][0]][j]='a'+i-1;
  49. else
  50. for (int j=first[i][0];j<=last[i][0];j++)
  51. b[j][first[i][1]]='a'+i-1;
  52. for (int i=1;i<=n;i++)
  53. for (int j=1;j<=m;j++)
  54. if (a[i][j]!=b[i][j]) {flag=0;break;}
  55. if (!flag) printf("NO\n");
  56. else
  57. {
  58. printf("YES\n");
  59. printf("%d\n",c);
  60. for (int i=1;i<=c;i++)
  61. if (first[i][0])
  62. {
  63. printf("%d %d %d %d\n",first[i][0],first[i][1],last[i][0],last[i][1]);
  64. }
  65. else printf("%d %d %d %d\n",first[c][0],first[c][1],last[c][0],last[c][1]);
  66. }
  67. }
  68. }
  69.  
  70. return 0;
  71. //NOTICE LONG LONG!!!!!
  72. }

  F:将每个数字是否出现视为9位二进制数。暴力枚举选择哪两个二进制数。注意细节。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 2000000010
  5. #define N 100010
  6. char getc(){char c=getchar();while ((c!='.')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  7. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  8. int read()
  9. {
  10. int x=0,f=1;char c=getchar();
  11. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  12. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  13. return x*f;
  14. }
  15. int n,m,a[N],b[N],c[N],f[1<<9],g[1<<9],id[1<<9];
  16. signed main()
  17. {
  18. n=read(),m=read();
  19. for (int i=1;i<=n;i++)
  20. {
  21. int x=read();
  22. for (int j=1;j<=x;j++) a[i]|=1<<read()-1;
  23. }
  24. for (int i=1;i<=m;i++)
  25. {
  26. c[i]=read();int x=read();
  27. for (int j=1;j<=x;j++) b[i]|=1<<read()-1;
  28. }
  29. for (int i=1;i<=n;i++) g[a[i]]++;
  30. for (int i=1;i<(1<<9);i++)
  31. for (int j=i;j;j=j-1&i)
  32. f[i]+=g[j];
  33. memset(g,60,sizeof(g));
  34. for (int i=1;i<=m;i++)
  35. if (c[i]<g[b[i]])
  36. {
  37. g[b[i]]=c[i];
  38. id[b[i]]=i;
  39. }
  40. int mx=0,mn=inf*2,ansx=0,ansy=0;
  41. for (int i=1;i<(1<<9);i++)
  42. for (int j=1;j<(1<<9);j++)
  43. if (id[i]&&id[j]&&f[i|j]>=mx)
  44. {
  45. if (f[i|j]>mx||f[i|j]==mx&&g[i]+g[j]<mn) mx=f[i|j],ansx=id[i],ansy=id[j],mn=g[i]+g[j];
  46. }
  47. if (ansx!=ansy) cout<<ansx<<' '<<ansy;
  48. else
  49. {
  50. if (ansx==0)
  51. {
  52. int mn=inf,mn2=inf,id1,id2;
  53. for (int i=1;i<=m;i++)
  54. if (c[i]<mn) mn2=mn,mn=c[i],id2=id1,id1=i;
  55. else if (c[i]<mn2) mn2=c[i],id2=i;
  56. cout<<id1<<' '<<id2<<endl;
  57. }
  58. else
  59. {
  60. int cost=inf,id;
  61. for (int i=1;i<=m;i++)
  62. if (i!=ansx&&c[i]<cost) cost=c[i],id=i;
  63. cout<<ansx<<' '<<id;
  64. }
  65. }
  66. return 0;
  67. //NOTICE LONG LONG!!!!!
  68. }

  G:G1随手状压dp。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 2000000010
  5. #define N 250
  6. #define P 1000000007
  7. char getc(){char c=getchar();while ((c!='.')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  8. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  9. int read()
  10. {
  11. int x=0,f=1;char c=getchar();
  12. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  13. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  14. return x*f;
  15. }
  16. int n,T,f[1<<15][3],s[1<<15],lg2[1<<15];
  17. struct data{int x,y;
  18. }a[N];
  19. void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
  20. signed main()
  21. {
  22. n=read(),T=read();
  23. for (int i=0;i<n;i++) a[i].x=read(),a[i].y=read()-1;
  24. for (int i=0;i<n;i++) f[1<<i][a[i].y]=1;
  25. for (int i=1;i<(1<<n);i++)
  26. for (int j=0;j<3;j++)
  27. for (int x=0;x<n;x++)
  28. if (i&(1<<x)&&a[x].y==j)
  29. {
  30. for (int k=0;k<3;k++)
  31. if (j!=k) inc(f[i][j],f[i^(1<<x)][k]);
  32. }
  33. for (int i=0;i<n;i++) lg2[1<<i]=i;
  34. for (int i=1;i<(1<<n);i++) s[i]=s[i^(i&-i)]+a[lg2[i&-i]].x;
  35. int ans=0;
  36. for (int i=1;i<(1<<n);i++)
  37. if (s[i]==T) inc(ans,f[i][0]),inc(ans,f[i][1]),inc(ans,f[i][2]);
  38. cout<<ans;
  39. return 0;
  40. //NOTICE LONG LONG!!!!!
  41. }

  G2首先容易想到只要求出f[x][y][z]为选择三类物品各x,y,z个且总重量和为T的方案数,将其排列的方案数可以随后计算。直接暴力背包复杂度O(Tn4),常数应该非常小空间搞搞应该也没问题大概就能过了,但看起来复杂度有点垃圾。而优化非常简单,可以把前两类物品先放一块做O(Tn3)的背包,然后再对第三类物品自身做背包,最后合并两个背包,由于总重量和T固定,复杂度即为O(Tn3)。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define inf 2000000010
  5. #define N 55
  6. #define M 2550
  7. #define P 1000000007
  8. char getc(){char c=getchar();while ((c!='.')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
  9. int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
  10. int read()
  11. {
  12. int x=0,f=1;char c=getchar();
  13. while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
  14. while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
  15. return x*f;
  16. }
  17. int n,m,f[N][N][N][3],g[N][N][N],h[M][N][N],u[M][N],fac[N],ans;
  18. struct data
  19. {
  20. int x,y;
  21. bool operator <(const data&a) const
  22. {
  23. return y<a.y;
  24. }
  25. }a[N];
  26. void inc(int &x,int y){x+=y;if (x>=P) x-=P;}
  27. signed main()
  28. {
  29. n=read(),m=read();
  30. for (int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
  31. sort(a+1,a+n+1);
  32. f[1][0][0][0]=f[0][1][0][1]=f[0][0][1][2]=1;
  33. for (int i=2;i<=n;i++)
  34. for (int x=0;x<=i;x++)
  35. for (int y=0;x+y<=i;y++)
  36. {
  37. int z=i-x-y;
  38. if (x)
  39. {
  40. inc(f[x][y][z][0],f[x-1][y][z][1]);
  41. inc(f[x][y][z][0],f[x-1][y][z][2]);
  42. }
  43. if (y)
  44. {
  45. inc(f[x][y][z][1],f[x][y-1][z][0]);
  46. inc(f[x][y][z][1],f[x][y-1][z][2]);
  47. }
  48. if (z)
  49. {
  50. inc(f[x][y][z][2],f[x][y][z-1][0]);
  51. inc(f[x][y][z][2],f[x][y][z-1][1]);
  52. }
  53. }
  54. for (int i=0;i<=n;i++)
  55. for (int j=0;j<=n;j++)
  56. for (int k=0;k<=n;k++)
  57. g[i][j][k]=((f[i][j][k][0]+f[i][j][k][1])%P+f[i][j][k][2])%P;
  58. fac[0]=1;for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%P;
  59. for (int i=0;i<=n;i++)
  60. for (int j=0;j<=n;j++)
  61. for (int k=0;k<=n;k++)
  62. g[i][j][k]=1ll*g[i][j][k]*fac[i]%P*fac[j]%P*fac[k]%P;
  63. int t=n;
  64. for (int i=n;i>=1;i--) if (a[i].y!=3) {t=i;break;}
  65. h[0][0][0]=1;
  66. for (int i=1;i<=t;i++)
  67. for (int j=i*50;j>=a[i].x;j--)
  68. for (int x=0;x<=i;x++)
  69. for (int y=0;y<=i;y++)
  70. if (a[i].y==1)
  71. {
  72. if (x) inc(h[j][x][y],h[j-a[i].x][x-1][y]);
  73. }
  74. else
  75. {
  76. if (y) inc(h[j][x][y],h[j-a[i].x][x][y-1]);
  77. }
  78. u[0][0]=1;
  79. for (int i=t+1;i<=n;i++)
  80. for (int j=m;j>=a[i].x;j--)
  81. for (int k=1;k<=n;k++)
  82. inc(u[j][k],u[j-a[i].x][k-1]);
  83. for (int i=0;i<=m;i++)
  84. for (int x=0;x<=n;x++)
  85. for (int y=0;y<=n;y++)
  86. if (h[i][x][y])
  87. for (int z=0;z<=n;z++)
  88. inc(ans,1ll*h[i][x][y]*u[m-i][z]%P*g[x][y][z]%P);
  89. cout<<ans;
  90. return 0;
  91. //NOTICE LONG LONG!!!!!
  92. }

  小小小小小号小号5。结束时是official的rk3,st完变成rk1,可能因为cf有一些新的规定于是被ban成unofficial的了,感觉有点惨。

Codeforces Round #568 Div. 2的更多相关文章

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

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

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

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

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

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

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

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

  5. 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 ...

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

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

  7. Codeforces Round #568 (Div. 2) A.Ropewalkers

    链接: https://codeforces.com/contest/1185/problem/A 题意: Polycarp decided to relax on his weekend and v ...

  8. Codeforces Round #568 (Div. 2) G1. Playlist for Polycarp (easy version) (状压dp)

    题目:http://codeforces.com/contest/1185/problem/G1 题意:给你n给选项,每个选项有个类型和价值,让你选择一个序列,价值和为m,要求连续的不能有两个相同的类 ...

  9. Codeforces Round #568 (Div. 2) G2. Playlist for Polycarp (hard version)

    因为不会打公式,随意就先将就一下? #include<cstdio> #include<algorithm> #include<iostream> #include ...

随机推荐

  1. P1071 潜伏者

    //Pro:NOIP2009 T1 P1071 潜伏者 #include<iostream> #include<cstdio> #include<cstring> ...

  2. string拼接时去掉最后一个逗号

     str.replace(str.length() - 1, str.length(), "");

  3. 编译.tex文件时出现的问题

    Error: “the second byte of the cjk code is out of range” 发生在使用pdflatex和bibtex时.可能是.bib文档中出现了中文字符,包括中 ...

  4. mysql 字段拼接

    mysql> select concat(name,"**",id) as test from test; +----------------+ | test | +---- ...

  5. 【算法编程 C++ python】单链表反序输出

    题目描述 输入一个链表,从尾到头打印链表每个节点的值.   以下方法仅仅实现了功能,未必最佳.在牛客网测试, C++:3ms 480k Python:23ms 5732k /** * struct L ...

  6. a标签伪类选择器+过度模块

    a标签的伪类选择器 1.什么是a标签的伪类选择器?a标签的伪类选择器是专门用来修改a标签不同状态的样式的. 2.格式: 1):link 修改从未被访问过状态下的样式. 2):visited 修改被访问 ...

  7. 第06组 Alpha冲刺(4/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了用户联系模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...

  8. Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

    UTF-8是使用1~4个字节,一种变长的编码格式,字符编码.mb4即 most bytes 4,使用4个字节来表示完整的UTF-8. mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 ...

  9. Excel 如何查找 问号 “?” 、星号“*” 、 “~”号

    若需要查找问号“?”,则在查找内容文本框中输入“~?”.“?”为通配符,代替单个任意字符,如果直接查找,会找到包含数据的所有单元格. 若需要查找星号“*”,则在查找内容文本框中输入“~*”.“*”为通 ...

  10. docker安装并运行elasticsearch

    拉取镜像: [mall@VM_0_7_centos ~]$ [sudo] password for mall: : Pulling from library/elasticsearch 256b176 ...