CF传送门

因为洛谷题库未更新,所以给出的题面都是CF的。

现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目 \(qwq\)

A. Spell Check

萌萌题,把字符串放桶里,判名字每个字母是否恰好出现一次即可。

\(9min\) \(AC\) \(qwq\) 都怪CF

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. string s;
  5. int t[150],T,n;
  6. void solve(){
  7. scanf("%d",&n);
  8. cin>>s;
  9. memset(t,0,sizeof(t));
  10. for(int i=0;i<n;i++) t[s[i]]++;
  11. if(t['T']==1&&t['i']==1&&t['m']==1&&t['u']==1&&t['r']==1&&n==5) printf("YES\n");
  12. else printf("NO\n");
  13. }
  14. int main(){
  15. scanf("%d",&T);
  16. while(T--) solve();
  17. return 0;
  18. }

B. Colourblindness

萌萌题\(\times 2\),将 \(G\) 和 \(B\) 视为相同,然后比一下两个字符串即可。

\(15min\) \(AC\)

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. string s1,s2;
  5. int T,n;
  6. bool a[105],b[105];
  7. void solve(){
  8. scanf("%d",&n);
  9. cin>>s1>>s2;
  10. memset(a,0,sizeof(a));
  11. memset(b,0,sizeof(b));
  12. for(int i=0;i<n;i++){
  13. if(s1[i]=='R') a[i]=1;
  14. if(s2[i]=='R') b[i]=1;
  15. }
  16. for(int i=0;i<n;i++){
  17. if(a[i]!=b[i]){
  18. printf("NO\n");
  19. return ;
  20. }
  21. }
  22. printf("YES\n");
  23. }
  24. int main(){
  25. scanf("%d",&T);
  26. while(T--) solve();
  27. return 0;
  28. }

C. Word Game

用三个 \(map\) 表示三个人每次用到过的字符串,然后分别判断其他两人有没有用过,并计算答案即可。

\(25min\) \(AC\)

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int T,n;
  5. string s1[1005],s2[1005],s3[1005];
  6. int ans1,ans2,ans3;
  7. void solve(){
  8. scanf("%d",&n);
  9. map<string,bool> a,b,c;
  10. ans1=ans2=ans3=0;
  11. for(int i=1;i<=n;i++) cin>>s1[i],a[s1[i]]=1;
  12. for(int i=1;i<=n;i++) cin>>s2[i],b[s2[i]]=1;
  13. for(int i=1;i<=n;i++) cin>>s3[i],c[s3[i]]=1;
  14. for(int i=1;i<=n;i++){
  15. if(b[s1[i]]+c[s1[i]]==0) ans1+=3;
  16. else if(b[s1[i]]+c[s1[i]]==1) ans1+=1;
  17. }
  18. for(int i=1;i<=n;i++){
  19. if(a[s2[i]]+c[s2[i]]==0) ans2+=3;
  20. else if(a[s2[i]]+c[s2[i]]==1) ans2+=1;
  21. }
  22. for(int i=1;i<=n;i++){
  23. if(b[s3[i]]+a[s3[i]]==0) ans3+=3;
  24. else if(b[s3[i]]+a[s3[i]]==1) ans3+=1;
  25. }
  26. printf("%d %d %d\n",ans1,ans2,ans3);
  27. }
  28. int main(){
  29. scanf("%d",&T);
  30. while(T--) solve();
  31. return 0;
  32. }

D. Line

首先可以知道,左半边的 \(L\) 改为 \(R\) 可以使答案更优,右半边的 \(R\) 改为 \(L\) 可以使答案更优。

所以只要先算出初始的答案,然后 \(l,r\) 从两边往中间扫,发现可以改的就更新答案并输出,同时 \(cnt\) 记着更新了几次。最后 \(cnt\) 还不到 \(n\) 的话说明已经最优不用改了,输出 \(n-cnt\) 次最终答案即可。

几个不等号注意一下即可。

