蒟蒻養成記 構造數列

2021-07-31 13:22:39 字數 2062 閱讀 5161

【題目描述】

你需要求乙個n個不同數字的序列p,

p[i]

是1-n

中的數,且滿足對於

1<=i<=n,p[p[i]]=n-i+1

【輸入格式】

乙個數字n(1<=n<=10^5)

【輸出格式】

輸出n個數字序列

p,任意輸出一組答案即可

【輸入輸出樣例】

input1

1output1

1input2

2output2

-1input3

4output3

2 4 1 3

input4

5output4

2 5 3 1 4

【資料約定】

資料保證n大小梯度增加

【解法】看到這道題,第一反應就是暴力打表,但看看範圍——10^5,看來要等到老了。

那就想到構造。對於

n為奇數時,那麼

p[n/2+1]=n/2+1(詳細的自己想想就知道了)

那接下來呢,

剩下的4

組一迴圈(

1,2,n-1,n

為一組這樣),放在首尾(詳細見樣例),

接下來我們就證明一下為什麼是4個一迴圈;

若開始為i,則

列個表

開始    i     p[i]    n-i+1     p[n-i+1]

變換後 p[i]   n-i+1 p[n-i+1]    n-( n-i+1)+1=i

開始迴圈了

比如9的時候,

先是 x x x x 5 x x x x x,然後放1,2,8,9,變成 2 9 x x 5 x x 1 8,其中2-9=1-8,構造方法就顯而易見了。

所以要能構造出解,必須

n mod 4=0

或者1。

是不是很簡單列

【**】

#include

#include

#include

#include

using namespace std;

int i,j,k,m,n,o,p;

int a[100001];

int main()

for(i=1;i<=m;i++)fprintf(fout,"%d ",a[i]);

}else

if(m%4==1)

a[m/2+1]=m/2+1;

for(i=1;i<=m;i++)fprintf(fout,"%d ",a[i]);

}else fprintf(fout,"-1");

fclose(fin);

fclose(fout);

}【ps 

special judge**,cena可以直接用

】#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define rep(i,n) for(i=0;i=k;--i)

#define met(i,j) memset(i,j,sizeof(i))

#define fo(i,j) for(typeof(j.begin()) i=j.begin();i!=j.end();++i)

#define pb push_back

#define mk make_pair

#define sz size()

const int inf=2147483647;

typedef pairpii;

typedef long long ll;

typedef unsigned long long ull;

int p[100005];

int main(int argc,char **argv)

else

if(n%4==3)

else

for(i,1,n)

{if(p[p[i]]!=n-i+1)

{fs<<0<

蒟蒻養成記 構造數列(2)

ograda 題目描述 智慧型有乙個數列a,帆帆也有乙個數列b,每個數列都有n個數字 對於乙個數列,裡面的數字都是不同的。帆帆覺得智慧型的數列比較好看,打算重排數列b,他想把自己的數列弄得盡量和智慧型的數列相似,我們定義相似為b中相鄰數字的大小關係和a中相鄰數字的大小關係一致。比如說a 其中a1不過...

bzoj4363 蒟蒻的數列

description 蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列 題目描述 dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列 a,b 這個區間中所有比k小的數改為k,他想知 道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解決。input 第一行乙個...

BZOJ 4636 蒟蒻的數列

bzoj 4636 蒟蒻的數列 線段樹 動態開點 蒟蒻dcrusher不僅喜歡玩撲克,還喜歡研究數列 題目描述 dcrusher有乙個數列,初始值均為0,他進行n次操作,每次將數列 a,b 這個區間中所有比k小的數改為k,他想知 道n次操作後數列中所有元素的和。他還要玩其他遊戲,所以這個問題留給你解...