第八届ACM趣味程序设计竞赛第一场(热身赛)题解

B - 中庸之道(一)

       本题的题意十分清晰,很容易就可以想明白这就是一个简单的分类讨论。如题中所言,分两种情况,即3数不相等的情况和有2个数相等的情况。本题的坑点在于对于每组输入都需要输出一行答案,即\n,很多人因此PE。标准代码如下

#include
#include
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
#include
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 
#include 
#include 
int main ()
{
 printf("Yes");
 return 0;
}
E-铁路
     此处需要分类讨论,我们容易想到两种为0的情况,一种是当k=0时,答案一定为0,另一种是当k=1且n>2时,结果一定为0。然后再分类讨论其他状况,如果k>=n-1,即可修建的铁路数已经超过了城市数量,则答案是在没两个城市之间就修建一条铁路,即(n-1)*n/2,另一种情况是当k#include 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另外,本场比赛主要是为了让大家熟悉oj的环境,所以所放的题都是老题,有很多人都做过,因此大家不必在意本场比赛的排名,从下周第一场正式赛开始,我们保证是原创题,届时一定不会像本场比赛一样,欢迎大家继续参加!


你可能感兴趣的:(比赛题解)