最后两个点TLE,不知道怎么办

P1150 Peter 的烟

Ephelius @ 2021-07-25 11:20:28

n,k=map(int,input().split()) s=n;a=n i=0 while i<=s:

if i%k==0 and i!=0:
    s+=1
    a=a-i+1
i+=1
if a==0:
    break

print(s)


by Indulge_myself @ 2021-07-25 11:36:49

看的懂c++不?可以参考一下我的代码。

#include <bits/stdc++.h>
     using namespace std;
     int main(){
         int n,k;
         cin>>n>>k;
         cout<<n+(n-1)/(k-1);
         return 0;
     } 

算法千万种,诚信第一条,切勿Ctrl+C!


by mengying @ 2021-07-25 12:08:04

楼主代码时间复杂度大于O(n),对于数据范围1e8很危险。不知道具体的是因为我时间复杂度没学好本题计算可以采用以下代码。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int num,n,k;
    cin>>n>>k;
    num=n;
    while(num>=k){
        n+=num/k;//得到烟的数量
        num=num/k+num%k;//烟头数=得到烟数+剩下烟头数
    }
    cout<<n;
    return 0;
}

by Ephelius @ 2021-07-25 20:23:28

@zzzzstc 是这样的,我们这边地区python是要高考的(我是选技术的),由于我不是学信息竞赛的所以没学过C++。


by Ephelius @ 2021-08-06 15:52:46

@zzzzstc 谢谢你,我AC了


|