Codeforces Round #695 (Div. 2)

简介: A.Wizard of Orz

A.Wizard of Orz


题意:给你个数n,输出n位,求操作一次后的所能得到的最大值。

操作是选择一个位置i,然后与其相邻的位置会和他相差1. 以此类推。

思路:尽量使得首位为9,所以选择第二位为8,则是最优的,输出9890123456789…


#include<bits/stdc++.h>
using namespace std;
int main()
{
  string s1="0123456789";
  int i,j,n,t;
  cin>>t;
  while(t--){
    cin>>n;
    if(n>=3){
      cout<<"989";
      n-=3;
    }
    else {
      if(n==1){
        cout<<9<<endl;
        continue;
      }
      else if(n==2) {
        cout<<98<<endl;
        continue;
      }
      else if(n==3){
        cout<<989<<endl;
        continue;
      }
      n-=3;
    }
    for(i=0;i<n;i++){
      cout<<s1[i%10];
    }
    cout<<endl;
  }
}



B. Hills And Valleys


题意:能更改一个位置的数,求更改完之后山峰和山谷的和最小

思路:因为更改一个数只会影响到相邻的,并且最优的情况是将那个数更改为和左边相等或者和右边相等两种方案,所以枚举一下所有的下标,每个下标可以有两种可能的更改,再与原方案做对比。


#include<bits/stdc++.h>
using namespace std;
const int maxn=3e5+100;
int a[maxn];
int judge(int i,int n){
  if(i+1==n||i==0){
    return 0;
  }
  if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i+1]&&a[i]<a[i-1])){
    return 1;
  }
  else 
    return 0;
}
int main()
{
  int n,i,j,t;
  cin>>t;
  while(t--){
    cin>>n;
    for(i=0;i<n;i++){
      cin>>a[i];
    }
    int ans=0;
    for(i=1;i<n-1;i++){  
      if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i+1]&&a[i]<a[i-1])){
        ans++;
      }
    }
    int cnt=0,ans1=0;
    for(i=1;i<n-1;i++){
      int m1=a[i-1],m2=a[i],m3=a[i+1];
      int a1=judge(i,n),b1=judge(i-1,n),c1=judge(i+1,n);
      int sum1=a1+b1+c1;
      a[i]=m1;
      cnt=(judge(i,n)+judge(i-1,n)+judge(i+1,n));
      ans1=max(sum1-cnt,ans1);
      cnt=0;
      a[i]=m3;
      cnt=(judge(i,n)+judge(i-1,n)+judge(i+1,n));
      ans1=max(sum1-cnt,ans1);
      cnt=0;
      a[i]=m2;  
    }
    cout<<ans-ans1<<endl;
  }
}



相关文章
|
27天前
|
人工智能 测试技术 C++
Codeforces Round 962 (Div. 3)
Codeforces Round 962 (Div. 3)
|
人工智能 算法 BI
Codeforces Round 891 (Div. 3)
Codeforces Round 891 (Div. 3)
118 0
Codeforces Round 891 (Div. 3)
Codeforces Round #192 (Div. 2) (330A) A. Cakeminator
如果某一行没有草莓,就可以吃掉这一行,某一列没有也可以吃点这一列,求最多会被吃掉多少块蛋糕。
46 0
Codeforces Round #186 (Div. 2)A、B、C、D、E
Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。
34 0
Codeforces Round #742 (Div. 2)
Codeforces Round #742 (Div. 2)
45 0
|
机器学习/深度学习 人工智能
Codeforces Round 889 (Div. 2)
Codeforces Round 889 (Div. 2)
154 0
|
人工智能 索引
Codeforces Round 806 (Div. 4)
Codeforces Round 806 (Div. 4)A~G
110 0
Codeforces Round #675 (Div. 2) A~D
Codeforces Round #675 (Div. 2) A~D
152 0