B - 中庸之道(一)
本题的题意十分清晰,很容易就可以想明白这就是一个简单的分类讨论。如题中所言,分两种情况,即3数不相等的情况和有2个数相等的情况。本题的坑点在于对于每组输入都需要输出一行答案,即\n,很多人因此PE。标准代码如下
#include<stdio.h>
#include<algorithm>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a[4]={0};
for(int i=0;i<3;i++) scanf("%d",&a[i]);
std::sort(a,a+3);
int flag = 0;
if(a[0]==a[1] || a[1]==a[2]) flag = a[2];
else flag = a[1];
printf("%d\n",flag);
}
return 0;
}
C-校门外的树
本题是一个模拟题,可以使用一个数组全部赋值为1表示现有的树,然后对于每一次操作,枚举区间内的所有树,将其赋值为0,最后统计数组中1的数量即可。
#include<stdio.h>
#include<string.h>
int main()
{
int l,m;
scanf("%d %d",&l,&m);
char a[10002]={'0'};
memset(a,'0',10002);
memset(a,'1',l+1);
while(m--)
{
int x,y;
scanf("%d %d",&x,&y);
memset(a+x,'0',y-x+1);
}
int count=0;
for(int i=0;i<=l;i++)
if(a[i]=='1')
count++;
printf("%d\n",count);
return 0;
}
D-The King and King boss
本题可以分为两种情况讨论,将n个整数做如下处理,令b[i] = a[1] + a[2] + a[3] + .. + a[i],这样的b[i] 有 n 个根据抽屉原理如果n个都不相同,则至少有一个是 n的倍数,否则存在b[j] % n == b[i] % n (i < j)则 b[j] - b[i] = a[i + 1] + a[i + 2] + … + a[j]是n的倍数。因此,本题无论输入什么数,结果都为Yes.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main () { printf("Yes"); return 0; }E-铁路
此处需要分类讨论,我们容易想到两种为0的情况,一种是当k=0时,答案一定为0,另一种是当k=1且n>2时,结果一定为0。然后再分类讨论其他状况,如果k>=n-1,即可修建的铁路数已经超过了城市数量,则答案是在没两个城市之间就修建一条铁路,即(n-1)*n/2,另一种情况是当k<n-1时,无论怎样修建,都是可行的,因此结果是k*n/2,因此标程如下
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,k;
scanf("%d%d",&n,&k);
if(k == 0 || (k == 1 && n>2)) printf("0\n");
else if(k<n-1)
printf("%d\n",k*n/2);
else
printf("%d\n",n*(n-1)/2);
}
return 0;
}
另外,本场比赛主要是为了让大家熟悉oj的环境,所以所放的题都是老题,有很多人都做过,因此大家不必在意本场比赛的排名,从下周第一场正式赛开始,我们保证是原创题,届时一定不会像本场比赛一样,欢迎大家继续参加!