Codeforces 补题 round 4 contest - 978

A - Remove Duplicates

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define clr(a) memset(a,0,sizeof(a))
const int N = 1010;
int a[N];
int vis[N];
int b[N];
int num;
int n;
int main(){
	while(scanf("%d",&n)!=EOF){
		clr(a);
		clr(b);clr(vis);
		num = 0;
		for(int i=0;i<n;i++){
			scanf("%d",&a[i]);
		}
		for(int i=n-1;i>=0;i--){
			if(!vis[a[i]]){
				b[num++] = a[i];
				vis[a[i]] = 1;
			}
		}
		printf("%d\n",num );
		for(int i=num-1;i>0;i--){
			printf("%d ", b[i]);
		}
		printf("%d\n",b[0]);
	}
	return 0;
}

B - File Name

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define clr(a) memset(a,0,sizeof(a))

const int N = 1010;
int n;
char s[N];
int main(){
    int num = 0;
    scanf("%d %s",&n,s);
    for(int i=0;i<n;i++){
        if(s[i]=='x'&&s[i+1]=='x'&&s[i+2]=='x'){
            num++;
        }
    }
    cout<<num<<endl;
	return 0;
}

C. Letters

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define clr(a) memset(a,0,sizeof(a))

const int N = 1010;
const int maxn = 2e5+10;

ll n,m;

ll a[maxn];
ll b[maxn];
int main(){
    while(scanf("%lld%lld",&n,&m)!=EOF){
        for(int i=1;i<=n;i++){
            scanf("%lld",&a[i]);
            a[i] += a[i-1];
        }
        for(int i=1;i<=m;i++){
            scanf("%lld",&b[i]);
            ll pos = lower_bound(a+1,a+n+1,b[i])-a-1;
            printf("%lld %lld\n",pos+1,b[i]-a[pos]);
        }

    }
	return 0;
}

D. Almost Arithmetic Progression

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define clr(a) memset(a,0,sizeof(a))

const int maxn = 1e5+10;

int n,a[maxn];
set<int>se;

int main(){
    while(scanf("%d",&n)!=EOF){
        int d,pre,num;
        se.clear();
        for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
        if(n==1||n==2){
            puts("0");continue;
        }
        int i;
        // 0 0
        d = a[2] - a[1];
        pre = a[2];
        num = 0;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        // 1 1
        d = a[2] - a[1];
        pre = a[2] + 1 ;
        num = 2;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        // -1 -1
        d = a[2] - a[1];
        pre = a[2] - 1 ;
        num = 2;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        //1 0
        d = a[2] - a[1] - 1;
        pre = a[2] ;
        num = 1;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
		// 0 -1
        d = a[2] - a[1] - 1;
        pre = a[2] - 1 ;
        num = 1;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        //1 -1
        d = a[2] - a[1] - 2;
        pre = a[2] - 1 ;
        num = 2;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else{
                break;
            }
        }
        if(i==n+1)
			se.insert(num);
        //0 1
        d = a[2] - a[1] + 1;
        pre = a[2] + 1;
        num = 1;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        // -1 0
        d = a[2] - a[1] + 1;
        pre = a[2] ;
        num = 1;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        //-1 1
        d = a[2] - a[1] + 2;
        pre = a[2] + 1;
        num = 2;
        for(i=3;i<=n;i++){
            if(a[i]-pre==d)
                pre = a[i];
            else if(a[i]-pre ==  d+1){
                pre = a[i]-1;num++;
            }
            else if(a[i]-pre == d-1){
                pre = a[i]+1;num++;
            }
            else
				break;
        }
        if(i==n+1)
			se.insert(num);
        if(se.size()==0) puts("-1");
        else printf("%d\n",*(se.begin()));
    }
    return 0;
}

E. Bus Video System

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define clr(a) memset(a,0,sizeof(a))

const int N = 1010;
const int maxn = 1e5+10;
const int INF = 0x3f3f3f3f;

ll n,m,x;

int main(){
	while(scanf("%lld%lld",&n,&m)!=EOF){
		ll sum = 0,minn = INF,maxx = -INF;
		for(int i=0;i<n;i++){
			scanf("%lld",&x);
			sum += x;
			if(sum > maxx) maxx = sum;
			if(sum < minn) minn = sum;
		}
		if(-minn > m || maxx > m)
           puts("0");
		else if(maxx <= 0)
            printf("%lld\n",m+minn+1);
		else if(minn >= 0)
            printf("%lld\n",m-maxx+1);
		else{
			ll a=-minn;
			ll b=m-maxx;
			if(b-a+1 > 0 && b-a+1 <= m)
                printf("%lld\n",b-a+1);
			else puts("0");
		}
	}
	return 0;
}

F. Mentors

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int maxn = 2e5 + 5;

int n,k;

struct node{
    int v,pos,ans;
}a[maxn];
bool cmp1(node x,node y){
    return x.v<y.v;
}
bool cmp2(node x,node y){
    return x.pos<y.pos;
}
vector<int>ve[maxn];
int find_pos(int x){
    int l = 1,r = n;
    while (r >= l){
        int mid = (l+r)/2;
        if (a[mid].v >= x) r=mid-1;
        else l = mid+1;
    }
    return l;
}
int main() {
    while (scanf ("%d%d",&n,&k)!=EOF){
        for (int i=1;i<=n;i++){
            scanf ("%d",&a[i].v);
            a[i].pos = i;
            a[i].ans = 0;
            ve[i].clear();
        }
        for (int i=0;i<k;i++){
            int x,y;
            scanf ("%d%d",&x,&y);
            if (a[x].v>a[y].v)
                ve[x].push_back(y);
            else if (a[x].v<a[y].v)
                ve[y].push_back(x);
        }
        sort(a+1,a+n+1,cmp1);
        for (int i=1;i<=n;i++){
            a[i].ans = find_pos(a[i].v) - ve[a[i].pos].size() - 1;
        }
        sort(a+1,a+n+1,cmp2);
        for (int i=1;i<n;i++){
            printf("%d ",a[i].ans);
        }
        printf ("%d\n",a[n].ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/l18339702017/article/details/81698186