【思维】洛谷P1320 压缩技术(续集)——灵活运用位运算
P1320 压缩技术(续集版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题解 P1320 【压缩技术(续集版)】 - RedContritio 的博客 - 洛谷博客 (luogu.com.cn)
注意:题解的代码,无法跳出第二个循环 for(;~scanf("%c",&c);) 。
ps.挺无语的,dev上面测试没有问题,一交上去就wa了。下载下来的测试点在dev上也没问题。换字符函数、提交时换c++版本、左改右改,wa声一片,不得其解。
最后想到用通过洛谷自带的在线IDE debug,终于发现这题在oj里换行由两个字符组成:第一个是CR(归位键,ASCII码13),第二个才是换行键LF(换行键,ASCII码10)。因为我是用换行 '\n'//ASCII码10 控制第二个循环的跳出,所以在洛谷IDE的结果与在dev上的结果不一样。发现这一点后,在洛谷IDE上改代码,试图保持用换行控制第二个循环,但失败了,莫名其妙超时。于是干脆换成用字符数控制,也就是下面的形式,这下就没问题了。
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; int main(){ int d[40005],i=1,n; char c; while(scanf("%c",&c)&&c>=('0')) i+=!(i&1^(c-'0')),d[i]++,d[0]++; n=d[0]*(d[0]-1); while(n){ scanf("%c",&c); if(c>='0') i+=!(i&1^(c-'0')),d[i]++,n--; } rep(j,0,i) cout<<d[j]<<" "; return 0; }
Keep it simple and stupid