\(41min\) \(AC\) \(qwq\)

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int T,n;
  5. ll ans;
  6. string s;
  7. void solve(){
  8. scanf("%d",&n);
  9. cin>>s;
  10. ans=0;
  11. for(int i=0;i<n;i++){
  12. if(s[i]=='L') ans+=(ll)i;
  13. else ans+=(ll)n-(ll)i-1ll;
  14. }
  15. int cnt=0,now=0;
  16. for(int l=0,r=n-1;l<=n/2,r>=n/2;l++,r--){
  17. if(s[l]=='L'){
  18. now++;
  19. ans-=(ll)l;
  20. ans+=(ll)n-(ll)l-1ll;
  21. }
  22. if(now>cnt){
  23. cnt=now;
  24. printf("%lld ",ans);
  25. }
  26. if(s[r]=='R'){
  27. now++;
  28. ans+=(ll)r;
  29. ans-=(ll)n-(ll)r-1ll;
  30. }
  31. if(now>cnt){
  32. cnt=now;
  33. printf("%lld ",ans);
  34. }
  35. }
  36. for(int i=1;i<=n-cnt;i++) printf("%lld ",ans);
  37. printf("\n");
  38. }
  39. int main(){
  40. scanf("%d",&T);
  41. while(T--) solve();
  42. return 0;
  43. }

E. Counting Rectangles

数据范围要求 \(O(1)\) 查询,所以一眼矩阵前缀和。

只需要预处理出 \(1000 \times 1000\) 范围内的 \(sum[i][j]\),表示 \(i\times j\) 的矩形可以容纳的答案即可。

同时注意,可能有重复的边长(如样例最后一组),所以 \(sum\) 初始时要 \(+=\)

但是这个菜ji赛时输出的调挂了喜提 WA

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. int T,n,q;
  4. ll sum[1005][1005],x,y;
  5. void solve(){
  6. memset(sum,0,sizeof sum);
  7. scanf("%d%d",&n,&q);
  8. for(int i=1;i<=n;i++){
  9. scanf("%lld%lld",&x,&y);
  10. sum[x][y]+=x*y;
  11. }
  12. for(int i=1;i<=1000;i++){
  13. for(int j=1;j<=1000;j++) sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
  14. }
  15. for(int i=1;i<=q;i++){
  16. int u,v,w,z;
  17. scanf("%d%d%d%d",&u,&v,&w,&z);
  18. printf("%lld\n",sum[w-1][z-1]+sum[u][v]-sum[u][z-1]-sum[w-1][v]);
  19. }
  20. }
  21. int main(){
  22. scanf("%d",&T);
  23. while(T--) solve();
  24. return 0;
  25. }

F. L-shapes

其实这题根本不用搜索,有耐心即可。

可以发现,在 \(n\times m\) 范围内扫,可能合法的只有以下四种情况,其中蓝色代表示是 *,红色表示不能是 *,其中黄色五角星表示当前 \(i,j\) 的位置。

所以只要把 * 标记为 \(1\),全图扫一遍,发现合法就给它变 \(0\),看最后有没有 \(1\) 剩余即可。

因为 \(E\) 卡太久,\(1h\) \(45min\) 才 \(AC\) \(qwq\)

Code:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int T,n,m,a[55][55];
  5. char c;
  6. void search(int i,int j){
  7. if(a[i+1][j]&&a[i+1][j+1]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
  8. !a[i][j-1]&&!a[i][j+1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j+2]&&
  9. !a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]&&!a[i+2][j+2]){
  10. a[i][j]=a[i+1][j]=a[i+1][j+1]=0;
  11. return ;
  12. }
  13. if(a[i+1][j-1]&&a[i+1][j]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
  14. !a[i][j-2]&&!a[i][j-1]&&!a[i][j+1]&&!a[i+1][j-2]&&!a[i+1][j+1]&&
  15. !a[i+2][j-2]&&!a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]){
  16. a[i][j]=a[i+1][j-1]=a[i+1][j]=0;
  17. return ;
  18. }
  19. if(a[i][j+1]&&a[i+1][j+1]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
  20. !a[i-1][j+2]&&!a[i][j-1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j]&&
  21. !a[i+1][j+2]&&!a[i+2][j]&&!a[i+2][j+1]&&!a[i+2][j+2]){
  22. a[i][j]=a[i][j+1]=a[i+1][j+1]=0;
  23. return ;
  24. }
  25. if(a[i][j+1]&&a[i+1][j]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
  26. !a[i-1][j+2]&&!a[i][j-1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j+1]&&
  27. !a[i+1][j+2]&&!a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]){
  28. a[i][j]=a[i][j+1]=a[i+1][j]=0;
  29. return ;
  30. }
  31. }
  32. void solve(){
  33. scanf("%d%d",&n,&m);
  34. memset(a,0,sizeof(a));
  35. for(int i=1;i<=n;i++){
  36. for(int j=1;j<=m;j++){
  37. cin>>c;
  38. if(c=='*') a[i][j]=1;
  39. }
  40. }
  41. for(int i=1;i<=n;i++){
  42. for(int j=1;j<=m;j++){
  43. if(a[i][j]==1) search(i,j);
  44. }
  45. }
  46. for(int i=1;i<=n;i++){
  47. for(int j=1;j<=m;j++){
  48. if(a[i][j]==1){
  49. printf("NO\n");
  50. return ;
  51. }
  52. }
  53. }
  54. printf("YES\n");
  55. }
  56. int main(){
  57. scanf("%d",&T);
  58. while(T--) solve();
  59. return 0;
  60. }

