A 略
B
将ddd...d拆成111...1*d。能整除有两种情况,第一种d能整除1 3 5 7 9。第二种用111..11除以1 3 5 7 9发现k位能除尽,则阶乘n中包含因数k就成立。需要注意的一个点是有可能时d中的一个因数乘n的阶乘的因数能整除1 3 5 7 9
C
将这个数组段分成三部分,即仅包含特殊的数左,右,和包含特殊的数。前两部分的最大知道最小值中每个数都能取到,取并集。再将这个集合的左右边界和第三部分的左右边界比大小输出。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int T,n,a[N],pos,lmin,lmax,rmin,rmax,s,llmin,llmax,rrmin,rrmax,minn,maxx;
void init()
{pos=-1;
}
void solve()
{cin>>n;init();for(int i=1;i<=n;i++){cin>>a[i];if(a[i]!=1&&a[i]!=-1) pos=i;}if(pos==-1){minn=maxx=0;s=0;for(int i=1;i<=n;i++){s+=a[i];if(s<0) s=0;maxx=max(maxx,s);}s=0;for(int i=1;i<=n;i++){s+=a[i];if(s>0) s=0;minn=min(minn,s);}cout<<maxx-minn+1<<endl;for(int i=minn;i<=maxx;i++)cout<<i<<" ";cout<<endl;return ;}if(pos==1){lmin=lmax=0;}else{s=0;lmin=lmax=0;for(int i=1;i<=pos-1;i++){s+=a[i];if(s<0) s=0;lmax=max(lmax,s);}s=0;for(int i=1;i<=pos-1;i++){s+=a[i];if(s>0) s=0;lmin=min(lmin,s);}}if(pos==n){rmin=rmax=0;}else{s=0;rmin=rmax=0;for(int i=pos+1;i<=n;i++){s+=a[i];if(s<0) s=0;rmax=max(rmax,s);}s=0;for(int i=pos+1;i<=n;i++){s+=a[i];if(s>0) s=0;rmin=min(rmin,s);}}lmin=min(lmin,rmin);lmax=max(lmax,rmax);if(pos==1) llmin=llmax=0;else{s=0;llmin=llmax=0;for(int i=pos-1;i>=1;i--){s+=a[i];llmax=max(llmax,s);llmin=min(llmin,s);}}if(pos==n) rrmin=rrmax=0;else{s=0;rrmin=rrmax=0;for(int i=pos+1;i<=n;i++){s+=a[i];rrmax=max(rrmax,s);rrmin=min(rrmin,s);}}llmin=llmin+rrmin+a[pos];llmax=llmax+rrmax+a[pos];if(llmax<lmin){cout<<llmax-llmin+1+lmax-lmin+1<<endl;for(int i=llmin;i<=llmax;i++)cout<<i<<" ";for(int i=lmin;i<=lmax;i++)cout<<i<<" ";cout<<endl;}if(llmax>=lmin&&llmax<=lmax){cout<<max(lmax,llmax)-min(lmin,llmin)+1<<endl;for(int i=min(lmin,llmin);i<=max(lmax,llmax);i++)cout<<i<<" ";cout<<endl;}if(llmax>lmax&&llmin<=lmax){cout<<max(lmax,llmax)-min(lmin,llmin)+1<<endl;for(int i=min(lmin,llmin);i<=max(lmax,llmax);i++)cout<<i<<" ";cout<<endl;}if(llmin>lmax){cout<<llmax-llmin+1+lmax-lmin+1<<endl;for(int i=lmin;i<=lmax;i++)cout<<i<<" ";for(int i=llmin;i<=llmax;i++)cout<<i<<" ";cout<<endl;}
}
signed main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--) solve();
}