1 条题解
-
0
自动搬运
来自洛谷,原作者为

浮尘ii
**搬运于
2025-08-24 22:08:33,当前版本为作者最后更新于2019-03-02 22:11:46,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
出题人来水一篇题解。
首先这题是我半年前出的,当时还不懂 python 那一套姿势。
今天听说被放到月赛 T1 来了,重新看了一下,发现直接 python 就水过去了(用 str(int(a)) 即可判断原串格式是否合法,int(a) 直接和 比较大小就行了)。
l, r, T = map(int, input().split()) for i in range(T): s = input() if (s == "-"): print(1) continue n = int(s) if (str(n) != s): print(1) else: if (n >= l and n <= r): print(0) else: print(2)
以下是原题解:
按照题意模拟即可。
注意到格式不合法会有如下情况:
特判掉不合法后,先根据位数判断是否在 long long 范围内(可能仍然会爆 long long,使用 unsigned long long 存储),然后再判断大小即可。
标程:
#include <cstdio> #include <cstring> using ll = long long; using ull = unsigned long long; const size_t maxL = (128 << 10) + 5; ll L, R; int T; char X[maxL]; void Judge() { int l = strlen(X + 1); if(X[1] == '-') { if(l == 1 || X[2] == '0') { puts("1"); return; } } else if(X[1] == '0' && l != 1) { puts("1"); return; } if(X[1] == '-' && l > 20) { puts("2"); return; } if(X[1] != '-' && l > 19) { puts("2"); return; } ull tmp; ll x; if(X[1] == '-') { sscanf(X + 2, "%llu", &tmp); if(tmp > 1ULL << 63) { puts("2"); return; } x = -tmp; } else { sscanf(X + 1, "%llu", &tmp); if(tmp >= 1ULL << 63) { puts("2"); return; } x = tmp; } puts(x >= L && x <= R ? "0" : "2"); } int main() { for(scanf("%lld%lld%d", &L, &R, &T); T--; ) { scanf("%s", X + 1); Judge(); } return 0; }
- 1
信息
- ID
- 3883
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者