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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Educational Codeforces Round 112 (Rated for Div. 2) 个人题解

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Educational Codeforces Round 112 (Rated for Div. 2) 个人题解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

A. PizzaForces

題意

有三種披薩制作方案:15分鐘制作6片、20分鐘制作8片和25分鐘制作10片。

問制作出至少nnn片披薩要多少分鐘

分析

三種方案的效率都一樣,都是每分鐘制作0.4個披薩,也就是一片披薩要做2.5分鐘,所以讓溢出的時間盡可能少就可以了。

由于我們有6,8,106,8,106,8,10這三個數(shù),我們可以通過不同的方案湊出12,14,16,...12,14,16,...12,14,16,...,所有大于等于6的偶數(shù)。

所以如果小于6,輸出15,否則如果是偶數(shù)就輸出2.5n2.5n2.5n,是奇數(shù)輸出2.5(n+1)2.5(n+1)2.5(n+1).

代碼

#include <bits/stdc++.h> #define fors(i, a, b) for(int i = (a); i <= (b); ++i) #define lson k<<1 #define rson k<<1|1 #define pb push_back #define lowbit(x) ((x)&(-(x))) #define mem(a) memset(a, 0, sizeof(a)) #define DDLC_ESCAPE_PLAN_FAILED ios::sync_with_stdio(false), cin.tie(0) #define int long long const int inf = 0x3f3f3f3f; const double dinf = 1e100; typedef long long ll; //const ll linf = 9223372036854775807LL; // const ll linf = 1e18; using namespace std;signed main() {// DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--){int n;scanf("%lld", &n);if(n <= 6) printf("15\n");else if(n & 1){printf("%lld\n", (int)((n + 1) * 2.5));}else printf("%lld\n",(int)( n * 2.5));}return 0; }

B. Two Tables

題意

一個大矩形區(qū)域內(nèi)有一張桌子,你要平移這張桌子(任意方向),使得能放下另一個w×hw×hw×h的桌子。求最小移動距離

分析

看這張桌子的正上方。正上方的區(qū)域,長度肯定是滿足,可以放下的。所以我們只需要將其垂直向下平移就可以得到一種方案。那么,對于其他3個方向也一樣。所以沿著坐標軸平移肯定優(yōu)于斜著來,因為長和寬里面總是有一個是不需要額外移動來滿足的,而斜平移相對于垂直平移在另外一個方向上做了無用的移動。

代碼

#include <bits/stdc++.h> #define fors(i, a, b) for(int i = (a); i <= (b); ++i) #define lson k<<1 #define rson k<<1|1 #define pb push_back #define lowbit(x) ((x)&(-(x))) #define mem(a) memset(a, 0, sizeof(a)) #define DDLC_ESCAPE_PLAN_FAILED ios::sync_with_stdio(false), cin.tie(0) #define int long long const int inf = 0x3f3f3f3f; const double dinf = 1e100; typedef long long ll; //const ll linf = 9223372036854775807LL; // const ll linf = 1e18; using namespace std;signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--){int W, H;int x1, x2, y1, y2, w, h;cin >> W >> H;cin >> x1 >> y1 >> x2 >> y2;cin >> w >> h;int ans = inf;int r = abs(w - x1);if(x1 >= w) r = 0;if(x2 + r <= W) ans = min(ans, r);int l = abs(x2 - W + w);if(x2 <= W - w) l = 0;if(x1 - l >= 0) ans = min(ans, l);int u = abs(y2 - H + h);if(y2 <= H - h) u = 0;if(y1 - u >= 0) ans = min(ans, u);int d = abs(y1 - h);if(y1 >= h) d = 0;if(y2 + d <= H) ans = min(ans, d);cout << (ans == inf ? -1 : ans) << endl;}return 0; }

C. Coin Rows

題意

有一個兩行mmm列的矩陣,每個格子上有金幣。AliceAliceAliceBobBobBob可以在矩陣中向下或者向右移動,但不能向其他方向移動。

