Codeforces 1091 Good Bye 2018

占个坑先,希望不要掉的太惨了吧,不要掉到上一次之前的rating

A - New Year and the Christmas Ornament

好像没什么可说的。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#include<cctype>
using namespace std;

typedef long long ll;
const int Maxn=210000;

int main() {
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if(a+1<=b&&a+2<=c) {
        printf("%d",3*a+3);
    }
    else if(b<=a+1&&b+1<=c) {
        printf("%d",3*b);
    }
    else if(c<=a+2&&c<=b+1) {
        printf("%d",3*c-3);
    }
    return 0;
}

B - New Year and the Treasure Geolocation

有一个显然的结论,x的最小值加的一定是最大的x变化量,y同理。因为数据保证有解那么直接找即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#include<cctype>
using namespace std;

typedef long long ll;
const int Maxn=210000;

int n,x[Maxn],y[Maxn],a[Maxn],b[Maxn];

int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&x[i],&y[i]);
    sort(x+1,x+n+1),sort(y+1,y+n+1);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i],&b[i]);
    sort(a+1,a+n+1),sort(b+1,b+n+1);
    printf("%d %d\n",x[1]+a[n],y[1]+b[n]);
    return 0;
}

C - New Year and the Sphere Transmission

考虑两个数产生的答案不同当且仅当他们与n的gcd不同,那么就枚举n的约数,然后计算即可,具体参考代码。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#include<cctype>
using namespace std;

typedef long long ll;
const int Maxn=210000;

int n,num;
ll x[Maxn];

void work(int n,int k) {
    ll d=n/k;
    x[++num]=n*(d-1)/2+d;
}

int main() {
    scanf("%d",&n);
    for(int i=1;i*i<=n;i++)
        if(n%i==0) {
            work(n,i);
            work(n,n/i);
        }
    sort(x+1,x+num+1);
    for(int i=1;i<=num;i++) if(x[i]!=x[i-1]) printf("%I64d ",x[i]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/shanxieng/p/10201229.html