链接:https://ac.nowcoder.com/acm/contest/4138/K
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
有一款双人小游戏,两个玩家分别控制两个人物,这两个人物的能力可以用 {v1,v2}v1,v2 来表示,初始两人的能力都为 {0}0。
游戏进行的单位是天,每一天这两个人都会分别提升 {a1,a2}a1,a2 的能力值,此外,每天可以获得一个能力点,可以让 {a1+=1}a1+=1 或者 {a2+=1}a2+=1。
等到两人修炼足够长的时间,就可以去打boss通关了。
小沃沃通过查攻略,发现最后两人的能力值组合只要满足v1 \ge b1v1≥b1且v2 \ge b2v2≥b2,就可以过关。
由于通关方式有很多种,可能有很多组 {b1,b2}b1,b2 的组合,只要满足其中任意一组就可以通关。
现在小沃沃想知道最短几天能够通关。
输入描述:
第一行 {2}2 个数,表示 a1, a2~(0 \le a1,a2 < 100000)a1,a2 (0≤a1,a2<100000)。
接下来一行输入一个数 n~(1 \le n \le 1000)n (1≤n≤1000)。
下面 {n}n 行,每行 {2}2 个数,表示一组可以通关的 b1, b2~(0<b1,b2<10^9)b1,b2 (0<b1,b2<10
9
)。
输出描述:
一个数表示最短通关天数。
示例1
输入
复制
0 0
1
1 2
输出
复制
2
示例2
输入
复制
1 1
2
5 7
6 6
输出
复制
3
题意很关键:第一天的时候a1,a2就可以各自加1了,然后第一天就是a1+1,a2+1;
接下来就是一样的步骤,不断更新a1,a2的值;。
注释的代码就是刚开始理解错了 想麻烦了
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int x,y;
int minn;
void get_ans(int v1,int v2,int a,int b,int ans)
{
//cout <<v1<<" "<<v2<<" "<<a<<" "<<b<<" "<<ans<<endl;
// if(ans>=minn) return ;
// if(v1>=x&&v2<y) return ;
// if(v1<x&&v2>=y) return ;
if(v1>=x&&v2>=y)
{
minn=min(minn,ans);
return ;
}
a++,b++;
get_ans(v1+a,v2+b,a,b,ans+1);
return;
}
int main()
{
int a,b;
cin >>a>>b;
int n;
cin >>n;
minn=99999999;
while(n--)
{
cin >>x>>y;
get_ans(0,0,a,b,0);
}
cout <<minn<<endl;
}