您的位置:首页 > 其它

喵哈哈村的魔法考试 Round #5 (Div.2) ABCC2

2017-03-07 21:03 471 查看
官方题解: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

样例输入1 复制
3
010101001
3
11101010


样例输出1
Win
Lose
解法:模拟


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define ll long long
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
string s;
int n,ans;
int v[50005],a[50005];
int best[50005];
int main()
{
int k;
while(cin>>k)
{
cin>>s;
int sum0=1;
int sum1=0;
int Max=-1;
char ans=s[0];
for(int i=1; i<s.length(); i++)
{
if(s[i-1]==s[i])
{
sum0++;
Max=max(Max,sum0);
}
else
{
ans=s[i];
sum0=1;
}
}
// cout<<max(Max,sum0)<<endl;
if(k>max(Max,sum0))
{
cout<<"Win"<<endl;
}
else
{
cout<<"Lose"<<endl;
}
}

return 0;
}


喵哈哈村的狼人杀大战(2)

描述

喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!

星星同学今天她抽到的是狼的身份,按照她的一贯玩法,她喜欢无情的屠杀掉所有的神。

她现在已经很清楚了场上的预言家,女巫,猎人是谁。但是她唯一不知道的就是白痴这张神牌在谁的身上。于是她诈一诈她的下家——天行廖。

星星同学的逻辑是这样的:她可以考一道题给天行廖,如果天行廖能够答上来的话,那么天行廖肯定不是白痴,因为白痴是答不上题的。

这道题是这样的:

如果一个数只包含4和7的话,那么这个串就是幸运数,比如4777,774就是幸运数,而467就不是幸运数。

如果一个幸运数中包含的4和7的数量相同的话,那么这个数就是超级幸运数,比如4747就是超级幸运串,447就不是。

现在给你一个n,你需要找到一个最小的超级幸运数,并且这个超级幸运数大于等于n。

输入
本题包含若干组测试数据。
第一行一个整数n。

满足 1<=n<=10^9

输出
输出最小的超级幸运数,。

样例输入1 复制
47
4500


样例输出1
47
4747
解法:暴力搜索,当然还是害怕超int,所以一次性打表出来查询


#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x7fffffff
#define INFL 0x7fffffffffffffff
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
LL q[10000000];
int cot;
void dfs(LL x,LL y,LL sum)
{
if(x==y&&x)
{
q[++cot] = sum;
}
if(sum>=1e18)
{
return ;
}
else
{
dfs(x+1,y,sum*10+4);
dfs(x,y+1,sum*10+7);
}
}
int main()
{
dfs(0,0,0);
sort(q+1,q+cot+1);
int t;
LL n;
// cin>>t;
while(cin>>n)
{

int x = lower_bound(q+1,q+cot+1,n) - q ;
if(n > q[cot])
cout<<"44444444447777777777"<<endl;
else
cout<<q[x]<<endl;
}
return 0;
}


喵哈哈村的狼人杀大战(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 复制
1 2 3 4 5 6


样例输出1
310.00
解法:数据量很小,遍历一次就好了


#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x7fffffff
#define INFL 0x7fffffffffffffff
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
const int M = 3000500;
int p[400010], pNum;
bool f[M];
void Prime()
{
int i, j;
for(i = 2; i < M; i++) {
if(!f[i]) { p[pNum++] = i; }
for(j = 0; j < pNum && p[j] * i < M; j++ ) {
f[p[j]*i] = 1;
if(!(i%p[j]))
break;
}
}
}
int main()
{
//  Prime();
//  cout<<p[0]<<endl;

double a,b,c,d,l,r;
while(cin>>a>>b>>c>>d>>l>>r)
{
double Max=-1.0;
for(int i=l;i<=r;i++)
{
Max=max(abs(i*i*i*a+b*i*i+c*i+d),Max);
}
printf("%.2f\n",Max);
}

return 0;
}


喵哈哈村的狼人杀大战(4)

描述

喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!

徐元帅同学今天他抽到的是女巫的身份,按照他的一贯玩法,他喜欢一开始就把自己毒死。

于是他早早的就出去了。

他很无聊,于是出了一道题给自己玩。

他从怀里面掏出了一个数字n。

他想知道有多少组三元组(a,b,c),满足a<=b<=c,且a,b,c都是素数,而且a+b+c=n。

输入
本题包含若干组测试数据。
每组测试数据只含有一个整数n。
1<=n<=10000

输出
输出三元组的数量。

样例输入1 复制
3
9


样例输出1
0
2
解法:先选出素数,然后化成a+b=n-c进行查询,不过要满足a<=b<=c,还需要保存比较一下


#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x7fffffff
#define INFL 0x7fffffffffffffff
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
const int M = 200000;
int p[M], pNum;
bool f[M];
int x[M];
int y[M];
void Prime()
{
int i, j;
for(i = 2; i < M; i++) {
if(!f[i]) { p[pNum++] = i; }
for(j = 0; j < pNum && p[j] * i < M; j++ ) {
f[p[j]*i] = 1;
if(!(i%p[j]))
break;
}
}
}
int main()
{
Prime();
int n;
while(cin>>n)
{
//n=o;
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
int num=0;
for(int i=0;i<=2000;i++)
{
if(n>=p[i])
{
x[n-p[i]]++;
y[n-p[i]]=p[i];
}
else
{
break;
}
}
for(int i=0;i<=2000;i++)
{
for(int j=i;j<=2000;j++)
{
int ans=p[i]+p[j];
if(p[j]<=y[ans])
{
num+=x[ans];
}
else if(ans>n)
{
break;
}
}
}
cout<<num<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: