The 2020 ICPC Asia Shenyang Regional Programming Contest 部分解答

2020ICPC沈阳站部分题题解

D题

找规律

代码

#include<bits/stdc++.h>
using namespace std;
int n=4;
int stp[100007];
char n24[103][200]={"bbbbbbbbbbbbrbbbbbbbbbbb","bbbbbbbbbbbrbbbbbbbbbbbb","bbbbbbbbbbbrbbbbbbbbbbbr","bbbbbbbbbbbrbbbbbbbbbbrr","bbbbbbbbbbbrbbbbbbbbbrrb","bbbbbbbbbbbrbbbbbbbbrrbb","bbbbbbbbbbbrbbbbbbbrrbbb","bbbbbbbbbbbrbbbbbbrrbbbb","bbbbbbbbbbbrbbbbbrrbbbbb","bbbbbbbbbbbrbbbbrrbbbbbb","bbbbbbbbbbbrbbbrrbbbbbbb","bbbbbbbbbbbrbbrrbbbbbbbb","bbbbbbbbbbbrbrrbbbbbbbbb","bbbbbbbbbbbrrrbbbbbbbbbb","bbbbbbbbbbrbbbbbbbbbbbbr","bbbbbbbbbbrbbbbbbbbbbbrb","bbbbbbbbbbrbbbbbbbbbbbrr","bbbbbbbbbbrbbbbbbbbbbrbr","bbbbbbbbbbrbbbbbbbbbbrrb","bbbbbbbbbbrbbbbbbbbbbrrr","bbbbbbbbbbrbbbbbbbbbrbrb","bbbbbbbbbbrbbbbbbbbbrrbb","bbbbbbbbbbrbbbbbbbbbrrbr","bbbbbbbbbbrbbbbbbbbbrrrr","bbbbbbbbbbrbbbbbbbbrbrbb","bbbbbbbbbbrbbbbbbbbrrbbb","bbbbbbbbbbrbbbbbbbbrrbbr","bbbbbbbbbbrbbbbbbbbrrbrr","bbbbbbbbbbrbbbbbbbbrrrrb","bbbbbbbbbbrbbbbbbbrbrbbb","bbbbbbbbbbrbbbbbbbrrbbbb","bbbbbbbbbbrbbbbbbbrrbbbr","bbbbbbbbbbrbbbbbbbrrbbrr","bbbbbbbbbbrbbbbbbbrrbrrb","bbbbbbbbbbrbbbbbbbrrrrbb","bbbbbbbbbbrbbbbbbrbrbbbb","bbbbbbbbbbrbbbbbbrrbbbbb","bbbbbbbbbbrbbbbbbrrbbbbr","bbbbbbbbbbrbbbbbbrrbbbrr","bbbbbbbbbbrbbbbbbrrbbrrb","bbbbbbbbbbrbbbbbbrrbrrbb","bbbbbbbbbbrbbbbbbrrrrbbb","bbbbbbbbbbrbbbbbrbrbbbbb","bbbbbbbbbbrbbbbbrrbbbbbb","bbbbbbbbbbrbbbbbrrbbbbbr","bbbbbbbbbbrbbbbbrrbbbbrr","bbbbbbbbbbrbbbbbrrbbbrrb","bbbbbbbbbbrbbbbbrrbbrrbb","bbbbbbbbbbrbbbbbrrbrrbbb","bbbbbbbbbbrbbbbbrrrrbbbb","bbbbbbbbbbrbbbbrbrbbbbbb","bbbbbbbbbbrbbbbrrbbbbbbb","bbbbbbbbbbrbbbbrrbbbbbbr","bbbbbbbbbbrbbbbrrbbbbbrr","bbbbbbbbbbrbbbbrrbbbbrrb","bbbbbbbbbbrbbbbrrbbbrrbb","bbbbbbbbbbrbbbbrrbbrrbbb","bbbbbbbbbbrbbbbrrbrrbbbb","bbbbbbbbbbrbbbbrrrrbbbbb","bbbbbbbbbbrbbbrbrbbbbbbb","bbbbbbbbbbrbbbrrbbbbbbbb","bbbbbbbbbbrbbbrrbbbbbbbr","bbbbbbbbbbrbbbrrbbbbbbrr","bbbbbbbbbbrbbbrrbbbbbrrb","bbbbbbbbbbrbbbrrbbbbrrbb","bbbbbbbbbbrbbbrrbbbrrbbb","bbbbbbbbbbrbbbrrbbrrbbbb","bbbbbbbbbbrbbbrrbrrbbbbb","bbbbbbbbbbrbbbrrrrbbbbbb","bbbbbbbbbbrbbrbrbbbbbbbb","bbbbbbbbbbrbbrrbbbbbbbbb","bbbbbbbbbbrbbrrbbbbbbbbr","bbbbbbbbbbrbbrrbbbbbbbrr","bbbbbbbbbbrbbrrbbbbbbrrb","bbbbbbbbbbrbbrrbbbbbrrbb","bbbbbbbbbbrbbrrbbbbrrbbb","bbbbbbbbbbrbbrrbbbrrbbbb","bbbbbbbbbbrbbrrbbrrbbbbb","bbbbbbbbbbrbbrrbrrbbbbbb","bbbbbbbbbbrbbrrrrbbbbbbb","bbbbbbbbbbrbrbrbbbbbbbbb","bbbbbbbbbbrbrrbbbbbbbbbb","bbbbbbbbbbrbrrbbbbbbbbbr","bbbbbbbbbbrbrrbbbbbbbbrr","bbbbbbbbbbrbrrbbbbbbbrrb","bbbbbbbbbbrbrrbbbbbbrrbb","bbbbbbbbbbrbrrbbbbbrrbbb","bbbbbbbbbbrbrrbbbbrrbbbb","bbbbbbbbbbrbrrbbbrrbbbbb","bbbbbbbbbbrbrrbbrrbbbbbb","bbbbbbbbbbrbrrbrrbbbbbbb","bbbbbbbbbbrbrrrrbbbbbbbb","bbbbbbbbbbrrbrbbbbbbbbbb","bbbbbbbbbbrrrbbbbbbbbbbb","bbbbbbbbbbrrrbbbbbbbbbbr","bbbbbbbbbbrrrbbbbbbbbbrr","bbbbbbbbbbrrrbbbbbbbbrrb","bbbbbbbbbbrrrbbbbbbbrrbb","bbbbbbbbbbrrrbbbbbbrrbbb","bbbbbbbbbbrrrbbbbbrrbbbb","bbbbbbbbbbrrrbbbbrrbbbbb"};
char n25[103][200]={"bbbbbbbbbbbbrbbbbbbbbbbbb","bbbbbbbbbbbrbbbbbbbbbbbbr","bbbbbbbbbbbrbbbbbbbbbbbrr","bbbbbbbbbbbrbbbbbbbbbbrrb","bbbbbbbbbbbrbbbbbbbbbrrbb","bbbbbbbbbbbrbbbbbbbbrrbbb","bbbbbbbbbbbrbbbbbbbrrbbbb","bbbbbbbbbbbrbbbbbbrrbbbbb","bbbbbbbbbbbrbbbbbrrbbbbbb","bbbbbbbbbbbrbbbbrrbbbbbbb","bbbbbbbbbbbrbbbrrbbbbbbbb","bbbbbbbbbbbrbbrrbbbbbbbbb","bbbbbbbbbbbrbrrbbbbbbbbbb","bbbbbbbbbbbrrrbbbbbbbbbbb","bbbbbbbbbbrbbbbbbbbbbbbrb","bbbbbbbbbbrbbbbbbbbbbbrbr","bbbbbbbbbbrbbbbbbbbbbbrrr","bbbbbbbbbbrbbbbbbbbbbrbrb","bbbbbbbbbbrbbbbbbbbbbrrbr","bbbbbbbbbbrbbbbbbbbbbrrrr","bbbbbbbbbbrbbbbbbbbbrbrbb","bbbbbbbbbbrbbbbbbbbbrrbbr","bbbbbbbbbbrbbbbbbbbbrrbrr","bbbbbbbbbbrbbbbbbbbbrrrrb","bbbbbbbbbbrbbbbbbbbrbrbbb","bbbbbbbbbbrbbbbbbbbrrbbbr","bbbbbbbbbbrbbbbbbbbrrbbrr","bbbbbbbbbbrbbbbbbbbrrbrrb","bbbbbbbbbbrbbbbbbbbrrrrbb","bbbbbbbbbbrbbbbbbbrbrbbbb","bbbbbbbbbbrbbbbbbbrrbbbbr","bbbbbbbbbbrbbbbbbbrrbbbrr","bbbbbbbbbbrbbbbbbbrrbbrrb","bbbbbbbbbbrbbbbbbbrrbrrbb","bbbbbbbbbbrbbbbbbbrrrrbbb","bbbbbbbbbbrbbbbbbrbrbbbbb","bbbbbbbbbbrbbbbbbrrbbbbbr","bbbbbbbbbbrbbbbbbrrbbbbrr","bbbbbbbbbbrbbbbbbrrbbbrrb","bbbbbbbbbbrbbbbbbrrbbrrbb","bbbbbbbbbbrbbbbbbrrbrrbbb","bbbbbbbbbbrbbbbbbrrrrbbbb","bbbbbbbbbbrbbbbbrbrbbbbbb","bbbbbbbbbbrbbbbbrrbbbbbbr","bbbbbbbbbbrbbbbbrrbbbbbrr","bbbbbbbbbbrbbbbbrrbbbbrrb","bbbbbbbbbbrbbbbbrrbbbrrbb","bbbbbbbbbbrbbbbbrrbbrrbbb","bbbbbbbbbbrbbbbbrrbrrbbbb","bbbbbbbbbbrbbbbbrrrrbbbbb","bbbbbbbbbbrbbbbrbrbbbbbbb","bbbbbbbbbbrbbbbrrbbbbbbbr","bbbbbbbbbbrbbbbrrbbbbbbrr","bbbbbbbbbbrbbbbrrbbbbbrrb","bbbbbbbbbbrbbbbrrbbbbrrbb","bbbbbbbbbbrbbbbrrbbbrrbbb","bbbbbbbbbbrbbbbrrbbrrbbbb","bbbbbbbbbbrbbbbrrbrrbbbbb","bbbbbbbbbbrbbbbrrrrbbbbbb","bbbbbbbbbbrbbbrbrbbbbbbbb","bbbbbbbbbbrbbbrrbbbbbbbbr","bbbbbbbbbbrbbbrrbbbbbbbrr","bbbbbbbbbbrbbbrrbbbbbbrrb","bbbbbbbbbbrbbbrrbbbbbrrbb","bbbbbbbbbbrbbbrrbbbbrrbbb","bbbbbbbbbbrbbbrrbbbrrbbbb","bbbbbbbbbbrbbbrrbbrrbbbbb","bbbbbbbbbbrbbbrrbrrbbbbbb","bbbbbbbbbbrbbbrrrrbbbbbbb","bbbbbbbbbbrbbrbrbbbbbbbbb","bbbbbbbbbbrbbrrbbbbbbbbbr","bbbbbbbbbbrbbrrbbbbbbbbrr","bbbbbbbbbbrbbrrbbbbbbbrrb","bbbbbbbbbbrbbrrbbbbbbrrbb","bbbbbbbbbbrbbrrbbbbbrrbbb","bbbbbbbbbbrbbrrbbbbrrbbbb","bbbbbbbbbbrbbrrbbbrrbbbbb","bbbbbbbbbbrbbrrbbrrbbbbbb","bbbbbbbbbbrbbrrbrrbbbbbbb","bbbbbbbbbbrbbrrrrbbbbbbbb","bbbbbbbbbbrbrbrbbbbbbbbbb","bbbbbbbbbbrbrrbbbbbbbbbbr","bbbbbbbbbbrbrrbbbbbbbbbrr","bbbbbbbbbbrbrrbbbbbbbbrrb","bbbbbbbbbbrbrrbbbbbbbrrbb","bbbbbbbbbbrbrrbbbbbbrrbbb","bbbbbbbbbbrbrrbbbbbrrbbbb","bbbbbbbbbbrbrrbbbbrrbbbbb","bbbbbbbbbbrbrrbbbrrbbbbbb","bbbbbbbbbbrbrrbbrrbbbbbbb","bbbbbbbbbbrbrrbrrbbbbbbbb","bbbbbbbbbbrbrrrrbbbbbbbbb","bbbbbbbbbbrrbrbbbbbbbbbbb","bbbbbbbbbbrrrbbbbbbbbbbbr","bbbbbbbbbbrrrbbbbbbbbbbrr","bbbbbbbbbbrrrbbbbbbbbbrrb","bbbbbbbbbbrrrbbbbbbbbrrbb","bbbbbbbbbbrrrbbbbbbbrrbbb","bbbbbbbbbbrrrbbbbbbrrbbbb","bbbbbbbbbbrrrbbbbbrrbbbbb","bbbbbbbbbbrrrbbbbrrbbbbbb"};
long long check(){
	int cnt=0;
	for(int l=1;l<=n;++l){
		for(int r=l;r<=n;++r){
			int tmp=0;
			for(int i=l;i<=r;++i) if(stp[i]=='r') ++tmp;
			if(tmp&1) ++cnt;
		}
	}
	return cnt;
}
long long maxx;
int print;
void dfs(int i,int opt=1){
	if(i>n){
		if(opt){
			if(check()!=maxx) return;
		}
		else{
			maxx=max(maxx,check()); return;
		}
		if(print>=100) exit(0);
		++print;
		for(int i=1;i<=n;++i) putchar(stp[i]);
		puts("");
		return;
	}
	stp[i]='b';
	dfs(i+1,opt);
	stp[i]='r';
	dfs(i+1,opt);
}
int main(){
	//freopen("a.out","w",stdout);
	cin>>n;
	for(int i=n;i>=1;i-=2) maxx+=i;
		cout<<maxx<<endl;
	if(n<=23){
		dfs(1); return 0;
	}
	//while(n>=200);
	if(n&1){
		int cnt=(n-25)/2;
		for(int i=0;i<cnt;++i)printf("b");
		printf("%s",n25[0]);
		for(int i=0;i<cnt;++i)printf("b");
		printf("\n");
		for(int i=1;i<=13;++i){
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<12;++j)printf("%c",n25[i][j]);
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=12;j<25;++j)printf("%c",n25[i][j]);
			printf("\n");
		}
		int ans=14;
		for(int i=cnt-1;i>=0;--i,ans++){
			if(ans==100)return 0;
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<12;++j)printf("%c",n25[13][j]);
			for(int j=0;j<i;++j)printf("b");
			for(int j=12;j<25;++j)printf("%c",n25[13][j]);
			for(int j=i;j<cnt;++j)printf("b");
			printf("\n");
		}
		for(int i=14;i<=100;++i,ans++){
			if(ans==100)return 0;
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<11;++j)printf("%c",n25[i][j]);
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=11;j<25;++j)printf("%c",n25[i][j]);
			printf("\n");
		}
	}else{
		int cnt=(n-24)/2;
		for(int i=0;i<cnt;++i)printf("b");
		printf("%s",n24[0]);
		for(int i=0;i<cnt;++i)printf("b");
		printf("\n");
		for(int i=1;i<=13;++i){
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<12;++j)printf("%c",n24[i][j]);
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=12;j<24;++j)printf("%c",n24[i][j]);
			printf("\n");
		}
		int ans=14;
		for(int i=cnt-1;i>=0;--i,ans++){
			if(ans==100)return 0;
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<12;++j)printf("%c",n24[13][j]);
			for(int j=0;j<i;++j)printf("b");
			for(int j=12;j<24;++j)printf("%c",n24[13][j]);
			for(int j=i;j<cnt;++j)printf("b");
			printf("\n");
		}
		for(int i=14;i<=100;++i,ans++){
			if(ans==100)return 0;
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=0;j<11;++j)printf("%c",n24[i][j]);
			for(int i=0;i<cnt;++i)printf("b");
			for(int j=11;j<24;++j)printf("%c",n24[i][j]);
			printf("\n");
		}
	}
}

