Codeforces Round #615 (Div. 3)(A~E)

Portal

A Collecting Coins

Solution: You can make up the largest currency value together first, if you can make up, then see if the rest is 3 33 can be divisible.
code: code:code:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
int a,b,c,n;
int main()
{
    
    
    rush(){
    
    
		sc2(a,b);sc2(c,n);
		int maxx=max(a,max(b,c));
		int cha=3*maxx-a-b-c;
		if(n<cha)puts("NO");
		else if((n-cha)%3!=0)puts("NO");
		else puts("YES");
	}
    return 0;
}

B Collecting Packages

Problem solution: first press xxSort by x , then pressyyy is sorted, and thenn 2 n^2n2 Determine whether all can be collected, and thenRRfirst in lexicographical orderR reUUU is fine.
code: code:code:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
const int N=1e3+5;
int n;
pii dots[N];
void put(char c)
{
    
    
	printf("%c",c);
}
int main()
{
    
    
    rush(){
    
    
		sc(n);
		rep(i,0,n-1){
    
    
			sc2(dots[i].fi,dots[i].se);
		}
		sort(dots,dots+n);
		bool flag=true;
		rep(i,0,n-2){
    
    
			rep(j,i+1,n-1){
    
    
				if(dots[i].se>dots[j].se){
    
    
					flag=false;
					break;
				}
			}
			if(!flag)break;
		}
		if(!flag)puts("NO");
		else{
    
    
			puts("YES");
			int r=0,u=0;
			rep(i,0,n-1){
    
    
				int nr=dots[i].fi,nu=dots[i].se;
				rep(j,1,nr-r)put('R');
				rep(j,1,nu-u)put('U');
				r=nr,u=nu;
			}
			puts("");
		}
	}
    return 0;
}

C Product of Three Numbers

Solution: You can use a factor enumeration to set a factor enumeration.
code: code:code:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
#define pf3(a,b,c) printf("%d %d %d\n",a,b,c)
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
int n,a,b,c,ab;
int main()
{
    
    
    rush(){
    
    
		sc(n);
		bool flag=false;
		rep(i,2,ceil(sqrt(n))){
    
    
			if(n%i!=0)continue;
			a=i,ab=n/a;
			rep(j,2,ceil(sqrt(ab))){
    
    
				if(ab%j!=0)continue;
				b=j,c=ab/j;
				if(a!=b&&a!=c&&b!=c&&a!=1&&b!=1&&c!=1){
    
    
					flag=true;
					break;
				}
			}
			if(flag)break;
		}
		if(flag){
    
    
			puts("YES");
			pf3(a,b,c);
		}
		else{
    
    
			puts("NO");
		}
	}
    return 0;
}

D MEX maximizing

Solution: If you find out carefully, you can see that the actual and the given number are modulo xxIf x is related, then several marks can be used. One is to record the answer at this time, and the other is to record how many rows there are.
code: code:code:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
const int N=4e5+5;
int q,x,y,now,tot,b[N],ans;
int main()
{
    
    
    sc2(q,x);
	int cnt=1;
	rep(i,1,q){
    
    
		sc(y);
		int m=y%x;
		b[m]++;
		while(b[tot]>=cnt){
    
    
			ans++;
			tot++;
			if(tot==x){
    
    
				tot=0;
				cnt++;
			}
		}
		pf(ans);
	}
    return 0;
}

E Obtain a Permutation

Problem solution: The first time I thought about it was to use n ∗ m × nn*m×nnm×n messing around,TTT to8 88. After digging, you can directlyshifteach numbers h i f t is calculated as contribution, and then each column isshifteds h i f t from0 ∼ n − 1 0 \sim n-10n1 can useO (1) O (1)O ( 1 ) is counted, and it needs to be judged specifically which row the number is in. There is an out-of-bounds problem.
code: code:code:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
const int N=2e5+5;
int n,m,c[N],sum,col,x;
vector<int>v[N];
int main()
{
    
    
    sc2(n,m);
	rep(i,1,n)rep(j,1,m)sc(x),v[j].pb(x);
	rep(j,1,m){
    
    
		rep(i,0,n-1)c[i]=0;
		rep(i,1,n){
    
    
			int u=v[j][i-1];
			if(u%m==j%m){
    
    
				int r=(u-j)/m+1;
				if(r<0||r>n)continue;
				int s=(i-r+n)%n;
				c[s]++;
			}
		}
		col=inf;
		rep(i,0,n-1)col=min(col,n-c[i]+i);
		sum+=col;
	}
	pf(sum);
    return 0;
}

F Three Paths on a Tree

To be added

Guess you like

Origin blog.csdn.net/zhouzi2018/article/details/104086925