日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【AtCoder】ARC088

發(fā)布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【AtCoder】ARC088 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C - Multiple Gift

題解

首項是X,每次乘個2,暴力統(tǒng)計

代碼

#include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space putchar(' ') #define eps 1e-8 #define mo 974711 #define MAXN 2005 //#define ivorysi using namespace std; typedef long long int64; typedef double db; template<class T> void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f; } template<class T> void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10); } int64 X,Y;int main() { #ifdef ivorysifreopen("f1.in","r",stdin); #endifread(X);read(Y);int l = 1;while(X <= Y / 2) {++l;X *= 2;}out(l);enter; }

D - Wide Flip

題解

從大到小枚舉K(也可以二分)
如果\(2K <= N\),此時\(K\)一定合法
否則看前\(K\)個和后\(K\)個交出來的中間一段,這段的前面和后面1和0是可以單個位置隨便改的(用一次K + 1的區(qū)間再用一次K的區(qū)間)
只要看中間一段是不是全1或者全0即可

代碼

#include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space putchar(' ') #define eps 1e-8 #define mo 974711 #define MAXN 2005 //#define ivorysi using namespace std; typedef long long int64; typedef double db; template<class T> void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f; } template<class T> void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10); } char s[1000005]; int sum[100005],N; int main() { #ifdef ivorysifreopen("f1.in","r",stdin); #endifscanf("%s",s + 1);N = strlen(s + 1);for(int i = 1 ; i <= N ; ++i) {sum[i] = sum[i - 1];if(s[i] == '1') sum[i]++;}for(int K = N ; K >= 1 ; --K) {int r = K;int l = N - K + 1;if(l > r) {out(K);enter;return 0;}if(sum[r] - sum[l - 1] == 0 || sum[r] - sum[l - 1] == r - l + 1) {out(K);enter;return 0;}} }

E - Papple Sort

題解

只要每次把靠邊的一個字符的匹配點找出來同樣后移然后一起刪除即可
就是討論一下
...A...A...B...B..
A要和這個一對B交換兩次
B如果要過去也要換兩次,所以都一樣
A..B..A..B
A要和B換一次,如果B到外面也是和A換一次,所以都一樣
樹狀數(shù)組維護(hù)一下前綴有多少數(shù)即可

代碼

#include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space putchar(' ') #define eps 1e-8 #define mo 974711 #define MAXN 200005 //#define ivorysi using namespace std; typedef long long int64; typedef double db; template<class T> void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f; } template<class T> void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10); } char s[MAXN]; int N; vector<int> c[30]; bool vis[MAXN]; int tr[MAXN]; void Init() {scanf("%s",s + 1);N = strlen(s + 1); } int lowbit(int x) {return x & -x;} void Insert(int x,int v) {while(x <= N) {tr[x] += v;x += lowbit(x);} } int Query(int x) {int res = 0;while(x > 0) {res += tr[x];x -= lowbit(x);}return res; } void Solve() {int cnt = 0;for(int i = N ; i >= 1 ; --i) {c[s[i] - 'a'].pb(i);}for(int i = 0 ; i < 26 ; ++i) {if(c[i].size() & 1) ++cnt;}if(cnt >= 2) {puts("-1");return;}for(int i = 1 ; i <= N ; ++i) Insert(i,1);int64 ans = 0;int k = 0;for(int i = N ; i >= 1 ; --i) {if(vis[i]) continue;int t = c[s[i] - 'a'].back();c[s[i] - 'a'].pop_back();if(t == i){ ++k;continue;}ans += Query(t - 1) + k;vis[t] = 1;Insert(t,-1);}out(ans);enter; } int main() { #ifdef ivorysifreopen("f1.in","r",stdin); #endifInit();Solve(); }

F - Christmas Tree

題解

啊這個只要dp一下第一個值再二分。。。二分判的方法是……
woc這不NOIPD1T3啊怎么一模一樣啊

代碼

