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;
  }
}



相关文章
|
8月前
|
机器学习/深度学习 人工智能 移动开发
.Codeforces Round 883 (Div. 3)
Codeforces Round 883 (Div. 3)
|
6月前
Codeforces Round #186 (Div. 2)A、B、C、D、E
Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。
22 0
|
6月前
|
人工智能 算法 BI
Codeforces Round #179 (Div. 2)A、B、C、D
我们每次加进来的点相当于k,首先需要进行一个双重循环找到k点和所有点之间的最短路径;然后就以k点位判断节点更新之前的k-1个点,时间复杂度降到O(n^3),而暴力解法每次都要进行floyd,时间复杂度为O(n^4);相比之下前述解法考虑到了floyd算法的性质,更好了运用了算法的内质。
30 0
|
8月前
|
机器学习/深度学习 Go
codeforces round 885 (div. 2)
codeforces round 885 (div. 2)
60 0
|
12月前
|
人工智能 BI
Codeforces Round 827 (Div. 4)
Codeforces Round 827 (Div. 4)A~G题解
76 0
|
人工智能
|
机器学习/深度学习