赞
踩
这道题是经典的算法对,但忽略特判,导致一直WA过不去的情况
对于一直过不去的情况,就得考虑是不是特判出了问题
这道题的特判还挺多挺复杂
我们这里依据k来进行特判
1.k = 0
(1) l >= 2 那就是None.
(2)l == 1 那就是1
(3)l == 0 这里还得分类讨论r
(1)r == 0 那就是0
(2) r >= 1 那就是1
2.k = 1
(1) l >= 2 那就是None.
(2)l == 1 那就是1
(3)l == 0 这里还得分类讨论r
(1)r == 0 这里就成了None.
(2)r >= 1 这里是1
后面的就正常做
还挺复杂,讨论点挺多,有点搞,不过学到了,一直卡着但感觉算法没问题的情况,多半是被特例卡住了
- // Problem: 游戏购买!
- // Contest: NowCoder
- // URL: https://ac.nowcoder.com/acm/contest/45670/D
- // Memory Limit: 1048576 MB
- // Time Limit: 10000 ms
- // Date: 2024-03-15 09:09:22
- //
- // Powered by CP Editor (https://cpeditor.org)
-
- #include<bits/stdc++.h>
- #define endl '\n'
- #define int int64_t
- using namespace std;
- void solve() {
- int l, r, k; cin >> l >> r >> k;
- //有几个特殊情况得特判
- if (k == 0) {
- if (l >= 2) cout << "None.\n";
- else if (l == 1) cout << 1 << endl;
- else {
- //l == 0
- if(r) cout << "0 1\n";
- else cout << "0\n";
- }
- return;
- }
- if (k == 1) {
- if (l >= 2) cout << "None.\n";
- else if (l == 1) cout << 1 << endl;
- else {
- if (r) cout << 1 << endl;
- else cout << "None.\n";
- }
- return;
- }
- //k >= 2
- int t = k;
- set<int>st;
- if (l <= 1 && 1 <= r)st.insert(1);
- while (true) {
- if (l <= k && k <= r)st.insert(k);
- if (k > (r / t)) break;
- k *= t;
- //cout <<"k = " << k << endl;
- }
- if (st.size()) {
- for (auto it : st)
- cout << it << " ";
- cout << endl;
- }
- else
- cout << "None.\n";
- }
- signed main() {
- ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
- int t = 1;
- cin >> t;
- while (t--) {
- solve();
- }
- return 0;
- }
-

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。