1. 程式人生 > >Codeforces 1091 Good Bye 2018

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;
}