AliceAliceAlice(1,1)(1,1)(1,1)出發(fā),走到(2,m)(2,m)(2,m),并取走所有停留過的格子里的金幣。

BobBobBob同樣從(1,1)(1,1)(1,1)出發(fā),走到(2,m)(2,m)(2,m),并取走所有停留過的格子里的金幣(AliceAliceAlice已經(jīng)取走的BobBobBob取不到了)

AliceAliceAlice要讓BobBobBob得到的金幣盡可能少,BobBobBob會讓自己得的盡可能多。

問最終BobBobBob會得到多少金幣?

分析

由于AliceAliceAlice要走到(2,m)(2,m)(2,m),有且僅有一次向下移動。觀察mmm1e51e51e5的規(guī)模,枚舉她向下移動發(fā)生的位置。然后,她拿走金幣后,留下的金幣只會分布在右上和左下兩個地方,且BobBobBob只能選擇其中一個地方的金幣全部拿走,而不能同時拿2個地方的金幣。所以對2個地方剩余的金幣取maxmaxmax就是答案。剩余金幣的數(shù)量可以用前綴和處理。

時間復(fù)雜度O(m)O(m)O(m).

代碼

#include <bits/stdc++.h> #define fors(i, a, b) for(int i = (a); i <= (b); ++i) #define lson k<<1 #define rson k<<1|1 #define pb push_back #define lowbit(x) ((x)&(-(x))) #define mem(a) memset(a, 0, sizeof(a)) #define DDLC_ESCAPE_PLAN_FAILED ios::sync_with_stdio(false), cin.tie(0) #define int long long const int inf = 0x3f3f3f3f; const double dinf = 1e100; typedef long long ll; //const ll linf = 9223372036854775807LL; // const ll linf = 1e18; using namespace std; const int maxn = 1e5 + 10; int a[3][maxn]; int pre[maxn], lst[maxn]; // 第一行從前往后的和,第二行從后往前的和 int sum1, sum2; signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--){sum1 = sum2 = 0;int m;cin >> m;fors(i, 1, 2){fors(j, 1, m){cin >> a[i][j];if(i == 1) sum1 += a[i][j];else sum2 += a[i][j];}}pre[0] = lst[m + 1] = 0;fors(i, 1, m) pre[i] = pre[i - 1] + a[1][i];for(int i = m; i; --i) lst[i] = lst[i + 1] + a[2][i];int ans = inf;fors(i, 1, m){ans = min(ans, max(sum2 - lst[i], sum1 - pre[i]));}cout << ans << endl;}return 0; }

D. Say No to Palindromes

題意

定義一個字符串是beautifulbeautifulbeautiful的,當且僅當:任選一個長度大于1的子串,其不是回文串。

現(xiàn)在給出一個只含有字母a,b,c的字符串sss,然后給出mmm個詢問,對每個詢問,你需要回答下標lllrrr的子串如果要稱為beautifulbeautifulbeautiful串,至少需要修改幾次(只能用a,b,c修改)。

分析