F题

单调栈

代码

#include<iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int MAXN=1000000+7;
int n,ans,a[MAXN];
int stack[MAXN];int tot;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	int x=a[1];
	stack[++tot]=a[1];
	for(int i=2;i<=n;++i){
		int mx=a[i];
		while(tot&&stack[tot]>a[i]){
			mx=max(stack[tot],mx);
			tot--;
		}
		stack[++tot]=mx;
	}
	cout<<tot;
	return 0;
}

G题

签到题,略。

H题

动态规划

代码

#include<bits/stdc++.h>
#define Inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N = 5e2+5;
const int M = 1e6+5;
typedef long long LL;
LL n,m,r;
struct node{
	LL p,q;
	bool operator<(const node &tt)const
	{
		return p<tt.p;
	}
}po[N];
LL f[M];
LL d[N],k[N],c[N];
LL id[M],cnt;
int pos[N];

int main(){
	scanf("%lld%lld%lld",&n,&m,&r);
	for(int i=1;i<=n;++i){
		scanf("%lld%lld%lld",d+i,k+i,c+i);
	}
	n++;
	for(int i=1;i<=m;++i){
		scanf("%lld%lld",&po[i].p,&po[i].q);
	}
	sort(po+1,po+m+1);
	for(int i=1;i<=m;++i){
		for(int j=1;j<=po[i].q;++j){
			cnt++;
			id[cnt]=po[i].p;
		}
	}
	id[0]=id[1];
	memset(f,0x3f,sizeof(f));
	f[0]=0;
	for(int i=1;i<=n;++i)pos[i]=1;
	for(int i=1;i<=cnt;++i){
		f[i]=f[i-1]+r;
		for(int j=1;j<=n;++j){
			int l=i-k[j];
			while(pos[j]<i&&id[i]-id[pos[j]]>=d[j])pos[j]++; 
			l=max(l,pos[j]-1);
			f[i]=min(f[l]+c[j],f[i]);
		}
	}
	printf("%lld\n",f[cnt]);
	return 0;
} 