G. Even-Odd XOR

巧妙的构造。赛时来不及了

应该有很多种方法,说一下我的想法。

首先发现从 \(0\) 开始排的有序数列,它的奇数位、偶数位的异或和很有特点(可以手算)。只要有办法让他们都等于 \(0\) 就是合法的答案了。

同时可以得知,要使 \(x_1\) 到 \(x_n\) 的异或和为 \(0\),只需要 \(x_1\) 到 \(x_{n-1}\) 的异或和等于 \(x_n\) 即可。

所以计一个 \(k\) 表示 \(0\) 到 \(n-1\) 的异或和放在最后,但发现这样能会出现重复数字,比如 \(0\) 到 \(7\) 异或和为 \(0\),数列出现两个 \(0\) 就不合法了。

所以想到搞两个大数,比如 \(x=2^{24}\) 和 \(y=2^{25}\),各放在奇、偶位,同时将得到的 \(k\oplus x\oplus y\) ,答案就还是合法的且不会重复。多出两个数怎么办?\(0\) 到 \(n-1\) 改为到 \(n-3\) 即可。

Code:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int T,n,k;
  4. void solve(){
  5. scanf("%d",&n);
  6. k=0;
  7. for(int i=0;i<n-3;i++){
  8. printf("%d ",i);
  9. k^=i;
  10. }
  11. int x=1<<24,y=1<<25;
  12. printf("%d %d %d\n",k^x^y,x,y);
  13. }
  14. int main(){
  15. scanf("%d",&T);
  16. while(T--) solve();
  17. return 0;
  18. }

G L & H F !

Codeforces Round #817 (Div. 4)的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. 1.7_CSS基础

    层叠样式表 (Cascading Style Sheets) CSS产生缘由 HTML 标签原本被设计为用于定义文档内容.通过使用 <h1>.<p>.<table> ...

  2. C# Hashtable VS. Dictionary 性能对比

    Hashtable VS Dictionary 因为Hashtable的Key和Value都是object类型,所以在使用值类型的时候,必然会出现装箱和拆箱的操作,因此性能肯定是不如Dictionar ...

  3. gem5 使用记录,对例子中helloobject的理解

    gem5中有一个 hello的例子,不是hello world那个,在src/learning-gem5/part2里面,这是虽然是个简单的例子但包含的要素挺多挺全. 整个结构是src下面有一个hel ...

  4. scheduler打印状态到日志

    编辑脚本和目录 # 如下步骤每个proxysql节点都需要操作 [root@ss30 opt]# mkdir -p /opt/proxysql/log [root@ss30 opt]# vim /op ...

  5. Prometheus 监控外部 Kubernetes 集群

    转载自:https://www.qikqiak.com/post/monitor-external-k8s-on-prometheus/ 在实际环境中很多企业是将 Prometheus 单独部署在集群 ...

  6. Elasticsearch:使用 Nginx 来保护 Elastic Stack

    文章转载自:https://elasticstack.blog.csdn.net/article/details/112213364

  7. nginx干货文档

    文档地址:https://files.cnblogs.com/files/sanduzxcvbnm/跟冰河学习Nginx技术.pdf

  8. 初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

    转载自:https://cloud.tencent.com/developer/article/1433280 文章目录1.Prometheus & Grafana 介绍1.1.Prometh ...

  9. 驱动通信:通过PIPE管道与内核层通信

    在本人前一篇博文<驱动开发:通过ReadFile与内核层通信>详细介绍了如何使用应用层ReadFile系列函数实现内核通信,本篇将继续延申这个知识点,介绍利用PIPE命名管道实现应用层与内 ...

  10. Java问题之超过数值表示范围(例如64位)结果是什么 (阶乘)

    关于老师在课上所提及的这个问题 我做了验证 截图如下 只是一个简单的计算阶乘的代码 在运行时得到了如下结果 可以看到,对于部分数字如果超出范围会从64位处自动截断,而这时由于是二进制表示,首位默认是符 ...