传送门
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;
}