Codeforces Round #684 (Div. 2)

A - Buy the String

要么全变成1要么全变成0要么一个都不改变,三种情况取最小。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int main()
{IO;int T=1;cin>>T;while(T--){int n;cin>>n;int a,b,c;cin>>a>>b>>c;string s;cin>>s;int res1=0;for(int i=0;i<n;i++){if(s[i]=='0') res1+=a;else res1+=b;}int res2=0;for(int i=0;i<n;i++){if(s[i]=='0') res2+=b+c;else res2+=b;}int res3=0;for(int i=0;i<n;i++){if(s[i]=='0') res3+=a;else res3+=a+c;}cout<<min(res1,min(res2,res3))<<'\n';}return 0;
}

B - Sum of Medians

数学题,取后面几个中位数即可
任意考虑一个不降序列a1a2a3…ana_1 \ a_2 \ a_3\dots a_na1 a2 a3an,按照题目意思中位数为a⌊1+n2⌋a_{\lfloor \frac{1+n}{2}\rfloor}a21+n,我们那么中位数后面的数的个数为n−⌊1+n2⌋n-\lfloor \frac{1+n}{2}\rfloorn21+n意味着如果你选择一个数作为中位数那么一定要有n−⌊1+n2⌋n-\lfloor \frac{1+n}{2}\rfloorn21+n不小于它的数。

那么本题只需要每次选择第n−⌊1+n2⌋+1n-\lfloor \frac{1+n}{2}\rfloor+1n21+n+1大的数作为每个数组的中位数即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1000010;
int n,k;
ll a[N];
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n>>k;for(int i=1;i<=n*k;i++) {a[i]=0;cin>>a[i];}sort(a+1,a+1+n*k);int m=(n+1)/2;int cnt=n-m;ll res=0;for(int i=n*k,j=1;i>=1,j<=k;j++,i-=cnt+1)res+=a[i-cnt];cout<<res<<'\n';}return 0;
}

C1 - Binary Table (Easy Version)

[1111]→[1000]→[1100]→[1110]→[0000]\begin{bmatrix}1 &1\\ 1&1\end{bmatrix}\to \begin{bmatrix}1 &0\\ 0&0\end{bmatrix}\to \begin{bmatrix}1 &1\\ 0&0\end{bmatrix} \to \begin{bmatrix}1 &1\\ 1&0\end{bmatrix} \to \begin{bmatrix}0 &0\\ 0&0\end{bmatrix}[1111][1000][1010][1110][0000]
每次考虑变换4个格子,每4个格子最多变换4次,我们会把4个数全部变成0,如果行列都是偶数,那么保证mn次操作内绝对能够全变成0
由于行列奇偶行可能导致出现某些元素重复变换导致nm次过不了(这也是更难的版本

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=110;
int n,m;
char tmp[N][N];
int g[N][N];
pii a[4];
bool st[4];
vector<pii> ans;
void work(pii a[])
{memset(st,0,sizeof st);int cnt=0;for(int i=0;i<4;i++){int x=a[i].first,y=a[i].second;cnt+=g[x][y];}if(cnt==1){int now=0;for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(now<2&&!g[x][y]){st[i]=1;ans.push_back({x,y});g[x][y]=1;now++;}}for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!st[i]&&g[x][y]){ans.push_back({x,y});g[x][y]=0;break;}}work(a);}else if(cnt==2){for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!g[x][y]){st[i]=1;ans.push_back({x,y});g[x][y]=1;}}for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!st[i]&&g[x][y]){ans.push_back({x,y});g[x][y]=0;break;}}work(a);}else if(cnt==3){for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(g[x][y]){ans.push_back({x,y});g[x][y]=0;}}}else if(cnt==4){for(int i=0;i<3;i++) {int x=a[i].first,y=a[i].second;if(g[x][y]){ans.push_back({x,y});g[x][y]=0;}}work(a);}else return;
}
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>tmp[i]+1;for(int i=1;i<=n;i++)   for(int j=1;j<=m;j++)   g[i][j]=tmp[i][j]-'0';for(int i=1;i<=n;i+=2)for(int j=1;j<=m;j+=2){if(i+1<=n&&j+1<=m)a[0]={i,j},a[1]={i+1,j},a[2]={i,j+1},a[3]={i+1,j+1};else if(i+1>n&&j+1<=m)a[0]={i,j},a[1]={i-1,j},a[2]={i,j+1},a[3]={i-1,j+1};else if(i+1<=n&&j+1>m)a[0]={i,j},a[1]={i+1,j},a[2]={i,j-1},a[3]={i+1,j-1};elsea[0]={i,j},a[1]={i-1,j},a[2]={i,j-1},a[3]={i-1,j-1};work(a);}cout<<ans.size()/3<<'\n';int cnt=0;for(auto t:ans){cnt++;cout<<t.first<<' '<<t.second<<' ';if(cnt%3==0) cout<<'\n';}ans.clear();}return 0;
}

