首页 > 代码库 > 2014年百度之星程序设计大赛 资格赛第一题 (longlong)

2014年百度之星程序设计大赛 资格赛第一题 (longlong)

解题思路:

只要看(A-V)*K 这个公式的更新值是否大于等于A ,大于的话继续循环,否则报错

注意一点,数据会爆int

WA代码:

#include<stdio.h>
int main(){
    long long n ,m, v, k;
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld%lld%lld",&n,&m,&v,&k);
        int cnt = 0;
        while(m < n){
            if( (m - v) * k <= m ){
                cnt = -1;
                break;
            }
            m = (m - v) * k ;
            ++cnt;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

AC代码:

#include <iostream>
using namespace std;
int main(){
    long long n ,m, v, k;
    int t;
    cin >> t;
    while(t--){
        cin >> n >> m >> v >> k;
        int cnt = 0;
        while(m < n){
            if( (m - v) * k <= m ){
                cnt = -1;
                break;
            }
            m = (m - v) * k ;
            ++cnt;
        }
        cout << cnt << endl;
    }
    return 0;
}