Codeforces Round #493 (Div. 2)

题目链接:Codeforces Round #493 (Div. 2)


A:很明显的把最小值分给第二个人即可,然后判断是否合法。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,a[20],flag,m=1e9,s;
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>a[i],s+=a[i],m=min(m,a[i]);
	s-=m;	
	if(s<=m)	return puts("-1"),0;
	cout<<n-1<<endl;
	for(int i=1;i<=n;i++){
		if(a[i]==m)	flag++;
		if(1==flag&&a[i]==m)	continue;
		cout<<i<<' ';	
	}
	return 0;
}

B:我们可以找到奇偶分界线的交点,也就是可以切的地方,然后从小到大贪心切即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=110;
int n,a[N],b,n1,n2,res;	priority_queue<int> q;
signed main(){
	cin>>n>>b;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=1;i<=n;i++){
		if(a[i]&1)	n1++;
		else	n2++;
		if(n1==n2&&n1+n2!=n)	q.push(-abs(a[i+1]-a[i]));	
	}
	while(q.size()){
		int u=-q.top();	q.pop();
		if(u<=b)	b-=u,res++;
		else	break;
	}
	cout<<res;
	return 0;
}

C:我们可以发现一共就两种可能,要么把全部翻到一个地方,然后反转,要么直接对每一段0反转。我们取min即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+10;
int n,x,y,cnt,k,res;	char str[N];
signed main(){
	cin>>n>>x>>y>>str+1;	str[n+1]='1';
	for(int i=1;i<=n;i++){
		if(str[i]=='0'&&str[i+1]=='1')	cnt++;
	}
	if(!cnt)	puts("0");
	else	cout<<min(x,y)*(cnt-1)+y;
	return 0;
}

D:暴力打表找规律。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n,a[]={0,4,10,20,35,56,83,116,155,198,244,292,341,390,439};
signed main(){
	cin>>n;
	if(n<=11)	cout<<a[n];
	else	cout<<292LL+49LL*(n-11);
	return 0;
}
发布了467 篇原创文章 · 获赞 241 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/104057016