C2 - Binary Table (Hard Version)

对于行列数是奇数可能导致nm操作不能搞的情况:其实我们只要首先把一行全部变成0(行数是奇数)或者一列全部变成0(列数是奇数),我们就能把操作次数控制在n2+1+m2+1+(m−1)×(n−1)\frac{n}{2}+1+\frac{m}{2}+1+(m-1)×(n-1)2n+1+2m+1+(m1)×(n1)次以内

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=110;
int n,m;
char tmp[N][N];
int g[N][N];
pii a[4];
bool st[4];
vector<pii> ans;
void work(pii a[])
{memset(st,0,sizeof st);int cnt=0;for(int i=0;i<4;i++){int x=a[i].first,y=a[i].second;cnt+=g[x][y];}if(cnt==1){int now=0;for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(now<2&&!g[x][y]){st[i]=1;ans.push_back({x,y});g[x][y]=1;now++;}}for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!st[i]&&g[x][y]){ans.push_back({x,y});g[x][y]=0;break;}}work(a);}else if(cnt==2){for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!g[x][y]){st[i]=1;ans.push_back({x,y});g[x][y]=1;}}for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(!st[i]&&g[x][y]){ans.push_back({x,y});g[x][y]=0;break;}}work(a);}else if(cnt==3){for(int i=0;i<4;i++) {int x=a[i].first,y=a[i].second;if(g[x][y]){ans.push_back({x,y});g[x][y]=0;}}}else if(cnt==4){for(int i=0;i<3;i++) {int x=a[i].first,y=a[i].second;if(g[x][y]){ans.push_back({x,y});g[x][y]=0;}}work(a);}else return;
}
void print()
{for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) cout<<g[i][j]<<' ';cout<<endl;}
}
int main()
{IO;int T=1;cin>>T;while(T--){cin>>n>>m;for(int i=1;i<=n;i++) cin>>tmp[i]+1;for(int i=1;i<=n;i++)   for(int j=1;j<=m;j++)   g[i][j]=tmp[i][j]-'0';if(n%2==0&&m%2==0){for(int i=1;i<=n;i+=2)for(int j=1;j<=m;j+=2){a[0]={i,j},a[1]={i+1,j},a[2]={i,j+1},a[3]={i+1,j+1};work(a);}}else if(n%2==0&&m%2!=0){for(int i=1;i<=n;i+=2){if(g[i][1]==0&&g[i+1][1]==0) continue;else if(g[i][1]==1&&g[i+1][1]==0){ans.push_back({i,1}); g[i][1]=1-g[i][1];ans.push_back({i,2}); g[i][2]=1-g[i][2];ans.push_back({i+1,2}); g[i+1][2]=1-g[i+1][2];}else if(g[i][1]==0&&g[i+1][1]==1){ans.push_back({i+1,1}); g[i+1][1]=1-g[i+1][1];ans.push_back({i,2}); g[i][2]=1-g[i][2];ans.push_back({i+1,2}); g[i+1][2]=1-g[i+1][2];}else {ans.push_back({i,1}); g[i][1]=1-g[i][1];ans.push_back({i+1,1}); g[i+1][1]=1-g[i+1][1];ans.push_back({i+1,2}); g[i+1][2]=1-g[i+1][2];}}for(int i=1;i<=n;i+=2)for(int j=2;j<=m;j+=2){a[0]={i,j},a[1]={i+1,j},a[2]={i,j+1},a[3]={i+1,j+1};work(a);}}else if(n%2!=0&&m%2==0){for(int j=1;j<=m;j+=2){if(g[1][j]==0&&g[1][j+1]==0) continue;else if(g[1][j]==1&&g[1][j+1]==0){ans.push_back({1,j});g[1][j]=1-g[1][j];ans.push_back({2,j});g[2][j]=1-g[2][j];ans.push_back({2,j+1});g[2][j+1]=1-g[2][j+1];}else if(g[1][j]==0&&g[1][j+1]==1){ans.push_back({1,j+1});g[1][j+1]=1-g[1][j+1];ans.push_back({2,j});g[2][j]=1-g[2][j];ans.push_back({2,j+1});g[2][j+1]=1-g[2][j+1];}else {ans.push_back({1,j});g[1][j]=1-g[1][j];ans.push_back({1,j+1});g[1][j+1]=1-g[1][j+1];ans.push_back({2,j});g[2][j]=1-g[2][j];}}for(int i=2;i<=n;i+=2)for(int j=1;j<=m;j+=2){a[0]={i,j},a[1]={i+1,j},a[2]={i,j+1},a[3]={i+1,j+1};work(a);}//print();}else{for(int i=1;i<=n;i+=2){int x=i+1;if(x>n) x-=2;if(g[i][1]==0&&g[x][1]==0) continue;else if(g[i][1]==1&&g[x][1]==0){ans.push_back({i,1}); g[i][1]=1-g[i][1];ans.push_back({i,2}); g[i][2]=1-g[i][2];ans.push_back({x,2}); g[x][2]=1-g[x][2];}else if(g[i][1]==0&&g[x][1]==1){ans.push_back({x,1}); g[x][1]=1-g[x][1];ans.push_back({i,2}); g[i][2]=1-g[i][2];ans.push_back({x,2}); g[x][2]=1-g[x][2];}else {ans.push_back({x,1}); g[x][1]=1-g[x][1];ans.push_back({i,1}); g[i][1]=1-g[i][1];ans.push_back({x,2}); g[x][2]=1-g[x][2];}}for(int j=2;j<=m;j+=2){int y=j+1;if(y>m) y-=2;if(g[1][j]==0&&g[1][y]==0) continue;else if(g[1][j]==1&&g[1][y]==0){ans.push_back({1,j});g[1][j]=1-g[1][j];ans.push_back({2,j});g[2][j]=1-g[2][j];ans.push_back({2,y});g[2][y]=1-g[2][y];}else if(g[1][j]==0&&g[1][y]==1){ans.push_back({1,y});g[1][y]=1-g[1][y];ans.push_back({2,j});g[2][j]=1-g[2][j];ans.push_back({2,y});g[2][y]=1-g[2][y];}else {ans.push_back({1,j});g[1][j]=1-g[1][j];ans.push_back({2,j});g[2][j]=1-g[2][j];ans.push_back({1,y});g[1][y]=1-g[1][y];}}//print();for(int i=2;i<=n;i+=2)for(int j=2;j<=m;j+=2){a[0]={i,j},a[1]={i+1,j},a[2]={i,j+1},a[3]={i+1,j+1};work(a);}}cout<<ans.size()/3<<'\n';int cnt=0;for(auto t:ans){cnt++;cout<<t.first<<' '<<t.second<<' ';if(cnt%3==0) cout<<'\n';}ans.clear();}return 0;
}

这模拟就离谱好吧~~

写了4题太晚了(希望不被fst,就没有在往后看

E. Greedy Shopping

今天补了一下E. Greedy Shopping
要加油哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊如何设计千万级吞吐量的.Net Core网络通信!

作者&#xff1a;大石头时间&#xff1a;2018-10-26 晚上 20:00地点&#xff1a;QQ群-1600800内容&#xff1a;网络通信&#xff0c;网络库使用方式网络库设计理念&#xff0c;高性能要点介绍首先看下面这张很具有代表性的图&#xff0c;2018年5月份做的测试。当时单服务器得到…

2020牛客国庆集训派对day2 AKU NEGARAKU

来源&#xff1a;牛客网&#xff1a; 题目描述 1st Academy is an international leadership training academy based in Kuala Lumpur. Every year, the company trains thousands of people to be supplied to companies around the world. To be fair amongst all the tra…

P5540-[BalkanOI2011]timeismoney|最小乘积生成树【最小生成树,凸壳】

正题 题目链接:https://www.luogu.com.cn/problem/P5540 题目大意 给出nnn个点mmm条边边权是一个二元组(ai,bi)(a_i,b_i)(ai​,bi​)&#xff0c;求出一棵生成树最小化 (∑e∈Tae)(∑e∈Tbe)(\sum_{e\in T}a_e)\times(\sum_{e\in T}b_e)(e∈T∑​ae​)(e∈T∑​be​) 的情况下…

【数论】能量采集(P1447)

正题 P1447 题目大意 给出n,m&#xff0c;求2∑i1n∑j1m(gcd(i,j)−1)nm2\times \sum_{i1}^n\sum_{j1}^m(gcd(i,j)-1)n\times m2i1∑n​j1∑m​(gcd(i,j)−1)nm 解题思路 2∑i1n∑j1m(gcd(i,j)−1)nm2∑i1n∑j1mgcd(i,j)−nm2\times \sum_{i1}^n\sum_{j1}^m(gcd(i,j)-1)n\tim…

codeforces1440 E. Greedy Shopping

昨天晚上做完4题还有30分钟&#xff0c;感觉太晚了就没继续写&#xff0c;不过看了下E题感觉是一个线段树题目&#xff0c;今天中午看了看发现就是一个线段树上递归的询问问题&#xff0c;不过我之前没写过但是靠着日益强大的乱写能力竟然水出来了~~ E. Greedy Shopping 不难…

MonkeyFest2018 微软最有价值专家讲座

MonkeyFest2018微软最有价值专家讲座Monkey Fest 是一个一年一度由全球Microsoft Xamarin跨平台开发者发起的全球性社区活动&#xff0c;主要是推广在云、人工智能、大数据、移动开发等技术。本次活动同时在新加坡&#xff0c;美国&#xff0c;日本&#xff0c;加拿大&#xff…

2020牛客国庆集训派对day2 MATRIX MULTIPLICATION CALCULATOR

MATRIX MULTIPLICATION CALCULATOR 题意&#xff1a; 求两矩阵相乘 题解&#xff1a; 应该都学过把。。。矩阵相乘 矩阵相乘的前提是两个矩阵的列等于另一个矩阵的行 也就是cij∑aik*bkj 原理很简单注意格式&#xff0c;但是我遇到一个玄学问题。。。 就是卡格式了。。我人…

P5369-[PKUSC2018]最大前缀和【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5369 题目大意 一个数列aaa的权值定义为max{∑i1kai}(k∈[1,n])max\{\sum_{i1}^ka_i\}(k\in[1,n])max{∑i1k​ai​}(k∈[1,n]) 给出nnn个数字&#xff0c;求它们所有排列的权值和 1≤n≤201\leq n\leq 201≤n≤20 解题思路 …

【数论】疯狂 LCM(P1891)

正题 P1891 题目大意 有T个询问&#xff0c;每个询问给出n&#xff0c;求∑i1nlcm(i,n)\sum_{i1}^nlcm(i,n)i1∑n​lcm(i,n) 解题思路 ∑i1nlcm(i,n)\sum_{i1}^nlcm(i,n)i1∑n​lcm(i,n) n∑i1ni/gcd(i,n)n\sum_{i1}^ni/gcd(i,n)ni1∑n​i/gcd(i,n) n∑d∣n1d∑i1ni[gcd(i,n)…

codeforces1440 D. Graph Subset Problem

D. Graph Subset Problem jiangly代码%%% 感谢大佬对jly代码的解释 先贪心找一下clique&#xff0c;如果某个点的度数是k-1&#xff0c;那就爆搜他的相邻节点组成clique&#xff0c;看看是不是完全子图。如果不是由于这个点的度数小于k&#xff08;若完全子图中由此点只能是c…

P3911 最小公倍数之和

最小公倍数之和 题目描述&#xff1a; 对于A1&#xff0c;A2…AN&#xff0c;求 ∑i1N∑i1Nlcm(Ai,Aj)\sum_{i1}^{N}\sum_{i1}^{N} lcm(Ai,Aj)∑i1N​∑i1N​lcm(Ai,Aj) 题解&#xff1a; 莫比乌斯反演&#xff0c;直接强推一波 推导过程我也是一知半解&#xff0c;大体如图…

终于明白了 C# 中 Task.Yield 的用途

最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博文时发现文中代码中的一种 Task 用法之前从未见过&#xff0c;在网上看了一些资料后也是云里雾里不知其解&#xff0c;很是困扰。今天在程序员节的大好日子里终于想通了&#xff0c;于是写下这篇…

Wannafly挑战赛23F-计数【原根,矩阵树定理,拉格朗日插值】

正题 题目链接:https://ac.nowcoder.com/acm/contest/161/F 题目大意 给出nnn个点的一张图&#xff0c;求它的所有生成树中权值和为kkk的倍数的个数。输出答案对ppp取模 1≤n,k≤100,1≤m≤104,p∈[2,109]∩Pri1\leq n,k\leq 100,1\leq m\leq 10^4,p\in[2,10^9]\cap Pri1≤n,…

【数论】Crash的数字表格 / JZPTAB(P1829)

正题 P1829 题目大意 给出n,m&#xff0c;求∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) 解题思路 ∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) ∑d1nd∑i1n/d∑j1m/di∗j[gcd(i,j)1]\sum_{d1}^nd\sum_{i1}^{n/d}…

2018-2019 ACM-ICPC, Asia Seoul Regional Contest——A - Circuits

A - Circuits 不难发现x坐标根本没用&#xff0c;只需要存储y坐标。 题目所求的两条直线y1ay_1ay1​a&#xff0c;y2b(a<b)y_2b\ (a<b)y2​b (a<b) 我们枚举y2by_2by2​b这条线&#xff0c;这条线一定可以是矩形的边界&#xff0c;于是我们扫描矩形边界差分计算当前…

aspnet core 2.1中使用jwt从原理到精通一

原理jwt对所有语言都是通用的&#xff0c;只要知道秘钥&#xff0c;另一一种语言有可以对jwt的有效性进行判断;jwt的组成&#xff1b;Header部分Base64转化.Payload部分Base64转化.使用HS256方式根据秘钥对前面两部分进行加密后再Base64转化&#xff0c;其中使用的hs256加密是h…

2020牛客国庆集训派对day3 Points

Points 题目描述 Jack and Rose are playing games after working out so many difficult problems. They together drew a “Haizi” tree to show their collaboration. “Haizi” tree is the same as the tree defined in graph theory. Now Jack would like to count t…

CF1137F-Matches Are Not a Child‘s Play【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/CF1137F 题目大意 给出nnn个点的一棵树&#xff0c;第iii个点权值为iii。 一棵树的删除序列定义为每次删除编号最小的叶子并将其加入序列末尾。 要求支持 修改一个点的权值为一个比目前所有权值都要大的一个值询问一个点在…

【数论】数表(P3312)

正题 P3312 题目大意 给出n,m,a&#xff0c;求∑i1n∑j1mσ(gcd(i,j))[σ(gcd(i,j))≤a]\sum_{i1}^n\sum_{j1}^m\sigma(gcd(i,j))[\sigma(gcd(i,j))\leq a]i1∑n​j1∑m​σ(gcd(i,j))[σ(gcd(i,j))≤a] 解题思路 先不考虑a的条件限制 ∑i1n∑j1mσ(gcd(i,j))\sum_{i1}^n\su…

codeforces1452 E. Two Editorials

E. Two Editorials 官方题解 首先将每个参赛者按照区间中点排序&#xff0c;那么前一段参赛者听第一个人&#xff0c;而后一段听第二个人的。 预处理数组su[j]表示j→mj\to mj→m这些参赛者能被“覆盖”最多“贡献” 只需要枚举第一个人演讲的区间&#xff0c;再考虑前多少参赛…