Codeforces Round #628 (Div. 2)ABC

A - EhAb AnD gCd

Codeforces Round #628 (Div. 2)ABC_第1张图片

输出1和x-1

#include 
using namespace std;
int main(){
    int t;cin>>t;
    while(t--){
        ll x;cin>>x;
        cout<<1<<' '<<x-1<<endl;
    }
}

B - CopyCopyCopyCopyCopy

Codeforces Round #628 (Div. 2)ABC_第2张图片

答案是该数组中不同数的个数
构造方法是第一串中找最小的,第二串中找第二小的

#include 
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int a[100005];
int main(){
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+n+1);
        a[0]=0;
        int sum=n;
        for(int i=1;i<=n;i++){
            if(a[i]==a[i-1])sum--;
        }
        cout<<sum<<endl;
    }
}

C - Ehab and Path-etic MEXs

Codeforces Round #628 (Div. 2)ABC_第3张图片

找一个连接着3条路及以上的节点,把0,1,2给这些路
如果不存在这种节点,答案必是n-1,所以随便安排路

#include 
using namespace std;
int u[100005];
int v[100005];
int num[100005];
int main(){
    int n;cin>>n;
    int du=0;
    for(int i=1;i<=n-1;i++){
        cin>>u[i]>>v[i];
        num[u[i]]++;
        num[v[i]]++;
        if(num[u[i]]==3)du=u[i];
        if(num[v[i]]==3)du=v[i];
    }
    if(du==0||n<4){
        for(int i=1;i<=n-1;i++)cout<<i-1<<endl;
    }
    else{
        int step=0,sum=3;
        for(int i=1;i<=n-1;i++){
            if(u[i]!=du&&v[i]!=du||step>3)cout<<sum++<<endl;
            else cout<<step++<<endl;
        }
    }
}

你可能感兴趣的:(Codeforces)