今天上午比賽我出來的第五題,也是最後乙個題。
題目的意思說給你乙個序列,讓你交換到1,2,3,4,5......這種序列,我一開始沒看懂題目中說的bug是怎麼回事,賽後同學說了才懂,因為是special judge 的題,所以有乙個交換限制。
放上大牛的思路吧,和我一樣,我不知道怎麼寫了。。。尷尬
解題思路:這句提示是關鍵,2n次操作,表明每個數最多只需要兩次操作。
應該從左到右依次操作過去,先將前面的數安定好了,就可以不用管前面的數了
假設操作到第i個位置,而i這個數剛好在pos這個位置上,現在就要判斷一下能否直接將pos上的i經過操作調到i這個位置上
如果 i + (pos - i) * 2 - 1 <= n 就表示可以一次操作完成 //(大神這裡沒有註明,但和我的式子是一樣的,仔細想一下這個式子求得是什麼,最右端點的值)
在上面條件不成立的情況下,又分為兩種情況
一種是pos和i的距離是奇數的情況:那麼就直接將[i,pos]這個區間的值進行交換即可
另一種是距離為偶數的情況,那就把[i+1,pos]這個區間的值進行交換即可
**:#include #include #include #include using namespace std;
int a[200000];
vector>vec;
void swap(int ll,int rr)
int main()
for(int i=1;i<=n;i++)
if(kk==i)
continue;
if(i+2*(kk-i)-1<= n)
else
else
i--;}}
int len=vec.size();
printf("%d\n",len);
for(int i=0;i
UVA 1611 Crane 推理 貪心
解題思路 這句提示是關鍵,2n次操作,表明每個數最多只需要兩次操作。應該從左到右依次操作過去,先將前面的數安定好了,就可以不用管前面的數了 假設操作到第i個位置,而i這個數剛好在pos這個位置上,現在就要判斷一下能否直接將pos上的i經過操作調到i這個位置上 如果 i pos i 2 1 n 就表示...
UVA 1611 Crane(起重機)(貪心)
題意 輸入乙個1 n 1 n 10000 的排列,用不超過9 6次操作把它變成公升序。每次操作都可以選乙個長度為偶數的連續區間,交換前一半和後一半。分析 從左到右依次將數字i放在位置i。設要將數字i放在位置i,而數字i現在在位置pos。1 若 pos i 2 i 1 n,則可以直接將i放在位置i。p...
A Karen and Game 思維 貪心
思路 首先如果是個正方形,那麼如果答案能算完,那麼就是唯一的個數。不然的話是個矩形,如果答案能算完,那麼先算行和列長的一邊,同樣是一行 一列消1,長的一邊消的更多 include include include include include include include include incl...