考慮下面的情況:
對字符串baabaabaa

  • bbb替換aaabbabbabba,babbabbab都含有回文子串,都不行
  • ccc替換aaa,bac,bcabac,bcabac,bca都符合要求.
  • 其他情況很顯然不行
  • 進一步總結(jié)規(guī)律,我們發(fā)現(xiàn),一個字符串如果要變成非回文,其只能是形如abcabcabcabc...abcabcabcabc...abcabcabcabc...或者bacbacbac...bacbacbac...bacbacbac...,其他的情況都會發(fā)生兩個字符相鄰一樣,或者隔一個一樣,因此都是會導(dǎo)致回文子串產(chǎn)生的。

    因此我們只需要看當前子串轉(zhuǎn)變?yōu)橐陨蟽煞N串任意一種的子串就可以了,然后取minminmin

    這樣暴力的復(fù)雜度就是O(n2)O(n^2)O(n2)了,但還不夠,需要繼續(xù)優(yōu)化。

    優(yōu)化很簡單,任意區(qū)間修改成對應(yīng)串的最小次數(shù)顯然可以用前綴和維護,復(fù)雜度降到O(n+m)O(n+m)O(n+m).

    當然你也可以用莫隊分塊O(mn)O(m\sqrt n)O(mn?)或者線段樹O(mlogn)O(mlogn)O(mlogn),但顯然做復(fù)雜了(我屬于是最近學(xué)了莫隊就想用莫隊,就當是練習(xí)了,差點超時,被很多Hacker盯上了QAQ,幸好沒人叉掉)

    代碼(莫隊)

    #include <bits/stdc++.h> #define fors(i, a, b) for(int i = (a); i <= (b); ++i) #define lson k<<1 #define rson k<<1|1 #define pb push_back #define lowbit(x) ((x)&(-(x))) #define mem(a) memset(a, 0, sizeof(a)) #define DDLC_ESCAPE_PLAN_FAILED ios::sync_with_stdio(false), cin.tie(0) const int inf = 0x3f3f3f3f; const double dinf = 1e100; typedef long long ll; //const ll linf = 9223372036854775807LL; // const ll linf = 1e18; using namespace std; const int maxn = 2e5 + 5; string abc; string bca; string cab; string cba; string acb; string bac; struct query{int l, r;int ans, idx, blc; }q[maxn]; string s; bool cmp1(const query& x, const query& y){if(x.blc != y.blc) return x.blc < y.blc;return x.r < y.r; } bool rearr(const query& x, const query& y){return x.idx < y.idx; } signed main() {for(int i = 0; i < maxn; ++i){abc += i % 3 + 'a';bca += (i + 1) % 3 + 'a';cab += (i + 2) % 3 + 'a';if(i % 3 == 0){acb += 'a';cba += 'c';bac += 'b';}else if(i % 3 == 1){acb += 'c';cba += 'b';bac += 'a';}else {acb += 'b';cba += 'a';bac += 'c';}}DDLC_ESCAPE_PLAN_FAILED;int t;t = 1;while(t--){int n, m;cin >> n >> m;cin >> s;fors(i, 1, m){cin >> q[i].l >> q[i].r;q[i].l--, q[i].r--;q[i].idx = i;q[i].blc = (q[i].l - 1) / (int)sqrt(n) + 1;}sort(q + 1, q + 1 + m, cmp1);int l = 0, r = -1;int ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0, ans5 = 0, ans6 = 0;fors(i, 1, m){while(l > q[i].l){l--;if(s[l] != abc[l]) ans1++;if(s[l] != bca[l]) ans2++;if(s[l] != cab[l]) ans3++;if(s[l] != acb[l]) ans4++;if(s[l] != cba[l]) ans5++;if(s[l] != bac[l]) ans6++;}while(r < q[i].r){r++;if(s[r] != abc[r]) ans1++;if(s[r] != bca[r]) ans2++;if(s[r] != cab[r]) ans3++;if(s[r] != acb[r]) ans4++;if(s[r] != cba[r]) ans5++;if(s[r] != bac[r]) ans6++;}while(l < q[i].l){if(s[l] != abc[l]) ans1--;if(s[l] != bca[l]) ans2--;if(s[l] != cab[l]) ans3--;if(s[l] != acb[l]) ans4--;if(s[l] != cba[l]) ans5--;if(s[l] != bac[l]) ans6--;l++;}while(r > q[i].r){if(s[r] != abc[r]) ans1--;if(s[r] != bca[r]) ans2--;if(s[r] != cab[r]) ans3--;if(s[r] != acb[r]) ans4--;if(s[r] != cba[r]) ans5--;if(s[r] != bac[r]) ans6--;r--;}q[i].ans = min(min(ans1, min(ans2, ans3)), min(ans4, min(ans5, ans6)));}sort(q + 1, q + 1 + m, rearr);fors(i, 1, m) cout << q[i].ans << endl;}return 0; }

    代碼(前綴和)

    #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; const int inf = 1e9 + 7; int n, m; int pre[6][maxn] = {0}; string s; char check[6][4] = {"abc", "bca", "cab", "acb", "cba", "bac"}; int main() {ios::sync_with_stdio(false), cin.tie(0);cin >> n >> m;cin >> s;for(int i = 0; i < 6; ++i){if(s[0] != check[i][0]) pre[i][0] = 1;for(int j = 1; j < s.size(); ++j){if(s[j] != check[i][j % 3]) pre[i][j] = pre[i][j - 1] + 1;else pre[i][j] = pre[i][j - 1];}}for(int i = 0; i < m; ++i){int l, r; cin >> l >> r;l--, r--;int ans = inf;for(int j = 0; j < 6; ++j){if(l != 0) ans = min(ans, pre[j][r] - pre[j][l - 1]);else ans = min(ans, pre[j][r]);}cout << ans << endl;}return 0; }

    顯然前綴和好寫多了,效率也快多了

    總結(jié)

    以上是生活随笔為你收集整理的Educational Codeforces Round 112 (Rated for Div. 2) 个人题解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产视频1区 | 97成人资源 | 一级毛片aa | 国产一区在线视频观看 | 久久久久久久久久久影视 | 久久久蜜桃一区二区 | 污污免费观看 | 午夜精品视频一区 | 香蕉色综合| av一二三四区 | 偷偷在线观看免费高清av | 国产人人射 | 在线看亚洲 | 免费在线播放视频 | 日韩中文字幕亚洲精品欧美 | 第一章豪妇荡乳黄淑珍 | 狠狠鲁影院 | 色综合五月 | 啪啪免费网址 | 成人在线观看一区二区三区 | 狠狠爱天天干 | 欧美一区二区不卡视频 | 午夜电影福利网 | 国产精品视频在线播放 | 天天干夜夜干 | 天天干夜夜夜夜 | 网站免费在线观看 | youjizzxxxxx| 久久久久18| 国产精品无码av在线有声小说 | 国产视频久久久久久 | 成人a免费 | 欧美激情精品久久久久久蜜臀 | 日韩黄片一区二区三区 | 免费黄色片子 | 秋霞在线视频观看 | 日韩www视频 | 国产激情视频一区 | 草草影院在线观看 | 人人妻人人澡人人爽欧美一区双 | 欧美三级网| 少妇久久久久久被弄高潮 | 黄色网页免费在线观看 | 免费黄色av网址 | 夜夜操av| 欧美精品 在线观看 | 国产精品一区二区自拍 | 精品国产一区二区三区四 | 午夜性视频 | 91福利在线观看视频 | 久久视频免费看 | 36d大奶| 免费av免费看| 怡红院院av| 免费无码毛片一区二区app | 美女啪啪网址 | 国产精品国产三级国产专区52 | 韩日av | 国产精品无码久久久久高潮 | 免费av影视 | 日本一区二区三区电影在线观看 | 性色av网站 | 亚洲AV无码AV吞精久久中文版 | 免费拍拍拍网站 | 成人黄色大片 | 中文字幕在线视频一区二区 | 久久资源总站 | 99精品国产99久久久久久97 | 夫妻性生活黄色片 | 男人的天堂伊人 | 日韩成人av电影 | 97超碰人人在线 | 爽爽淫人 | 一级片免费在线观看 | 国产精品破处 | 亚洲熟区 | 男女无遮挡xx00动态图120秒 | 涩涩网站在线看 | 日韩不卡一区二区 | av在线日韩 | 亚洲伦理视频 | 久久久精品在线观看 | 蜜桃视频在线观看www | julia一区二区中文久久97 | 成人片在线看 | 亚洲国产精品成人综合色在线婷婷 | gogo人体做爰aaaa | 91成人在线观看喷潮 | 黄色特级视频 | 久久久香蕉视频 | 精品在线不卡 | 韩国av免费在线观看 | 色超碰 | www,超碰| 日韩欧美国产成人精品免费 | 久久99国产精品一区 | 中文字幕免费高清网站 | 69亚洲乱人伦| 国产精品5区 |