Codeforces Round #637 (Div. 2)
Posted qq103013999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #637 (Div. 2)相关的知识,希望对你有一定的参考价值。
Codeforces Round #637 (Div. 2)
A. Nastya and Rice
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
int main(){
int T;
cin>>T;
while(T--){
int n,a,b,c,d;
cin>>n>>a>>b>>c>>d;
int m=(a-b)*n;
int mm=(a+b)*n;
if(mm<(c-d)||m>(c+d))cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}
B. Nastya and Door
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int a[MAXN];
int b[MAXN];
bool vis[MAXN];
int main(){
int T;
cin>>T;
while(T--){
memset(b,0,sizeof(b));
memset(vis,0,sizeof(vis));
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=2;i<n;i++){
if(a[i]>a[i-1]&&a[i]>a[i+1]){
b[i]=b[i-1]+1;
vis[i]=true;
}else b[i]=b[i-1];
}
b[n]=b[n-1];
int l=0;
int ans=-1;
for(int i=1;i<=n-k+1;i++){
int res=b[i+k-1]-b[i-1];
if(vis[i])res--;
if(vis[i+k-1])res--;
if(ans<res){
ans=res;
l=i;
}
}
cout<<ans+1<<‘ ‘<<l<<endl;
}
return 0;
}
C. Nastya and Strange Generator
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int a[MAXN];
int main(){
int T;
cin>>T;
while(T--){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
bool ok=true;
for(int i=1;i<n;i++){
if(a[i+1]>a[i]+1)ok=false;
}
if(ok)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
D. Nastya and Scoreboard
dp[i][j]:第i位之后使用j根可以组成数字串.
$dp[i][j]=dp[i+1][j-t];$第i位使用t根可以组成数字。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2100;
string s;
int num[10]={0b1110111,0b0010010,0b1011101,0b1011011,0b0111010,0b1101011,0b1101111,0b1010010,0b1111111,0b1111011};//二进制
int a[MAXN];
bool dp[MAXN][MAXN];
int b[MAXN];
int main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=0;j<7;j++){
a[i]=(a[i]<<1)+(s[j]-‘0‘);
}
}
dp[n+1][0]=true;
for(int i=n;i>=1;i--){
for(int j=0;j<10;j++){
if((num[j]&a[i])==a[i]){
int t=0;
for(int l=0;l<7;l++){
if(!((a[i]>>l)&1)&&((num[j]>>l)&1))t++;//组成数字j还需要多少木棒
}
//cout<<t<<endl;
for(int r=t;r<=k;r++){
dp[i][r]=dp[i][r]|dp[i+1][r-t];//若第i+1位的r-t可行,则第i位的r一定可行
}
}
}
}
if(!dp[1][k])cout<<"-1"<<endl;
else{
for(int i=1;i<=n;i++){//从高位往后推
for(int j=9;j>=0;j--){
if((num[j]&a[i])==a[i]){
int t=0;
for(int l=0;l<7;l++){
if(!((a[i]>>l)&1)&&((num[j]>>l)&1))t++;
}
if(k>=t&&dp[i+1][k-t]){
cout<<j;
k-=t;
break;
}
}
}
}
}
return 0;
}
E. Nastya and Unexpected Guest
待补
以上是关于Codeforces Round #637 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #637 (Div. 2)
Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator 思维(题意杀
Codeforces Round #436 E. Fire(背包dp+输出路径)