4.12个人赛解题报告

[A - Balloons]

题目说的是,给出 n 个数列,表示有 n 袋气球,分给两个人,每个人至少有一袋,且两人气球总数不能一样,输出其中任意一个人所分得的气球袋数,以及这袋气球的下标

判断一下,只需要将最小那袋气球给一个人,剩下的全部给另一个人就ok了,但是注意特殊情况

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;

int a[2000];

int main(){
    int n;
    cin >> n;
    int minn = 1000000000;
    int flag;
    int sum = 0;
    for(int i = 0;i < n;i++){
        cin >> a[i];
        sum = sum + a[i];

        if(minn > a[i]){
            minn = a[i];
            flag = i+1;

        }
    }
    if(n == 1){
        cout << -1 << endl;
    }else{
        if(minn == (sum - minn)){
            cout << -1 << endl;
        }else{
            cout << 1 << endl << flag << endl;
        }
    }
}

[D - Sonya and Hotels]

说一条数轴上本来有n家酒店,现在要建一座新的,要求是新的酒店和原来n家的最小距离是d,且已经建过酒店的点不能再建了,求的是满足的点的个数

emmm不是很会讲基本上就是暴力判断每个点之间的距离吧……

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;

int a[2000];

int main(){
    int n,d;
    cin >> n >> d;

    for(int i = 0;i < n;i++){

        cin >> a[i];
    }
    int num = 2;
    for(int i = 1;i < n;i++){

        if(a[i] - a[i-1] == 2 * d){
            num++;

        }else if(a[i] - a[i-1] >= 2 * d + 1){
            num+=2;
        }
    }

    cout << num <<endl;

}

 

posted @ 2020-04-14 14:48  CCCCrack  阅读(169)  评论(0)    收藏  举报