得分: \(0+77+20=97\)
排名: \(Rank\ 5\)
\(Rating\):\(+46\)
\(T1\):【HHHOJ178】依神()
这套题目中的唯一一道传统题。
比赛时连暴力都不会写,赛后也不会订正。。。
\(T2\):【HHHOJ179】紫苑()
一道提答题,原题详见此题:。
这里仅给出造数据程序以及答案:
\(Subtask1\)
手造即可。
\(Subtask2\)
#include#define N 1990//数的总数#define M 1469//混进数的位置using namespace std;int main(){ freopen("Shion2.out","w",stdout); register int i;cout< <
\(Subtask3\)
#include#define N 1984using namespace std;int p[N+5],ans[N+5];void DivideAndSolve(int l,int r,int v)//模拟快排来求答案{ int x=l+r>>1,i=l,j=x;!ans[p[x]]&&(ans[p[x]]=++v);//使中间的数最小 p[i]^=p[j]^=p[i]^=p[j],++i
\(Subtask4\)
#include#define N 1012//数的总数#define M 30//序列中数的最大值using namespace std;int main(){ freopen("Shion4.out","w",stdout); register int i,j;cout< <
\(Subtask5\)
#include#define N 1004using namespace std;int ans[N+5];void DivideAndSolve(int l,int r,int v)//二分构造序列{ if(l>r) return;//当左边界大于右边界时,退出 int mid=l+r>>1;ans[mid]=v,//给中间的数赋值 DivideAndSolve(l,mid-1,v+r-mid+1),//处理左边 DivideAndSolve(mid+1,r,v+1);//处理右边}int main(){ freopen("Shion5.out","w",stdout); register int i;cout< <
\(Subtask6\)
#include#define N 4096#define uint unsigned int#define swap(x,y) (x^=y^=x^=y)using namespace std;int a[N+5];int main(){ freopen("Shion6.out","w",stdout); register int i;register uint seed; for(i=1;i<=N;++i) a[i]=i;for(i=N;i;--i) swap(a[i],a[(i+2048)%N+1]);//倒序处理,构造出原数列 for(i=1;i<=N;++i) a[i]>a[N]&&(a[i]+=1000000);//将已经构造出的序列中大于a[n]的数全部加上一个很大的数,这样就能使得相对大小不变 for(seed=2166136261,i=1;i^N;++i) seed=(seed*16777619)^a[i];//求出前n-1个数使seed得到的值 for(i=4092;i<=1004093;++i) if(((seed*16777619)^i)%N==2048) {a[N]=i;break;}//枚举一个合适的a[n]使得seed能够恰好等于2048 for(cout< < <=N;++i) cout< <
答案
\(T3\):【HHHOJ180】今宵是飘逸的利己主义者()
一道通信题,比赛时只会写暴力,连\(0\le k<1024\)的良心部分分都忘写了。
这题是一道神仙哈希题,尚未订正完。