題目大意:有n≤3e3個格仔,你可以任意給每個格仔染色,但是要滿足m≤3e3限制條件,限制條件有兩種型別:
1. 區間[l,r]中被染色的格仔數量不少於k。
2. 區間[l,r]外被染色的格仔數量不少於k。
在滿足所有限制條件下求染色格仔數量的最小值。
題解:算作是差分約束+二分的板子題,比賽時還不知道差分約束是什麼,當時一點思路都沒有,賽後看了大牛們的講解才理解,其實就是把一些不等式問題轉換成最短路或者最長路,不懂得可以看看這篇文章:
寫的是真的好,裡面講的一道例題就和這個題差不多。
首先因為染色格仔的數量是越多越好,即滿足遞增的,那麼我們就可以二分列舉染色格仔的總數量mid
我們很容易能寫出以下不等式(注意那些隱藏條件,因為差分約束正確的前提是滿足所有條件):
然後我們分別建圖判斷是否存在0-n的最短路就行了。
trick:這個題有點卡常,用spfa時需要剪枝一下,實測僅用slf優化也可以過,不過有個更牛皮的優化,具體內容參考**
**實現:
#pragma gcc optimize(2)
#include#include#include#include#include#include#include#include#include#include#include#define pi atan(1.0)*4
#define e 2.718281828
#define rp(i,s,t) for (register int i = (s); i <= (t); i++)
#define rp(i,t,s) for (register int i = (t); i >= (s); i--)
#define ll long long
#define ull unsigned long long
#define mst(a,b) memset(a,b,sizeof(a))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pii pair#define mp make_pair
#define pb push_back
#define debug printf("ac\n");
using namespace std;
inline int read()
while(c>='0'&&c<='9')
return a*b;
}const int inf = 0x3f3f3f3f;
const int n = 3e3+7;
struct edgee[n*10];
int head[n],edgecnt,dis[n];
dequeq;
int cnt[n],inq[n];//常規的spfa所需的陣列
int n,m1,m2,t;
inline void addedge(int u,int v,int w,int flag);
head[u]=edgecnt;
}inline void add(int delta)
}int spfa(int delta)
q.push_back(0);
inq[0]=1;
while(!q.empty())
//大力剪枝,如果有乙個點的最短路為負,則必定存在負環
//因為 i->i-1 有一條權值為0的邊,而且是從0為起點走的,那麼就可以通過走序號不斷減1的邊回到0,這樣就形成了乙個負環
if(dis[now]<0)
for(int i=head[now];i;i=e[i].nxt)
while(m2--)
rp(i,1,n)
//s(n)-s(0)==mid => s(n)-s(0)>=mid and s(n)-s(0)<=mid
//s(n)-s(0)>=mid => s(0)-s(n)<=-mid
addedge(0,n,0,1);
addedge(n,0,0,2);
int l=0,r=n,ans=-1;
while(l<=r)
else l=mid+1;
}printf("%d\n",ans);
}return 0;
}
2019ccpc哈爾濱補題
因為每個字串只能取乙個,剛開始是覺得全部列舉也不會超,後來想想列舉也要用深搜,所以就先記錄擁有各個字元的串,然後深搜 include using namespace std const int maxn 2e6 10 int t char s maxn vector int v 10 bool vi...
2019CCPC哈爾濱站 E題 O n
在此貼另外乙個簡單題 吃糖果 如果ac上面乙個題目之後,發現兩個吃的方法其實一模一樣,但是又來了乙個問題,因為這個題目資料很大,卡 o nlogn 則我們如何 o n 求出現次數最多的數。在此貼另外乙個簡單題 2456.mode 過了上面乙個題目你會發現,這個是求出現次數 n 1 2的數,但是如果我...
2019CCPC廈門遊記
距離上次2018ccpc吉林打鐵一年有餘,這次的廈門也是我們team拿到的第一塊區域賽牌子,寫一篇部落格留念一下qaq。作為弱校的菜雞隊,我們提前兩天就來到廈門,不得不說剛到廈門的兩天還是很快樂的,住宿的地方三人間沒有了,老闆大度的換成了一人間 標間,開心 day1 跑到鼓浪嶼玩,和兩個憨憨的隊友壓...