P3322 SDOI2015 排序 暴搜

2022-06-13 21:00:14 字數 922 閱讀 7562

戳這裡

通過手玩樣例 , 我們可以發現以下幾條性質:

乙個合法的操作序列,各個操作其實是互不影響的,也就是說,只要我們發現了一組合法的操作序列,那麼它的全排列是都可以的

對於一種排列,有且僅有一種合法的操作集合,因為任意一類操作是無法通過別的其他操作等價替換的

那麼我們將問題轉化成了列舉操作集合,判斷是否可行

然後我們發現從小到大進行每個操作,進行第 \(i\) 種操作後,情況合法當且僅當每 \(2^\) 個數都是單調遞增的

對於樣例而言:

進行第一次操作後的合法情況應該是 :\(7,8,5 ,6,1,2,3,4\)

對於第 \(i\) 種操作,分情況討論:

若沒有需要操作的區間,跳過

若有乙個需要操作的區間,直接修改

若有兩個操作的區間,分 4 種情況進行修改

若有兩個以上的區間不合法,則無解

#includeusing namespace std;

namespace zzc

while (isdigit(ch))

return x*f; }

const int maxn = 4100;

long long n,ans;

long long a[maxn],pw[maxn],fac[maxn];

bool check(int x,int l)

int tmp1=0,tmp2=0;

for(int i=1;i<=pw[n];i+=pw[k])

}if(!tmp1&&!tmp2) dfs(k+1,num);

else if(tmp1&&!tmp2)

else

}} }

void work() }

int main()

洛谷P3322 SDOI2015 排序

小a有乙個1 2n的排列a 1.2n 他希望將a陣列從小到大排序,小a可以執行的操作有n種,每種操作最多可以執行一次,對於所有的 i 1 i n 第i中操作為將序列從左到右劃分為2段,每段恰好包括2個數,然後整體交換其中兩段.小a想知道可以將陣列a從小到 大排序的不同的操作序列有多少個,小a認為兩個...

P1347 排序(拓撲排序)

題目傳送門 這題雖然是一道藍題,但他的資料很小,所以,我們可以每輸入乙個關係就拓撲一次 我們可以把結果分為三種情況 這裡我們可以用拓撲把度清零,記錄每個字母都出現過 並且判斷最長的鏈是多少就行了 即f a i to max f a i to f p h 1 找最長鏈 s max s,f a i to...

洛谷P1347 排序

這個題看到很多人寫topo排序,其實這道題第一眼看更像是乙個差分約束的裸題qwq.令dis x 表示x的相對大小 1是最小,n是最大 顯然,對於乙個關係a 而我們最後要求的就是dis x 的最小值,為了使它們的值都落在1 n之間,我們新建乙個虛擬的點0,並令dis 0 0且dis x dis 0 這...