#include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space putchar(' ') #define eps 1e-8 #define mo 974711 #define MAXN 100005 //#define ivorysi using namespace std; typedef long long int64; typedef double db; template<class T> void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f; } template<class T> void out(T x) {if(x < 0) {x = -x;putchar('-');}if(x >= 10) {out(x / 10);}putchar('0' + x % 10); } int N; struct node {int to,next; }E[MAXN * 2]; int head[MAXN],sumE; int dp[MAXN],A,lim,res; int val[MAXN],tot; bool vis[MAXN]; void add(int u,int v) {E[++sumE].to = v;E[sumE].next = head[u];head[u] = sumE; } void Init() {read(N);int a,b;for(int i = 1 ; i < N ; ++i) {read(a);read(b);add(a,b);add(b,a);}} void dfs(int u,int fa) {int son = 0;for(int i = head[u] ; i ; i = E[i].next) {int v = E[i].to;if(v != fa) {dfs(v,u);++son;dp[u] += dp[v];}}dp[u] -= son / 2;if(son % 2 == 0 && fa) dp[u]++; } struct BIT {int tr[MAXN],s;void clear() {for(int i = 1 ; i <= s ; ++i) tr[i] = 0;}int lowbit(int x) {return x & -x;}int query(int x) {int res = 0;while(x > 0) {res += tr[x];x -= lowbit(x);}return res;}void insert(int x,int v) {while(x <= s) {tr[x] += v;x += lowbit(x);}}int find_max() {int L = 1,R = s;int x = query(s);if(x == 0) return 0;while(L < R) {int m = (L + R + 1) >> 1;if(query(m - 1) != x) L = m;else R = m - 1;}return L;} }BST; void calc(int u,int fa) {for(int i = head[u] ; i ; i = E[i].next) {int v = E[i].to;if(v != fa) {calc(v,u);}}tot = 0;for(int i = head[u] ; i ; i = E[i].next) {int v = E[i].to;if(v != fa) {val[++tot] = dp[v];}}if(!tot) {dp[u] = 1;++res;return;}BST.clear();sort(val + 1,val + tot + 1);for(int i = 1 ; i <= tot ; ++i) vis[i] = 1;BST.s = tot;int p = 0;for(int i = tot ; i >= 1 ; --i) {if(!vis[i]) continue;while(p < i && val[p + 1] + val[i] <= lim) {++p;BST.insert(p,1);}if(p >= i) BST.insert(i,-1);int t = BST.find_max();if(t) {vis[t] = 0;vis[i] = 0;BST.insert(t,-1);--res;}}if(fa) {dp[u] = 1;++res;for(int i = 1 ; i <= tot ; ++i) {if(vis[i]) {if(val[i] + 1 > lim) break;dp[u] += val[i];--res;break;}}} } bool check(int m) {lim = m;res = 0;calc(1,0);return res <= A; } void Solve() {dfs(1,0);out(dp[1]);space;A = dp[1];int L = 1,R = N - 1;while(L < R) {int mid = (L + R) >> 1;if(check(mid)) R = mid;else L = mid + 1;}out(R);enter; } int main() { #ifdef ivorysifreopen("f1.in","r",stdin); #endifInit();Solve(); }

轉(zhuǎn)載于:https://www.cnblogs.com/ivorysi/p/10170335.html

總結(jié)

以上是生活随笔為你收集整理的【AtCoder】ARC088的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品普通话 | 久久亚洲av无码精品色午夜麻豆 | 日本在线| 男人的天堂va | 男生插女生视频在线观看 | 91成人黄色| 国产人妻精品午夜福利免费 | 精品乱码一区内射人妻无码 | 成人xx视频 | 99久久久无码国产精品 | 青青伊人精品 | 制服丝袜在线视频 | 亚洲在线一区二区三区 | 成人看片网站 | 黄色一级片视频 | 九色福利视频 | 99热久久这里只有精品 | 日韩性爰视频 | 国产精品男女视频 | 久久国产免费 | 欧美人体一区二区三区 | 久久久黄色大片 | 岳狂躁岳丰满少妇大叫 | 免费观看黄色一级片 | 免费成人av在线 | 成人动漫在线免费观看 | 亚洲а∨天堂久久精品2021 | 成人免费毛片东京热 | 神马午夜伦理影院 | 久久久久久国产精品免费播放 | 亚洲精品一区在线 | 热久久精 | 一级国产黄色片 | 在线xxxx | 亚洲不卡网 | 在线免费观看一区二区三区 | 久久免费的精品国产v∧ | 国产一区二区在线看 | 久久国产精品偷 | 国产视频91在线 | av在线操 | 黄污视频网站 | 国产美女视频91 | 中文字幕丰满孑伦无码专区 | 中文字幕美女 | 久久久经典 | 国产乱码久久久久久 | 国产激情在线观看 | 久久婷婷成人综合色 | 精品影片一区二区入口 | 欧美你懂的 | 中文字幕在线观看免费视频 | 国产夫妻自拍小视频 | 麻豆av电影在线观看 | 欧美熟妇乱码在线一区 | 99国产热| 91偷拍精品一区二区三区 | 国产精品久久久久久久久久久久久久久久久 | 狠狠狠狠狠 | 日本成人在线免费视频 | 国内精品久久久久久久久 | 天天狠天天干 | 日日骑| 深夜精品视频 | 成人亚洲免费 | 亚洲激情婷婷 | 国产黑丝一区二区 | 欧美极品喷水 | 久草热在线 | 国产精品一区二区av日韩在线 | av乱码 | 成人手机看片 | 精品国精品国产自在久不卡 | 综合色在线视频 | 五月综合激情日本mⅴ | 影音先锋亚洲资源 | 一级黄网站 | 毛片久久久久久 | av网天堂 | 99国产精品视频免费观看一公开 | 久久精品欧美视频 | 精品视频在线一区二区 | 一级黄色片在线播放 | 99久久精品无免国产免费 | 国产一区二区三区麻豆 | 一级大片免费观看 | a√国产| 国产黄色大片视频 | av在线视屏| 久操免费在线 | 天天欲色| 日韩久久免费 | 伊人www| 天堂欧美城网站 | 国产日韩欧美91 | 日本成人免费在线 | 国产精品久久久久久久 | 国产亚洲精品成人av久久ww | 国产色视频一区二区三区qq号 |