I题

数论

代码

#include<iostream>
using namespace std;
typedef long long LL;
 
LL h,m,a;
LL gcd(LL a,LL b){
	LL t;
	while(b){
		t=a%b;
		a=b;
		b=t;
	}
	return a;
}
int main(){
	cin>>h>>m>>a;
	LL d=gcd(h-1,h*m);
	//t*((h-1)/d)%(h*m/d)<=A/d
	//t*((h-1)/d)%(h*m/d)>=(h*m-A+d-1)/d
	if(h*m==a*2)printf("%lld\n",h*m);
	else{
		printf("%lld\n",d*(a/d+1+h*m/d-(h*m-a+d-1)/d));
	}
	return 0;
} 

K题

数学

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000000+7;
typedef long long LL;
struct Data{
	int flag,x;
}a[MAXN];
int n,sum_add[MAXN],sum_sub[MAXN];
bool cmp(Data a,Data b){
	return a.x==b.x?a.flag<b.flag:a.x>b.x;
}
int add,sub;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		char ch; scanf(" %c",&ch);
		a[i].flag=ch=='+'?1:-1;
		if(ch=='+') ++add;
		else ++sub;
		scanf("%d",&a[i].x);
	}
	sort(a+1,a+1+n,cmp);
//	for(int i=1;i<=n;++i){
//		sum_add[i]=sum_add[i-1]+a[i].flag==1?1:0;
//	}
//	for(int i=n;i>=1;--i){
//		sum_sub[i]=sum_sub[i+1]+a[i].flag==-1?1:0;
//	}
	int cntadd=0,cntsub=0;
	long double ans=0;
	for(int i=1;i<=n;++i){
		while(i<=n&&a[i].flag==1){
			cntadd++;
			++i;
		}
		cntsub++;
		if(a[i].flag==-1)ans+=cntadd;
	}
	ans/=add;
	ans/=sub;
	printf("%.12Lf\n",ans);
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值