2020 CCPC Wannafly Winter Camp Day7 K—修炼—模拟规律

链接: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;
}
发布了189 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43872728/article/details/104147733