L. Novice Magician
简单构造,但是读错了半年。
大意是构造一组方程有唯一解。
随便凑一个就行,没有任何讲究,不知道为啥没人过。
#include<bits/stdc++.h> using namespace std;typedef long long ll;typedef long double ld;void ini();void solve(); const int mod=998244353; //const int mod=1e9+7; const ll inf=1e18; int cases=0; int main(){ ini(); ios::sync_with_stdio(0);cin.tie(0),cout.tie(0); cout<<fixed<<setprecision(6); int T; if(cases)cin>>T;else T=1; for(int tt=0;tt<T;tt++){ solve(); } } const int N=2112; ll a[N],ans[N];int l[N],r[N]; void solve(){ int m;cin>>m; int n=1<<m; if(n==2){ cin>>a[0]>>a[1]; cout<<"YES\n2\n"; cout<<a[0]<<' '<<0<<'\n'<<a[1]<<' '<<1<<'\n'; return; } ll s=0; for(int i=0;i<n;i++)cin>>a[i],s+=a[i]; if(s%(n/2)){ cout<<"NO\n"; return; } cout<<"YES\n"<<n<<'\n'; ll x=a[0]; cout<<a[0]<<' ';for(int i=0;i<n/2;i++)cout<<i<<' ',a[i]-=x+i*2;cout<<'\n'; x=(0+n-2)*(n/2)/2; ll vtot=0; for(int i=1;i<n;i++)a[i]-=x; for(int i=1;i<n;i++)vtot+=a[i]; vtot/=n/2; for(int i=1;i<n;i++)l[i]=i,r[i]=(i+n/2-1)%(n-1)+1,ans[r[i]]=(a[i]+a[r[i]]-vtot); for(int i=1;i<n;i++){ cout<<ans[i]<<' '; for(int j=l[i];j!=r[i];j=j%(n-1)+1)cout<<j<<' '; cout<<'\n'; } } void ini(){}View Code
注意点:
输出YES同时输出n个数,这会导致20罚时
2的时候需要特判,这会导致20+罚时
M. String Master
想补,待填。
标签:const,cout,int,CCPC,long,补题,2022,20 From: https://www.cnblogs.com/Bakabamboo/p/17447259.html