cf--contest1321-A. Contest for Robots+简单推理

传送门

http://codeforces.com/contest/1321/problem/A

题意

有两家公司a和b,都有n个问题,给出每家公司的每个问题状态(1表示解决,0表示未解决),每个问题都有相应的分数,小明可以随意改动他,但是每个题的分数都必须大于0,小明想让a公司赢,小明提前知道a,b公司的问题状态,问a公司中问题得到分数最大值(最小化)是多少。
1.a公司的总分要大于b公司才算赢。
2.如果不能使得a公司赢b公司,则输出-1 .

思路

最小化,就是让b公司得分问题数全部为1,可以分别求出anum(只有a解决),bnum(只有b解决),num(ab同时解决);
结果可以分为三种情况.
1.如果a状态和b状态相同,则分布不出结果,输出-1.
2.如果只有b解决,输出-1(a公司和b公司问题一样时,分数也是一样的,这样如果只有b解决时,那么a肯定就输了)
3.如果存在三种,则输出bnum/anum+1即可。(只有a解决的平均每个问题多少分)

AC代码

#include<cstdio>
using namespace std;
int a[101],b[101];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)	scanf("%d",&a[i]);//a数组问题状态 
	for(int i=0;i<n;i++)	scanf("%d",&b[i]);//b数组问题状态 
	int anum=0,bnum=0,num=0;//分别指只有a解决,只有b解决,ab同时解决 
	for(int i=0;i<n;i++)//枚举每一种状态 
	{
		if(a[i]==1 && b[i]==0)	anum++; 
		else if(a[i]==0 && b[i]==1)	bnum++;
		else if(a[i]==b[i] &&a[i]==1)	num++;
	}
	if(!anum && !bnum)	puts("-1");//如果a状态和b状态相同,则分布不出结果 
	else if(!anum  && bnum)	puts("-1");//如果只有b状态 
	else printf("%d",bnum/anum+1);
	return 0;
} 
发布了39 篇原创文章 · 获赞 1 · 访问量 549

猜你喜欢

转载自blog.csdn.net/qq_45249273/article/details/104603071
今日推荐