Codeforces Global Round 9 A-D题解
文章目录
- A - Sign Flipping
- B - Neighbor Grid
- C - Element Extermination
- D - Replace by MEX
A - Sign Flipping
题意:问你至少有(n-1)/ 2个a[i+1]-a[i]大于等于0,至少有(n-1)/ 2个a[i+1]-a[i]小于等于0,你可以变化每个数的正负。
题解:这样的话就可以正负交替输出了。
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 110;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;int a[maxn];
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;i++) scanf("%d",&a[i]);for(int i=0;i<n;i++){if(i%2==0){printf("%d ",abs(a[i]));}else printf("%d ",-abs(a[i]));}cout<<endl;}return 0;
}
B - Neighbor Grid
题解:看一张图你就懂了,只需要判断一下输入进去的数有没有超过每个格子的最大值,然后输出即可(临两条边输出2,临一条边输出3,不临边输出4)
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;vector<int> v[maxn];int main()
{int t;cin>>t;while(t--){for(int i=0;i<maxn;i++) v[i].clear();int n,m;cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){int x;scanf("%d",&x);v[i].push_back(x);}}bool flag=true;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if((i==0&&j==0)||(i==0&&j==m-1)||(i==n-1&&j==0)||(i==n-1&&j==m-1)){if(v[i][j]>2) flag=false;}else if(i==0||i==n-1){if(v[i][j]>3) flag=false;}else if(j==0||j==m-1){if(v[i][j]>3) flag=false;}else {if(v[i][j]>4) flag=false;}}}if(flag==false)cout<<"NO"<<endl;else{cout<<"YES"<<endl;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if((i==0&&j==0)||(i==0&&j==m-1)||(i==n-1&&j==0)||(i==n-1&&j==m-1)){printf("2 ");}else if(i==0||i==n-1){printf("3 ");}else if(j==0||j==m-1){printf("3 ");}else {printf("4 ");}}printf("\n");}}}return 0;
}
C - Element Extermination
题解:判断第一个数是否小于最后一个数
证明如下(并不规范):每次在除首末两段的中间,找出最大最小值,把最大值前边的和最小值后边的都删了,重叠就对边取一个,然后用边界的值删掉它,重复这个过程即可。
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 3e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;int a[maxn];int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=0;i<n;i++) scanf("%d",&a[i]);if(a[0]<a[n-1]) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;}
D - Replace by MEX
题解:构造一个0 1 2 3…n-1的数列即可。
特殊情况:如果mex=n的话,我们随便找一个a[i]!=i的地方将mex先暂时放入,每次暴力查找mex,判断是否符合条件即可。
注意:输出的结果是数组下标+1(这里数组下标指的是从0开始)
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1010;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;
}
int n;
int a[maxn];
vector <int> ans;
bool visited[maxn];
int ifind(){memset(visited,false,sizeof(visited));for(int i=0;i<n;i++) visited[a[i]]=true;for(int i=0;i<=n;i++){if(!visited[i]) return i;}
}
bool check(){for(int i=0;i<n;i++){if(a[i]!=i) return false;}return true;
}
int main()
{int t;cin>>t;while(t--){cin>>n;ans.clear();for(int i=0;i<n;i++){scanf("%d",&a[i]);}while(!check()){int mex=ifind();if(mex==n){for(int i=0;i<n;i++){if(a[i]!=i){a[i]=mex;ans.push_back(i+1);break;}}}else{ans.push_back(mex+1);a[mex]=mex;}}printf("%d\n",ans.size());for(int i=0;i<ans.size();i++){printf("%d ",ans[i]);}cout<<endl;}return 0;
}
Codeforces Global Round 9 A-D题解相关推荐
- Codeforces Global Round 24 A~D 题解
说明 题目链接 就做出AB题,C题想了一个半小时.和我同场竞技的两位选手都做出了C,还是我太菜了555~ A - Doremy's Paint 答案等价于求包含不同元素个数最大的区间,就是全区间. # ...
- Codeforces Global Round 1
Codeforces Global Round 1 题解:The Editorial of the First Codeforces Global Round A:其实mod 2计算一下就行了 B:删 ...
- Codeforces Global Round 1 晕阙记
Codeforces Global Round 1 晕阙记 我做这场比赛的时候晕得要死.做这三道题做太久了,rating涨不起来啊! A 如果愿意的话你可以看做是膜2意义下的运算,写快速幂等各种膜运算 ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集
传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau+av≥x ...
- 【Codeforces Global Round 23】B. Rebellion
Codeforces Global Round 23中B. Rebellion Codeforces比赛记录 文章目录 题目链接: 一.B. Rebellion 题目意思: 上思路: 总结 B. Re ...
- Codeforces Global Round 4-D. Prime Graph(伯特兰-切比雪夫定理)
题目:Codeforces Global Round 4-D. Prime Graph 题意:给出n(顶点的个数),要求所得图满足: 1.无平行边和自环 2.边的总数是个质数 3.每个点的度(也就是点 ...
- codeforces global round 23
constest :codeforces global round 23 contest time:2022.10.16 contest grade: 2800 contest rating chan ...
- Codeforces Global Round 8 C. Even Picture 题解[巧妙法构造题]
C. Even Picture 题目大意:让你构造一个连通图,图中有k个灰点其中n个点4面都是灰点,(k-n)个点周围2个点是灰点 我们设最上面的为(1,1)点就可以了 ps:exactly:只有,其 ...
最新文章
- html5有foreach吗,JavaScript中的map()和forEach()有什么区别?
- petshop详解之一:PetShop的系统架构设计
- android百度地图标方向,Android百度地图之方向感应和模式更改
- 诺基亚2亿欧元建越南新工场
- 五、线程优先级和守护线程
- python 计算曲线面积_微积分到底有多神?能完成多少不可思议,难以测量的计算?他简直强大的让人害怕!...
- 软件项目管理 2.1.项目立项
- 贴片元器件焊接经验及总结
- angular自定义指令 directive
- 单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法
- unity3d学习笔记-动画(2.控制动画与Animator Controller)
- 【渝粤题库】广东开放大学 工程经济 形成性考核
- C语言 编程实现简单的计算器功能
- 数据标准是什么?企业如何做好数据管理?
- Excel快速入门01
- 检查是否存在满足条件的数字组合
- 数据结构 Huffman树(霍夫曼树、哈夫曼树)
- 3D游戏编程与设计作业一
- python独立网站教程_python从零到独立建设网站系列教程之基础知识篇(二)
- Sping、SpringMVC框架教程
热门文章
- ACMNO.11 一个数如果恰好等于它的因子之和,这个数就称为“完数“。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数“。 编程序找出N之内的所有完数,并按下面格式输出其因子
- JavaEE——JavaScript
- AC3 bit allocation
- 看看Spring的源码(一)——Bean加载过程
- android中常见的内存泄漏和解决的方法
- shell 读取配置文件
- LeetCode——Rotate Image(二维数组顺时针旋转90度)
- Android Handler 深入学习(1)
- linux发行版 以及 包管理方式
- 交换机和路由器有哪些区别?