满江红,求助
查看原帖
满江红,求助
743048
ran_qwq楼主2023/5/7 14:01
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10,INF=0x3f3f3f3f;
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
void Write(int x){if(x<0){putchar('-'),Write(-x);return;}if(x<10){putchar(x+'0');return;}Write(x/10),putchar(x%10+'0');}
void write(int x,char *s){Write(x),printf("%s",s);}
void solve()
{
	int n=read(),m=read(),k=read(),p=read();string s="0",t="0",u="0";
	for(int i=1;i<n;i++) s+=s[i-1]^1,t+=i%(m-1)==0?t[i-1]:t[i-1]^1;
	u=t;
	for(int i=n-1;i;i--)
		if(u[i]==u[i-1])
		{
			u[i]^=1;
			for(int j=i+1;j<n;j++) u[j]=u[j-1]^1;
			break;
		}
	int ans1=0,ans2=0,ans3=0,lst=0;
	for(int i=1;i<n;i++)
		if(s[i]==s[i-1]) lst=i,ans1+=k;
		else if(lst&&i-lst-1>=m) ans1+=p;
	lst=0;
	for(int i=1;i<n;i++)
		if(t[i]==t[i-1]) lst=i,ans2+=k;
		else if(lst&&i-lst-1>=m) ans2+=p;
	lst=0;
	for(int i=1;i<n;i++)
		if(u[i]==u[i-1]) lst=i,ans3+=k;
		else if(lst&&i-lst-1>=m) ans3+=p;
	if(ans1>=ans2&&ans1>=ans3) write(ans1,"\n"),cout<<s<<"\n";
	else if(ans2>=ans1&&ans2>=ans3) write(ans2,"\n"),cout<<t<<"\n";
	else write(ans3,"\n"),cout<<u<<"\n";
}
signed main()
{
	int T=read();
	while(T--) solve();
}

2023/5/7 14:01
加载中...