#include <bits/stdc++.h> using namespace std; /* 2021.2.28 7分,wa*/ //int m,n,x; /*最开始找到的规律是当 N > M时,战斗力就不可能提升了,所以这可用来控制循环。 太过繁琐,不够精练 */ int main(){ cin >> m >> n >> x; int tili = 0; int chall = n; int flag = 0; while(chall <= m){ while(tili < m ){ tili+= chall; if(x == 0){ flag = 1; break; } x--; } if(tili > m){ tili = m; } chall += tili / chall; if(flag){ break; } tili = 0; } cout << chall <<endl; return 0; } /* 他人博客方法,10分 */ #include <iostream> #include <cstdio> using namespace std; int main(){ int m,n,x,used = 0; cin >> m >> n >> x; while(x > 0){ used = (m%n == 0) ? m/n: m/n + 1; if(x < used) break; x -= used; n += m/n; } cout << n << endl; return 0; } #include <bits/stdc++.h> using namespace std; /* 2021.2.28 10' ac 参考玩他人代码,并结合自己代码,所得如下。 或许还可以优化,时间/空间 */ int m,n,x; int main(){ cin >> m >> n >> x; while(n <= m){ if(x <= 0) break; x -= (m%n == 0) ? m/n : m/n + 1; if(x < 0) break; n += m / n; } cout << n <<endl; return 0; }