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​ a3​…an​,按照题目意思中位数为a⌊1+n2⌋a_{\lfloor \frac{1+n}{2}\rfloor}a⌊21+n​⌋​,我们那么中位数后面的数的个数为n−⌊1+n2⌋n-\lfloor \frac{1+n}{2}\rfloorn−⌊21+n​⌋意味着如果你选择一个数作为中位数那么一定要有n−⌊1+n2⌋n-\lfloor \frac{1+n}{2}\rfloorn−⌊21+n​⌋不小于它的数。

那么本题只需要每次选择第n−⌊1+n2⌋+1n-\lfloor \frac{1+n}{2}\rfloor+1n−⌊21+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}[11​11​]→[10​00​]→[10​10​]→[11​10​]→[00​00​]
每次考虑变换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+(m−1)×(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=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
要加油哦~

Codeforces Round #684 (Div. 2)相关推荐

  1. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  2. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  3. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  4. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  5. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  6. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  7. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  8. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  9. Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...

最新文章

  1. 谷歌最新提出无需卷积、注意力,纯MLP构成的视觉架构!网友:MLP is All You Need?
  2. git在公司内部的使用实践(转)
  3. MATLAB图形的修饰(选择图形窗口、线型点颜色、坐标轴、图形标注、栅格和图形叠加的设置)
  4. java metapojo_JavaBean,POJO,VO,DTO的区别和联系
  5. 5 Jedis 操作
  6. BZOJ4943 洛谷3823 UOJ315:[NOI2017]蚯蚓排队——题解
  7. how is Bean object created
  8. php编译 ftp,无需重新编译php加入ftp扩展的解决方法
  9. 【Trie】最长异或路径(ybtoj Trie-3/luogu 4551)
  10. vue项目使用sass-loader
  11. 获取当前ip_write_ip_tcl命令你用过吗?
  12. 学习HashMap的笔记
  13. readelf 显示文件完整段表
  14. HTML基础入门 第1天课堂笔记
  15. windows系统设置保护视力方法
  16. html空白键,空格键符号是什么?HTML中空格键符号有哪些?
  17. 要闻君说:华为与故宫携手共建智慧紫禁城;央视315曝光瞄准大数据黑市;华为官宣称自己也有操作系统了;美国夸口启动6G研发?...
  18. Linux下网络传输(模拟路由器)
  19. JavaScript 实现web随机数排序、整除、重置
  20. 欧阳修与梅尧臣:逢君伊水畔,一见已开颜

热门文章

  1. charts漏斗图表_ECharts漏斗图属性与实例介绍
  2. java什么是静态_什么是java静态
  3. 算法题目——省份数量(dfs,bfs)
  4. java 类的实例化没有属性值,java – JsonMappingException:无法实例化类型的值没有single-long-arg构造函数/工厂方法...
  5. [Java基础]字节缓冲流
  6. 高等数学上-赵立军-北京大学出版社-题解-练习5.2
  7. 汉诺塔 X HDU - 2511
  8. python递归实现_Python-递归实现
  9. Python--第4次平时作业
  10. cg word List4