对于vijos11.2模拟赛
特意起了个傻逼标题,只是想提醒一下自己以后不要犯逗(所以应该没有什么神犇点进来吧?)
T1,T3 当场写的时候就觉得是不可写的,看了题解之后还是觉得不可写,人弱没办法。到了这个时候也懒得管这么难的东西了
MARK一下T2和T4好了
最近很少写字符串,T2应该算是个教训吧;
读换行符的时候 getchar();
读一整行(带空格)的字符串用 getline(s,cin);
读下一行的时候,不需要再getchar()了
顺便复习下...
但是这题有个很坑的地方,就是组数T后面是有空格的,而且还不止一个QAQ
所以,在读完T之后需要while(c==getchar()==' ');
细节get√
附上自己的傻逼程序:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <string> using namespace std; int T; char c; string s; int a[10],ans; int main(){ //freopen("data.txt","r",stdin); scanf("%d",&T); while((c=getchar())==' '); for(int k=1;k<=T;k++){ memset(a,0,sizeof(a)); getline(cin,s); int l=s.size(); for(int i=0;i<l;i++){ if(s[i]==' ') a[1]++; if(s[i]=='g') a[2]++; if(s[i]=='o') a[3]++; if(s[i]=='d') a[4]++; if(s[i]=='m') a[5]++; if(s[i]=='r') a[6]++; if(s[i]=='n') a[7]++; if(s[i]=='i') a[8]++; } a[2]/=2; a[3]/=3; a[7]/=2; sort(a+1,a+9); ans=a[1]; printf("Case #%d: %d\n",k,ans); } return 0; }
T4:暴力+找规律;
之前傻逼理解错题意,暴力打挂了
顺便傻逼地提一下自己在哪里打错了好了
首先是特别傻逼,看不懂什么是64位无符号整数;(unsigned long long 几百年不用,连拼都不懂拼)
然后是不太懂位运算,打暴力的时候居然 dfs(x+1,(~sum)^a[x+1])之类的都写得出来,我也是醉了= = sum还能(~sum)?!...
之后又特别犯逗的在输入的,for i=1~n cout<<a[i];(我是傻逼= =)
妈蛋,再这么逗下去,noip爆零都会QAQ
其实这题我也只会打打暴力,不懂用啥
看了题解才知道,原来是暴力+找规律!
随机n==8的情况,发现最小值都为0,。也就是说在暴力正确的情况,n=8已经有办法得到0了,那么当n>8的时候,必然可以选择将后面的数全都用&连接,答案仍然为0;
所以对于n>7的情况,我们直接可以得到答案为0,n<=7的情况,用暴力解决即可;
MARK:
1.unsigned long long 输出的时候除了 cout,还可以 %I64u
2.最小值minx,自己不要乱赋值!因为unsigned long long 很大!自己乱来的情况下,可能会比最小值还小!所以应该赋为 a[1]
这一点是一定要小心的!
附上自己的傻逼程序:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int T; int n; unsigned long long a[101],minx; void search(int x,unsigned long long sum){ if(x==n){ if(sum<minx) minx=sum; return; } else{ search(x+1,sum^a[x+1]); search(x+1,sum|a[x+1]); search(x+1,sum&a[x+1]); search(x+1,sum^(~a[x+1])); search(x+1,sum|(~a[x+1])); search(x+1,sum&(~a[x+1])); } } int main(){ //freopen("data.txt","r",stdin); scanf("%d",&T); for(int k=1;k<=T;k++){ memset(a,0,sizeof(a)); scanf("%d",&n); if(n>7){ for(int i=1;i<=n;i++) cin>>a[i]; printf("Case #%d: %d\n",k,0); } else{ for(int i=1;i<=n;i++) cin>>a[i]; minx=a[1]; search(1,a[1]); search(1,(~a[1])); printf("Case #%d: %I64u\n",k,minx); } } return 0; }