GDOI2016模擬8 16幫派

2021-07-04 15:24:19 字數 1766 閱讀 3218

農場裡的生活很艱苦,而且當生活很艱苦,你必須堅強起來。奶牛們形成了編號為1到m的幫派。這些幫派一開始和睦相處了一段時間,但是現在失控了!

奶牛們在競爭一片大草地的控制權。奶牛之間的衝突發生在連續的若干分鐘內。每一分鐘有乙隻奶牛走進草地。如果此時草地上沒有奶牛,那麼這只新進去的奶牛所在的幫派就能占領這片草地。如果草地上已經被新進去的奶牛的幫派所占領了,那麼這只奶牛就在草地裡吃草。否則,乙隻屬於正在占領草地的幫派的奶牛會跟新來的奶牛發生衝突。

這些發生在兩隻奶牛之間的衝突由吵架開始,然後兩隻奶牛就會發現他們的共同點比他們的不同點更多。然後兩隻奶牛發現他們各自的錯誤,就離開他們所在的幫派,走出草地,再去fj的客棧裡喝一杯冷牛奶。如果在某次衝突之後,草地裡沒有奶牛,那麼沒有幫派占領草地。

bessie知道這些衝突是怎麼發生的。她知道每乙個幫派有幾隻奶牛。bessie很想在所有衝突都發生完,每只奶牛要麼在草地上,要麼在fj客棧裡之後,讓她所在的幫派占領這片草地。請你幫助bessie判斷她所在的幫派(編號為1)是否有可能占領草地。

如果有可能占領草地,bessie想知道最後最多能有多少只奶牛是屬於她所在的幫派的。輸出這個數字和能讓bessie的幫派占領草地的字典序最小的方案(每分鐘進入草地的奶牛的幫派編號的序列)。乙個序列x字典序比序列y小的意思是有某個k,x[k]

這題一開始就沒有好的想法,考的時候就棄療了…

而且沒給部分分範圍。。。。

現在假設我們我們不必要求字典序,若給定前面一部分已經選擇的序列,我們要使得後面能有一種方案使得留下的1最多,那麼我們可以這樣放:

首先,剩餘1肯定在最後,中間的(不包含1)可以這樣放:

先按數量從小到大排,按如下(柱狀圖)放,箭頭表示選取方向:

我們可以發現,這樣選取的特點,若展開成乙個序列,那麼相鄰的可以互相抵消,同時,它也是能使前面選擇不管是什麼序列,都可以盡可能將幫派消掉,這樣,我們可以得到乙個最優方案來判斷,當前選擇的序列(前面的),能否滿足答案,剩下的,只需要列舉答案,讓後列舉前面的序列,判斷是否合法就行了。

時間複雜度:o(n2

mlog

n )

貼**:

#include

#include

#include

using

namespace

std;

#define n 102

int n,m,ans;

int a[n],b[n],d[n];

bool p;

struct nodec[n];

void init()

bool cmp(const node&a,const node&b)

sort(c+1,c+sum+1,cmp);

xx=sum;

for (;c[1].y;)else

}while (d[0]!=n)d[++d[0]]=1;

xx=0,yy=0;

for (int i=1;i<=n;i++)

if (!yy||xx==d[i])else

yy--;

return (xx==1)&&(yy==ans);

}bool jian()

++b[j];

}if (!p)return

0; }

return1;}

void work()

}void write()

}int main()

GDOI2016模擬8 8旋轉

alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...

GDOI2016模擬8 13總結

這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...

GDOI2016模擬8 18解密

題目 mirko要解一段加密文,但他只知道某乙個句子是原文的一部分。你的任務是要在密文中找到第乙個對應這個句子的地方。文段是通過用某個單詞 可能和原文一樣的單詞 替換原始文段每乙個單詞來加密的。如果某些單詞在原文出現一次以上,就會使用相同的替換單詞來替換。沒有兩個不同的單詞使用相同的替換單詞。單詞是...