Codeforces Round #637 (Div. 2)
作者:互联网
A. Nastya and Rice
签到题
判断谷物总重量的范围和包重量范围是否有交叉
#include<bits/stdc++.h>
using namespace std;
int t,n,a,b,c,d;
int main(){
cin>>t;
while(t--){
cin>>n>>a>>b>>c>>d;
if(n*(a+b)<c-d || n*(a-b)>c+d){
puts("No");
}
else puts("Yes");
}
return 0;
}
B. Nastya and Door
题意
在[l,l+k-1]范围内寻找山峰的个数最多且l最小
使用前缀和统计[1,i]的山峰个数,然后枚举比较得山峰个数最多且l最小的范围
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+100;
ll t,n,k,a[N],b[N];
int main(){
cin>>t;
while(t--){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
int l=-1,ans=-1,j=0;
for(int i=2;i<=n;i++){
if(a[i]>a[i-1]&&a[i]>a[i+1]&&i!=n){
b[i]=b[i-1];
b[i+1]=b[i-1]+1;
i++;
}
else b[i]=b[i-1];
}
for(int i=1;i+k-1<=n;i++){
if(b[i+k-1]-b[i+1]>ans){
ans=b[i+k-1]-b[i+1];
l=i;
}
}
cout<<ans+1<<' '<<l<<'\n';
}
return 0;
}
C. Nastya and Strange Generator
题意比题难系列:
由题中所给规则向一个空数组中添加数,问题中所给的数组是否满足该规则
添加规则
r数组本身为空,r[i]表示自身及右边第一个为空的位置
count数组如果该位置已经被选过置为0,没被选过表示在r数组中出现的次数
假设n=5,r[]={1,2,3,4,5},count[]={1,1,1,1,1}
1.向里面添加1,count值都相等,1的位置可以随便选,假设选在3,此时r[]={1,2,4,4,5},count[]={1,1,0,2,1}
2.向里面添加2,count[4]最大,所以2的位置选在4,此时r[]={1,2,5,5,5},count[]={1,1,0,0,3}
3.向里面添加3,count[5]最大,所以3的位置选在5,此时r[]={1,2,* ,* ,* },(* 表示不存在),count[]={1,1,0,0,0}
4.向里面添加4,count[1]= =count[2],所以选1或2都可以,假设选在1,r[]={2,2,* ,* ,* ,},count[]={0,2,0,0,0};显而易见5的位置在第二个
最后再结合题目最后所给步骤,可以得出 a[i+1]= =a[i]+1,或a[i+1]<a[i]
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int t,n,a[N];
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
bool flag=0;
int l=a[1];
for(int i=2;i<=n;i++){
if(a[i]>l){
if(a[i]!=a[i-1]+1){
flag=1;
break;
}
else l=a[i];
}
else l=a[i];
}
if(!flag) puts("Yes");
else puts("No");
}
return 0;
}
标签:count,puts,637,int,cin,Codeforces,添加,Div,else 来源: https://www.cnblogs.com/voids5/p/12767998.html