#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char s1[20],s2[20];
scanf("%s%s",s1,s2);
if((s1[0]=='r'&&s2[0]=='s')||(s1[0]=='p'&&s2[0]=='r')||(s1[0]=='s'&&s2[0]=='p'))
puts("Alice");
else if(s1[0]==s2[0])
puts("Draw");
else puts("Bob");
}
return 0;
}
条件判断即可
不会做,不知道怎么处理出来最小的差值,需要的礼物数目是一个比较大的数字,怎么取m个礼物,同时保证最大值和最小值的差值最小,随便选m 个礼物,然后计算最大值和最小值的差值,如果存在差值相等的情况,就把所有价格加起来,取一个最小的价值,但是怎么实现随便取m个礼物这个操作?
看了下之前的博客,原来是排序,维护一个滑动窗口的差值最小,在差值最小的情况下取最前面的窗口(严格升序排列)
#include<stdio.h>
#define N 1010
int a[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
if(a[i]>a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
int gap=100000;
int sum=0;
for(int i=1;i<=n-m+1;i++)
{
int temp=a[i+m-1]-a[i];
if(gap>temp)
{
gap=temp;
sum=0;
for(int j=i;j<=i+m-1;j++)
sum+=a[j];
}
}
printf("%d %d\n",gap,sum);
}
return 0;
}
还发现一个细节,sum在循环里面需要初始化为0,不然每一次循环累计,结果会和样例对不上,还有如果区间长度是3的话,从第一个元素开始数,只需要数两次,也就是说,假设第一个元素是,a[3],区间长度是3,区间最后元素是a[5],单独拿出来考虑比较简单,但是写代码的时候容易忽略
#include<stdio.h>
#include<stdbool.h>
#define N 10010
int a[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int d=a[2]-a[1];
bool flag=false;
for(int i=2;i<=n-1;i++)
{
if(a[i+1]-a[i]!=d)
{
puts("No");
flag=true;
break;
}
}
if(!flag) puts("Yes");
}
return 0;
}
程序写的卡的动都动不了,不知道啥原因
#include<stdio.h>
#include<string.h>
int cnt1[30],cnt2[30];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int length,times;
scanf("%d%d",&length,×);
char s1[1010],s2[1010];
scanf("%s",s1);
scanf("%s",s2);
int l1=strlen(s1),l2=strlen(s2);
for(int i=0;i<=l1;i++)
cnt1[s1[i]-'a']++;
for(int i=0;i<l2;i++)
cnt2[s2[i]-'a']++;
int m1=0,m2=0;
for(int i=0;i<26;i++) if(cnt1[i]>m1) m1=cnt1[i];
for(int i=0;i<26;i++) if(cnt2[i]>m2) m2=cnt2[i];
if(m1+times>=length) m1=length;
if(m2+times>=length) m2=length;
if(m1>m2) puts("Alice");
else if(m1==m2) puts("Draw");
else puts("Bob");
memset(cnt1,0,sizeof cnt1);
memset(cnt2,0,sizeof cnt2);
}
return 0;
}
这样子可以过,宁愿多设置几个变量,另外我前面少考虑了一种情况,就是如果一个字符串全是相同的字符,然后操作次数为1的话,答案一定是字符串长度减去1
#include<stdio.h>
#include<string.h>
char s1[1010],s2[1010];
int cnt1[30],cnt2[30];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
scanf("%s",s1);
scanf("%s",s2);
int m1=0,m2=0;
for(int i=0;i<n;i++)
{
cnt1[s1[i]-'a']++;
cnt2[s2[i]-'a']++;
if(cnt1[s1[i]-'a']>m1) m1=cnt1[s1[i]-'a'];
if(cnt2[s2[i]-'a']>m2) m2=cnt2[s2[i]-'a'];
}
int alice=0,bob=0;
if(m1==n)
{
if(m==1) alice=n-1;
else if(m1+m>=n) alice=n;
}
else if(m1+m>n) alice=n;
else alice=m1+m;
if(m2==n)
{
if(m==1) bob=n-1;
else if(m2+m>=n) bob=n;
}
else if(m2+m>n) bob=n;
else bob=m2+m;
if(alice>bob) puts("Alice");
else if (alice==bob) puts("Draw");
else puts("Bob");
memset(cnt1,0,sizeof cnt1);
memset(cnt2,0,sizeof cnt2);
}
return 0;
}