Codeforces Round 695 Div2

   日期:2021-01-13     浏览:102    评论:0    
核心提示:文章目录A. Wizard of OrzB. Hills And ValleysA. Wizard of Orz传送门题意:n个整数,开始全是0,每一秒全部+1模10。可以在任意的位置,让序列暂停。它的相邻位过1秒钟暂停,相隔为2的位置过2秒钟暂停,问操作后得到的最大的数是多少?思路:最大第一位必须是9,所以第二位是8,第二位暂停后第一位和第三位都是9,剩下n-3个数从0开始加并模10AC代码:#include<bits/stdc++.h>using namespace st..

文章目录

  • A. Wizard of Orz
  • B. Hills And Valleys

A. Wizard of Orz

传送门
题意:n个整数,开始全是0,每一秒全部+1模10,可以在任意的位置,让序列暂停。它的相邻位过1秒钟暂停,相隔为2的位置过2秒钟暂停,问操作后得到的最大的数是多少?
思路:最大第一位必须是9,所以第二位是8,第二位暂停后第一位和第三位都是9,剩下n-3个数从0开始加并模10。

AC代码:

#include<bits/stdc++.h>
using namespace std;

int n,m;
void solve()
{ 
	cin>>n;
	if(n==1) cout<<9<<endl;
	else if(n==2) cout<<98<<endl;
	else if(n==3) cout<<989<<endl;
	else
	{ 
	    cout<<989;
	    for(int i=1;i<=n-3;i++)
	        cout<<(i-1)%10;
	   	cout<<endl;
	}
}
 
int main()
{ 
	int t;
	cin>>t;
	while(t--)
	{ 
		solve();
	}
	return 0;
}

B. Hills And Valleys

传送门

题意:长度为n的序列,如果 a [ i ] > a [ i + 1 ] & & a [ i ] > a [ i − 1 ] a[i]>a[i+1]\&\& a[i]>a[i-1] a[i]>a[i+1]&&a[i]>a[i1]为波峰,如果 a [ i ] < a [ i + 1 ] & & a [ i ] < a [ i − 1 ] a[i]<a[i+1]\&\& a[i]<a[i-1] a[i]<a[i+1]&&a[i]<a[i1]为波谷,可以把一个数变成任意值,问操作后波峰波谷最小值为多少?

思路:分析得出,要改变 a [ i ] a[i] a[i]减少波峰波谷,就改成 a [ i − 1 ] a[i-1] a[i1]或者 a [ i + 1 ] a[i+1] a[i+1],但可能产生新的波峰波谷,所以我们枚举每一个波峰波谷的两周情况,取减少的最大值,用原来波峰波谷的和减去最大值。

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i=(a);i<=(b);i++)
#define per(i,a,b) for (int i=(a);i>=(b);i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define sz(x) ((int)(x).size())
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
const int N=3e5+10;
int n;
int a[N];
 
bool check(int x)
{ 
	if(x<=1||x>=n) return 0;
	if(a[x]>a[x-1]&&a[x]>a[x+1]) return 1;
	if(a[x]<a[x-1]&&a[x]<a[x+1]) return 1;
	return 0;
}
 
void solve()
{ 
	cin>>n;
	int sum=0;
	rep(i,1,n) cin>>a[i];
	rep(i,1,n) sum+=check(i);
		
	int maxv=0;
	rep(i,2,n-1)
	{ 
		int k=check(i-1)+check(i)+check(i+1);
		int tmp=a[i];
		a[i]=a[i-1];
		int p=check(i-1)+check(i)+check(i+1);
		maxv=max(maxv,k-p);
		a[i]=a[i+1];
		p=check(i-1)+check(i)+check(i+1);
		maxv=max(maxv,k-p);
		a[i]=tmp;
	}
 
	cout<<sum-maxv<<endl;
}
 
int main()
{ 
	ios::sync_with_stdio(0); cin.tie(0);
	int t;
	cin>>t;
	while(t--) solve();
	return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服