洛谷P1053 篝火晚會

2021-08-20 11:51:05 字數 954 閱讀 5016

題目

模擬,構造出整個數列,要求的就是這個數列需要經過多少次操作得到

但是,這其實是乙個環,編號為1的可以放任意乙個位置,每一位都可以右移一位,最右邊的一位移到第一位(後文直接叫右移)。

而且,第乙個人可以選擇左邊a[1],右邊b[1],也可以左邊b[1],右邊a[1],所以環還可以倒過來。

比如題中所給資料:

4 3 4

4 3

1 2

1 2

假設第一位是1,那整個數列可以是1 3 2 4,也可以是1 4 2 3。

可以發現,右邊的倒過來,就變成3 2 4 1,和左邊是一樣的。

考慮正著的情況(反著也一樣)

假設右移k次是最優解,右移過以後與原數列有t個不同,那交換的代價就是t,那就可以設ans[i]表示右移i位後與原數列有ans[i]個相同,

那麼答案=max=n-max

#include

using

namespace

std;

const

int n=50002;

int n,i,ans,a[n],b[n],h[n],ans1[n],ans2[n];

inline

char gc()

#define gc getchar

inline

int read()

inline

void write(int a)

inline

void writeln(int a)

int main()

for (i=1;i<=n;i++) ans1[(h[i]-i+n)%n]++,ans2[(h[i]+i)%n]++;

//計算ans,其中ans1是正著來的,ans2是倒著

for (i=0;iprintf("%d",n-ans);

}

洛谷 P1053 篝火晚會

佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有nn n個同學,編號從11 1到nn n。一開始,同學們按照1,2,n1,2,n1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的同學。如何下命...

P1053 篝火晚會

至於思路以及 解釋,個人覺得洛谷的題解已經很清楚了,故就不多解釋了 有一點不是很清楚,就是如果將c陣列的初始值定義為 正 c 0 1 c 1 l 1 反 c 0 1 c 1 r 1 時會wa乙個點,但在我看來好像並沒有什麼區別,如果有人知道,可以在下面告訴我,萬分感謝 include include...

洛谷P1053篝火晚會題解 zhengjun

題目描述 佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有n nn個同學,編號從1 11到n nn。一開始,同學們按照1,2 n 1,2,n 1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的...