Codeforces 1291B - Array Sharpening
题目大意:
一个数列是尖锐的
当且仅当存在一个位置k使得 a[1]<a[2]<a[3]<...<a[k] 且 a[k]>a[k+1]>a[k+2]>...>a[n]
现在你可以任意让某些严格为正整数的元素执行操作使它们的值 -1
问能不能通过这么一系列操作去锐化这个数组(也可以不操作)
注意,严格递增或者严格递减的数组也是尖锐的(k可以为1或者n)
解题思路:
要锐化一个数组
只需要让他能够满足完全递增、完全递减、先递增后递减即可
因为任意元素都能执行任意次-1
所以不妨直接化成最直观的答案
即最后化成类似 0 1 2 3 ... 3 2 1 0 的样式
如果数组元素个数为奇数,如上可满足
但是如果为偶数,中间两位不能相同
根据上方的最简样式,可以得到,从前往后一直到k位置,数组是递增的
从后往前看到第k个位置,数组还是递增的
所以不妨去循环判断每一个元素是否满足条件
即从前往后,i=0~n-1,判断每一位是否满足ar[i]>=i
如果不满足,说明从前往后的递增断在了这个位置
用变量pl记录这个位置
从后往前,i=n-1~0,判断每一位是否满足ar[i]>=n-i+1
如果不满足,说明从后往前递增断在了这个位置
用变量pr记录这个位置
(注意完全递增递减的情况下对pl和pr的特殊处理)
最后,判断pl>=pr是否成立,成立则说明数组可以锐化,否则,pl到pr之间这一段无法进行锐化
#include<bits/stdc++.h>
using namespace std;
int ar[];
void solve(){
int N,i,tmp,pl,pr;
bool flag=true;
cin>>N;
if(N==)
cin>>ar[];
else if(N==){
cin>>ar[]>>ar[];
if(ar[]+ar[]==)
flag=false;
}
else if(N>=){
for(i=;i<N;i++)
cin>>ar[i];
for(i=;i<N;i++)
if(ar[i]<i){
pl=i-;
break;
}
if(i==N)
pl=N-;
for(i=N-;i>=;i--)
if(ar[i]<N-i-){
pr=i+;
break;
}
if(i==-)
pr=;
if(pl<pr)
flag=false;
}
cout<<(flag?"Yes\n":"No\n");
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
int T;cin>>T;while(T--)
solve(); return ;
}
Codeforces 1291B - Array Sharpening的更多相关文章
- Codeforces Round #616 (Div. 2) B. Array Sharpening
t题目链接:http://codeforces.com/contest/1291/problem/B 思路: 用极端的情况去考虑问题,会变得很简单. 无论是单调递增,单调递减,或者中间高两边低的情况都 ...
- Codeforces 797E - Array Queries
E. Array Queries 题目链接:http://codeforces.com/problemset/problem/797/E time limit per test 2 seconds m ...
- Codeforces 1108E2 Array and Segments (Hard version) 差分, 暴力
Codeforces 1108E2 E2. Array and Segments (Hard version) Description: The only difference between eas ...
- CodeForces 300A Array
http://codeforces.com/problemset/problem/300/A 题意 :给你n个数字,让你分成3组,第一组各个数之积要小于0,第二组要大于0,第三组要等于0,符合要求的答 ...
- 网络流(最大流):CodeForces 499E Array and Operations
You have written on a piece of paper an array of n positive integers a[1], a[2], ..., a[n] and m goo ...
- Codeforces 1108E2 Array and Segments (Hard version)(差分+思维)
题目链接:Array and Segments (Hard version) 题意:给定一个长度为n的序列,m个区间,从m个区间内选择一些区间内的数都减一,使得整个序列的最大值减最小值最大. 题解:利 ...
- Codeforces 623B Array GCD
Array GCD 最后的序列里肯定有a[1], a[1]-1, a[1]+1, a[n], a[n]-1, a[n]+1中的一个,枚举质因子, dp去check #include<bits/s ...
- CodeForces 57C Array 组合计数+逆元
题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数 ...
- codeforces A. Array 解题报告
题目链接:http://codeforces.com/problemset/problem/300/A 题目意思:给出n个数,将它们分成三批:1.所有数相乘的结果 < 0 2.所有数相乘的 ...
随机推荐
- Service IP 原理【转】
Service Cluster IP 是一个虚拟 IP,是由 Kubernetes 节点上的 iptables 规则管理的. 可以通过 iptables-save 命令打印出当前节点的 iptable ...
- HomePod即将发售,但硬件不再是苹果的救命稻草
流年不利的苹果,在多个维度都遭到了重创.除了与高通纠缠不清的专利官司外,iPhone销量还直线下滑并影响到营收.最终,苹果股价.市值都处于暴跌态势.面对内外夹击的不利局面,苹果信奉多年的"封 ...
- @Autowired 和 @ Resource 的区别
转 都是用来装配Bean的注解.都可以写在字段上,或写在setter方法上. @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以 ...
- db.mysql.主从同步实验
实验环境:windows10(1607).mysql5.7.16 (for windows zip) 主库(端口3306)配置文件: [mysqld] #数据库根目录 basedir = D:\my ...
- Day4 - G - 确定比赛名次 HDU - 1285
有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...
- 001.Delphi插件之QPlugins,一个最简单的插件
安装QPlugins里面的Demo,复制粘贴着写了一个最简单的插件,看看好不好用 EXE代码如下: unit Main_Frm; interface uses Winapi.Windows, Wina ...
- 开发者说 | 云+AI赋能心电医疗领域的应用
以"医工汇聚 智竞心电"为主题的首届中国心电智能大赛自2019年1月1日启动全球招募起,共吸引总计545支来自世界各地的医工结合团队,308支团队近780名选手通过初赛资格审查,经 ...
- DevOps 教程
DevOps是一种研发文化,它促进开发团队和运维团队之间更好地协作,以自动化和可重复的方式,更快地将代码部署到生产环境中.DevOps是development和operations两个单词的组合. D ...
- 不能安装64位office提示已安装32位如何处理
不能安装64位office提示已安装32位如何处理? 1 2 3 4 5 6 当你遇到提示说[无法安装64位版本的office,以为在您的PC上找一下32位程序......]时如果你还想安装64位 ...
- IP地址 网络地址 子网掩码
提纲 (1)IP地址 (2)网络地址 (3)子网掩码 IP地址=网络地址+主机地址,图1中的IP地址是192.168.100.1,这个地址中包含了很多含义.如下所示:网络地址(相当于街道地址) ...