import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
Scanner scanner = new Scanner(System.in);
// todo
}
}
NC201954. 修炼
描述
输入描述
第一行 个数,表示 。
接下来一行输入一个数 。
下面 行,每行 个数,表示一组可以通关的 。
输出描述
一个数表示最短通关天数。
示例1
输入:
0 0 1 1 2
输出:
2
示例2
输入:
1 1 2 5 7 6 6
输出:
3
示例3
输入:
0 0 1 3 3
输出:
3
说明:
此样例为网友提供的hack数据,之前提交的代码已进行rejudge -2020/2/10C++(g++ 7.5.0) 解法, 执行用时: 12ms, 内存消耗: 436K, 提交时间: 2023-04-18 20:15:16
#include <bits/stdc++.h>using namespace std;int a1,a2,b1,b2,v1,v2,n,res=1e9;int main(){cin>>a1>>a2;cin>>n;while(n--){v1=v2=0;cin>>b1>>b2;int c1=a1,c2=a2,m=0;while(!(v1>b1&&v2>b2)){v1+=++c1;v2+=++c2;m++;}res=min(m,res);}cout<<res<<endl;return 0;}
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 504K, 提交时间: 2020-02-02 14:00:08
#include<iostream>#include<stdio.h>#include<math.h>using namespace std;typedef long long ll;int main(){ll a1,a2;cin>>a1>>a2;int n;cin>>n;ll t=1e9+5;while(n--){ll b1,b2;cin>>b1>>b2;double t1 = (sqrt((2*a1+1)*(2*a1+1)+8*b1)-1-2*a1)/2;double t2 = (sqrt((2*a2+1)*(2*a2+1)+8*b2)-1-2*a2)/2;t =min(t,(ll)ceil(max(t1,t2))) ;}cout<<t<<endl;return 0;}
C++(clang++ 11.0.1) 解法, 执行用时: 11ms, 内存消耗: 444K, 提交时间: 2023-04-18 09:07:58
#include<iostream>#include<algorithm>using namespace std;int a1,a2,v1,v2,b1,b2,n,res=1E9;int main(){cin>>a1>>a2;cin>>n;while(n--){cin>>b1>>b2;v1=v2=0;int ans=0,c1=a1,c2=a2;while(!(v1>b1&&v2>b2)){v1+=++c1;v2+=++c2;ans++;}res=min(res,ans);}cout<<res<<endl;return 0;}