先考慮-1的情況,如果乙個人知道了自己是特殊的位置,但是\(b>c\),那麼就無法判斷了
其次,我們考慮一開始有乙個不合法的\(a\)的集合,也就是沒有特殊位置的集合\(f_0\)
如果在時間\(1\),某乙個人的視角下剛好和這個特殊位置重合了(就是除他自己的顏色),那麼它就可以報出這個不合法的情況,遊戲結束。
如果在時間\(1\)沒有發現**,所有人可以得到新的資訊:沒有人剛好重合。那麼此時可以擴充套件不合法的集合,改變其中的\(f_0\)中任何乙個\(a\)的乙個位置,在此時仍是不合法的。
以此類推,每個時間過去獲得資訊並擴充套件不合法的集合。
現在給了你乙個\(a\),需要求出它出現的最小時間。
考慮乙個不合法集合是什麼樣子的
\[a_i+b_i\le a_\le a_i+c_i
\]那麼可以通過改變最少的\(a\)來達到這個不合法集合(因為每個時間可以變動乙個位置)
把條件變一下,令\(b_i,c_i\)代表字首和(向右移動一位)
那麼可以變成對無序二元組\((i,j)\)有
\[a_i-b_i\le a_j-b_j\\
a_i-c_i\ge a_j-c_j
\]可以投影到二維平面做最長不上公升子串行
code:
#include #include #include #define ll long long
const int n=1e5+10;
template void read(t &x)
int n,cnt;
ll a[n],b[n],c[n],bee[n];
struct koito_yuu
koito_yuu(ll a,ll b)
bool friend operator
}yuu[n];
int main()
for(int i=2;i<=n;i++) b[i]+=b[i-1],c[i]+=c[i-1];
for(int i=1;i<=n;i++) yuu[i]=koito_yuu(a[i]-b[i],a[i]-c[i]);
std::sort(yuu+1,yuu+1+n);
for(int i=1;i<=n;i++)
printf("%d\n",n-cnt);
return 0;
}
2019.3.31 I 懶癌患者大四狗
哈哈.開了個部落格,都快一星期了才想起來翹個班寫一寫,實在是慚愧。想來這個部落格也不是寫給別人看的 當然有幫到別人自然是好事 所以正式開始寫前胡言亂語隨意扯淡幾句,算是給自己乙個交代。開部落格的原因純粹是因為以後想走技術,然而記憶力太差 就是懶得記 想把自己每次學習的想法和觀點以影象文字形式記下來,...
懶癌晚期患者的自白書
主播 朱峰 姝琦 張珺 張樂 姝琦 後期 朱峰 這是乙個新的話題系列,我們想通過這個系列,跟大家介紹下生活中不太常見或常用,但卻可以大大提高生活品質 節省家務勞動精力的小東西 小電器。第一期節目我們給大家介紹下客廳裡面可能會用到的一些東西,尤其是,姝琦同學最近又養了乙隻貓,兩隻貓的房間,如何及時清掃...
懶癌治療儀 寫在前面
新年初始的時候,給自己定了很多計畫,一年快過去了,大部分都沒有實現 謝謝鄙視!懶癌 prd so 1 doc prd shouye inlist 我也不知道到了哪個階段,反正一直在積極的 然並卵!嘗試過使用各種各樣的方 和軟體工具,然並卵!簡單介紹一些失敗的原因 其實是藉口!1,使用過各種gtd方法...