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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #747 (Div. 2) 个人题解

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

上藍了!

A. Consecutive Sum Riddle

題意

給一個nnn,你需要構造一個整數區間[L,R][L,R][L,R],其和等于nnn
分析

[?n+1,n][-n+1,n][?n+1,n]即可。

B. Special Numbers

題意

給出一個 nnn , 另一個數 mmm 如果可以表示成 nnn 的不同冪次之和,則稱 mmm 是 special 的。現在給出 nnn, 將所有 special 的數升序排序,問第 kkk 個數是多少。

分析

假如一個數是 n0+n1+n4n^0+n^1+n^4n0+n1+n4 , 我們不妨用二進制表示,轉化為 10011(2)10011_{(2)}10011(2)? ,也就是說現在給了一個二進制的數,但是其每個位的權值要乘以 nnn. 那么第 kkk 個數表示成二進制自然就是 k(2)k_{(2)}k(2)? 本身了,模擬快速冪求即可。

代碼

#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 #define pii pair<int, int> using namespace std; const int mod = 1e9 + 7; signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--) {int n, k;cin >> n >> k;int ans = 0;int x = 1;while(k) {if(k & 1) {ans = (ans + x) % mod;}x = (x * n) % mod;k >>= 1;}cout << ans << endl;}return 0; }

C. Make Them Equal

題意

給一串字符串,你要通過一些操作把它的所有字符全部變成 ccc

選擇一個數字 x,1≤x≤nx, 1\leq x\leq nx,1xn. 字符串中所有下標 iiiimodx≠0i\ mod\ x \neq 0i?mod?x?=0 的下標都將被替換為 ccc.

分析

首先貪心考慮,如果 xxxnnn,那么 [1,n?1][1,n-1][1,n?1] 必定全部都可以替換,接下來再取個 n?1n-1n?1,把 nnn 替換即可。故不管怎樣,答案最多為2.

所以只需要考慮答案為1的情況了。這里我們可以直接暴力統計所有不等于 ccc 的下標的因數,如果不同因數的個數小于 nnn ,說明一定可以找到一個 xxx 使得所有字符為 ccc.

代碼

#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 #define pii pair<int, int> 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 = 3e5 + 10; bool v[maxn]; signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--) {int n;string s; char c;cin >> n;s += '#';string tmp;cin >> c;cin >> tmp;s += tmp;bool flag = 1;vector<int> pos;for (int i = 1; i <= n; ++i) v[i] = 0;for (int i = 1; i <= n; ++i) if(s[i] != c) {flag = 0; pos.pb(i);}if(flag) {cout << 0 << endl;continue;}int cnt = 0;for (auto &i : pos) {if(!v[i]) v[i] = 1, cnt++;for (int j = 1; j * j <= i; ++j) {if(i % j == 0 && !v[j]) v[j] = 1, cnt++;if(i % j == 0 && !v[i / j]) v[i / j] = 1, cnt++;}}if (cnt == n) {cout << 2 << endl;cout << n << ' ' << n - 1 << endl;}else {cout << 1 << endl;for (int i = 1; i <= n; ++i) if(!v[i]) {cout << i << endl;break;}}}return 0; }

D. The Number of Imposters

題意

有一張 nnn 個節點的圖,每條邊都是單向邊 (i,j,c)(i,j,c)(i,j,c) 表示第 iii 個人說第 jjj 個人是個說謊的人/說實話的人。且如果一個人是說謊的人,那他說的一定是假,否則一定是真。

問這張圖最多有幾個說實話的人。

分析

單向圖其實可以直接轉化為無向圖,這是等價的。 aaabbb 是假的,其實和 bbbaaa 假是一樣的,可以列真值表證明。

而且,只要連通圖中有一個人的真假確定了,其他人的真假一定也確定了。

所以,轉化為無向圖之后再記憶化搜索就可以了,對每個連通塊進行 dfs ,dp[i][0]dp[i][0]dp[i][0] 表示第 iii 人說謊的情況下他和他的子節點中說實話的人有多少;dp[i][1]dp[i][1]dp[i][1] 表示 iii 說實話的情況下的答案。

注意矛盾的情況,搜索過程中每個節點要保存自己的當前真假情況,這樣在子節點指回祖先節點時判斷一下矛不矛盾就可以了。

所以對每個連通塊搜索的根節點,假設其為實話或者謊話,分別 dfs 兩次,取最大值即可。


其實也可以寫的更簡單的,但是昨天越寫越奇怪,有點沒穩住,思路太亂了。

不僅思路較為冗雜,代碼也特別丑qwq

代碼

