喵哈哈村的魔法考试 Round #5 (Div.2) ABCC2
官方题解:http://www.cnblogs.com/qscqesze/p/6516139.html
喵哈哈村的狼人杀大战(1)
喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!
张小田今天她抽到的是民的身份,按照她的一贯玩法,她不会考虑发言者的发言,她只考虑站队情况。
现在是警上竞选的投票环节,现在只剩下还能当警长的两个真假预言家。
张小田认为,如果在某一天,有连续坐在一起的k个人投票给同一个人的话,那么她就认为这一局可能比较危险。
投给第一个预言家的,就记为0,投给第二个预言家的记为1,于是就可以得到一个01串。
现在张小田就交给你来判断,如果按照张小田 的逻辑来看这一局是否危险!
----
题目翻译:给你一个01串,你需要判断这个01串里面是否存在连续的相同字符的长度超过k个。
假设当前k为3,那么010101001就不危险,11101010就危险。
注意,该01串是串,而不是环。
该题包含多组测试数据。
第一行一个整数k。
第二行一个01串,s。
满足:1<=len(s)<=100,1<=k<=100
如果危险的话,输出Lose,否则输出Win
3 010101001 3 11101010
Win Lose
解法:模拟
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<cmath> 7 #include<map> 8 #include<vector> 9 #define ll long long 10 using namespace std; 11 inline int read() 12 { 13 int x=0,f=1; 14 char ch=getchar(); 15 while(ch<'0'||ch>'9') 16 { 17 if(ch=='-')f=-1; 18 ch=getchar(); 19 } 20 while(ch>='0'&&ch<='9') 21 { 22 x=x*10+ch-'0'; 23 ch=getchar(); 24 } 25 return x*f; 26 } 27 string s; 28 int n,ans; 29 int v[50005],a[50005]; 30 int best[50005]; 31 int main() 32 { 33 int k; 34 while(cin>>k) 35 { 36 cin>>s; 37 int sum0=1; 38 int sum1=0; 39 int Max=-1; 40 char ans=s[0]; 41 for(int i=1; i<s.length(); i++) 42 { 43 if(s[i-1]==s[i]) 44 { 45 sum0++; 46 Max=max(Max,sum0); 47 } 48 else 49 { 50 ans=s[i]; 51 sum0=1; 52 } 53 } 54 // cout<<max(Max,sum0)<<endl; 55 if(k>max(Max,sum0)) 56 { 57 cout<<"Win"<<endl; 58 } 59 else 60 { 61 cout<<"Lose"<<endl; 62 } 63 } 64 65 return 0; 66 }
喵哈哈村的狼人杀大战(2)
喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!
星星同学今天她抽到的是狼的身份,按照她的一贯玩法,她喜欢无情的屠杀掉所有的神。
她现在已经很清楚了场上的预言家,女巫,猎人是谁。但是她唯一不知道的就是白痴这张神牌在谁的身上。于是她诈一诈她的下家——天行廖。
星星同学的逻辑是这样的:她可以考一道题给天行廖,如果天行廖能够答上来的话,那么天行廖肯定不是白痴,因为白痴是答不上题的。
这道题是这样的:
如果一个数只包含4和7的话,那么这个串就是幸运数,比如4777,774就是幸运数,而467就不是幸运数。
如果一个幸运数中包含的4和7的数量相同的话,那么这个数就是超级幸运数,比如4747就是超级幸运串,447就不是。
现在给你一个n,你需要找到一个最小的超级幸运数,并且这个超级幸运数大于等于n。
本题包含若干组测试数据。
第一行一个整数n。
满足 1<=n<=10^9
输出最小的超级幸运数,。
47 4500
47 4747
解法:暴力搜索,当然还是害怕超int,所以一次性打表出来查询
1 #include<stdio.h> 2 //#include<bits/stdc++.h> 3 #include<string.h> 4 #include<iostream> 5 #include<math.h> 6 #include<sstream> 7 #include<set> 8 #include<queue> 9 #include<map> 10 #include<vector> 11 #include<algorithm> 12 #include<limits.h> 13 #define inf 0x7fffffff 14 #define INFL 0x7fffffffffffffff 15 #define lson l,m,rt<<1 16 #define rson m+1,r,rt<<1|1 17 #define LL long long 18 #define ULL unsigned long long 19 using namespace std; 20 LL q[10000000]; 21 int cot; 22 void dfs(LL x,LL y,LL sum) 23 { 24 if(x==y&&x) 25 { 26 q[++cot] = sum; 27 } 28 if(sum>=1e18) 29 { 30 return ; 31 } 32 else 33 { 34 dfs(x+1,y,sum*10+4); 35 dfs(x,y+1,sum*10+7); 36 } 37 } 38 int main() 39 { 40 dfs(0,0,0); 41 sort(q+1,q+cot+1); 42 int t; 43 LL n; 44 // cin>>t; 45 while(cin>>n) 46 { 47 48 int x = lower_bound(q+1,q+cot+1,n) - q ; 49 if(n > q[cot]) 50 cout<<"44444444447777777777"<<endl; 51 else 52 cout<<q[x]<<endl; 53 } 54 return 0; 55 }
喵哈哈村的狼人杀大战(3)
喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!
昊昊同学今天他抽到的是平民的身份,按照他的一贯玩法,他喜欢挂机,就什么事儿都不干。
于是他早早的就被推出去了。
现在他很无聊,于是他想了一道题来给自己打发时间。
定义f(x)=abs(ax^3+bx^2+cx+d),abs为绝对值符号。
给你a,b,c,d,l,r。
他想知道[l,r]这个范围内,f(x)的最大值。
题目包含多组测试数据。
第一行六个整数,a,b,c,d,l,r。
满足-10<=a,b,c,d<=10,-100<=l<=r<=100
对于每组测试诗句,输出最大值,需要保留两位小数。
1 2 3 4 5 6
310.00
解法:数据量很小,遍历一次就好了
1 #include<stdio.h> 2 //#include<bits/stdc++.h> 3 #include<string.h> 4 #include<iostream> 5 #include<math.h> 6 #include<sstream> 7 #include<set> 8 #include<queue> 9 #include<map> 10 #include<vector> 11 #include<algorithm> 12 #include<limits.h> 13 #define inf 0x7fffffff 14 #define INFL 0x7fffffffffffffff 15 #define lson l,m,rt<<1 16 #define rson m+1,r,rt<<1|1 17 #define LL long long 18 #define ULL unsigned long long 19 using namespace std; 20 const int M = 3000500; 21 int p[400010], pNum; 22 bool f[M]; 23 void Prime() 24 { 25 int i, j; 26 for(i = 2; i < M; i++) { 27 if(!f[i]) { p[pNum++] = i; } 28 for(j = 0; j < pNum && p[j] * i < M; j++ ) { 29 f[p[j]*i] = 1; 30 if(!(i%p[j])) 31 break; 32 } 33 } 34 } 35 int main() 36 { 37 // Prime(); 38 // cout<<p[0]<<endl; 39 40 double a,b,c,d,l,r; 41 while(cin>>a>>b>>c>>d>>l>>r) 42 { 43 double Max=-1.0; 44 for(int i=l;i<=r;i++) 45 { 46 Max=max(abs(i*i*i*a+b*i*i+c*i+d),Max); 47 } 48 printf("%.2f\n",Max); 49 } 50 51 return 0; 52 }
喵哈哈村的狼人杀大战(4)
喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!
徐元帅同学今天他抽到的是女巫的身份,按照他的一贯玩法,他喜欢一开始就把自己毒死。
于是他早早的就出去了。
他很无聊,于是出了一道题给自己玩。
他从怀里面掏出了一个数字n。
他想知道有多少组三元组(a,b,c),满足a<=b<=c,且a,b,c都是素数,而且a+b+c=n。
本题包含若干组测试数据。
每组测试数据只含有一个整数n。
1<=n<=10000
输出三元组的数量。
3 9
0 2
解法:先选出素数,然后化成a+b=n-c进行查询,不过要满足a<=b<=c,还需要保存比较一下
1 #include<stdio.h> 2 //#include<bits/stdc++.h> 3 #include<string.h> 4 #include<iostream> 5 #include<math.h> 6 #include<sstream> 7 #include<set> 8 #include<queue> 9 #include<map> 10 #include<vector> 11 #include<algorithm> 12 #include<limits.h> 13 #define inf 0x7fffffff 14 #define INFL 0x7fffffffffffffff 15 #define lson l,m,rt<<1 16 #define rson m+1,r,rt<<1|1 17 #define LL long long 18 #define ULL unsigned long long 19 using namespace std; 20 const int M = 200000; 21 int p[M], pNum; 22 bool f[M]; 23 int x[M]; 24 int y[M]; 25 void Prime() 26 { 27 int i, j; 28 for(i = 2; i < M; i++) { 29 if(!f[i]) { p[pNum++] = i; } 30 for(j = 0; j < pNum && p[j] * i < M; j++ ) { 31 f[p[j]*i] = 1; 32 if(!(i%p[j])) 33 break; 34 } 35 } 36 } 37 int main() 38 { 39 Prime(); 40 int n; 41 while(cin>>n) 42 { 43 //n=o; 44 memset(x,0,sizeof(x)); 45 memset(y,0,sizeof(y)); 46 int num=0; 47 for(int i=0;i<=2000;i++) 48 { 49 if(n>=p[i]) 50 { 51 x[n-p[i]]++; 52 y[n-p[i]]=p[i]; 53 } 54 else 55 { 56 break; 57 } 58 } 59 for(int i=0;i<=2000;i++) 60 { 61 for(int j=i;j<=2000;j++) 62 { 63 int ans=p[i]+p[j]; 64 if(p[j]<=y[ans]) 65 { 66 num+=x[ans]; 67 } 68 else if(ans>n) 69 { 70 break; 71 } 72 } 73 } 74 cout<<num<<endl; 75 } 76 return 0; 77 }