#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 #define pii pair<int, int> 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 + 10; int n, m; int dp[maxn][2]; // i號節點說謊/不說謊的答案 vector<pii> e[maxn]; bool v[maxn]; bool flag = 0; int fa[maxn]; int st[maxn]; // 當前的status 1說謊,2不說謊 vector<int> tmp; void dfs(int i, int l) { // l:0說謊,1不說謊tmp.pb(i);st[i] = l + 1;for (auto &x : e[i]) {if(st[x.first]) {if(l == 1 && x.second == 0 && st[x.first] == 2){flag = 1;}else if(l == 1 && x.second == 1 && st[x.first] == 1) {flag = 1;}else if(l == 0 && x.second == 1 && st[x.first] == 2) {flag = 1;}else if(l == 0 && x.second == 0 && st[x.first] == 1) {flag = 1;}continue;}if(l == 1 && x.second == 0) {dfs(x.first, 0);dp[i][1] += dp[x.first][0];}else if(l == 1 && x.second == 1) {dfs(x.first, 1);dp[i][1] += dp[x.first][1];}else if(l == 0 && x.second == 0) {dfs(x.first, 1);dp[i][0] += dp[x.first][1];}else {dfs(x.first, 0);dp[i][0] += dp[x.first][0];}} } signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;cin >> t;while(t--) {cin >> n >> m;flag = 0;fors(i, 1, n) {dp[i][0] = 0, dp[i][1] = 1;fa[i] = i;v[i] = 0;st[i] = 0;}int l, r; string s;while(m--) {cin >> l >> r >> s;if(s[0] == 'i') {e[l].pb({r, 0});e[r].pb({l, 0});}else {e[l].pb({r, 1});e[r].pb({l, 1});}}int ans = 0;for (int i = 1; i <= n; ++i) {if(!st[i]) {tmp.clear();dfs(i, 0);for(auto &x : tmp) st[x] = 0;dfs(i, 1);ans += max(dp[i][0], dp[i][1]);if(flag) break;}}if(flag) cout << -1 << endl;else cout << ans << endl;fors(i, 1, n) e[i].clear();}return 0; }

E1. Rubik’s Cube Coloring (easy version)

這種E1還是放Div. 3去吧,能當A做了,我不好說。

屬于是送經驗了(

#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 #define pii pair<int, int> 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 mod = 1e9 + 7; int fpow(int x, int y) {int ans = 1;while(y) {if(y & 1) {ans = (ans * x) % mod;}x = (x * x) % mod;y >>= 1;}return ans; } signed main() {DDLC_ESCAPE_PLAN_FAILED;int t;t = 1;while(t--) {int k;cin >> k;int p = (1LL << k) - 1LL;cout << (fpow(4, p - 1LL) * 6LL) % mod << endl;}return 0; }

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕在线播放日韩 | 午夜中出| 日韩欧美国产视频 | 超碰免费成人 | 1024手机看片日韩 | 久草最新网址 | 91视频在线网站 | 欧美高潮视频 | 色香蕉av | 亚洲制服另类 | 精品99久久 | 无码人妻一区二区三区在线 | 亚洲欧美激情另类 | 国产一区二区三区四区精 | 久久中字 | 欧美性视频播放 | 69久久夜色精品国产69 | 黄a免费网络 | 国产成人免费av | 91老司机在线 | 激情综合视频 | 操欧美女人 | 亚洲第一视频在线观看 | 四季av一区二区夜夜嗨 | 青青草娱乐视频 | 中文有码视频 | 久久丫精品国产亚洲av不卡 | 清草视频 | 久久久久不卡 | 欧美视频在线不卡 | 日韩一级完整毛片 | h片网站在线观看 | 国产一区免费观看 | 国产成人av在线 | 久久大陆 | 不卡中文字幕在线 | 国产精品久久久久久一区二区 | 清纯唯美亚洲 | 超碰成人网 | 国产精品女人精品久久久天天 | 国产美女精品在线 | 欧美日韩久久久 | 欧美a级网站| 草草影院最新网址 | 国产精品刘玥久久一区 | 夜夜摸夜夜爽 | 亚洲国产日本 | 黄色片子网站 | 亚洲国产精品无码久久久久高潮 | 国产精彩视频一区二区 | 超碰97国产| 可以免费看污视频的网站 | 国产精品久久福利 | 亚洲欧洲日韩在线 | 偷偷操网站 | 日韩av一区二区在线观看 | 97色爱| 欧美123区 | av私库在线观看 | 婷婷亚洲激情 | 欧美性极品少妇xxxx | 久久国产热 | 久久狠狠婷婷 | 日韩欧美中出 | www色天使| 色哥网| 99国产精品无码 | 国产经典一区二区三区 | 日韩在线不卡 | 欧美一级不卡视频 | 五月激情在线观看 | 成人免费看高清电影在线观看 | 亚洲成人系列 | 亚洲乱码中文字幕 | 性高潮久久久久 | 一级做a爰| 日韩在线观看视频网站 | 影音先锋男人资源网站 | 午夜久久久久久噜噜噜噜 | 偷拍一区二区三区四区 | 青娱乐超碰在线 | 成年人网站黄色 | 伊人久久久久噜噜噜亚洲熟女综合 | 婷婷导航 | 男人添女人下部高潮视频 | 伊人久久一区二区三区 | 九九热这里有精品 | 欧美精品国产动漫 | 国产亚洲成人精品 | 97超碰97| 天堂在线资源8 | 欧美人妻精品一区二区免费看 | 国产美女视频免费观看下载软件 | 午夜一二三 | 日本色中色 | 亚洲精品久久久久 | 亚洲天堂伦理 | 日韩av在线一区二区 | 国产精品国产三级国产播12软件 |