|
发表于 2023-8-3 19:51:44
|
显示全部楼层
这道题用模拟的思路也许真的解不了
建议换种思路,如sscanf函数
- #include <bits/stdc++.h>
- using namespace std;
- int n;
- string op, ad;
- map <string, int> p;
- int ak(string s) {
- long long a, b, c, d, e;
- long long t = sscanf(s.c_str(), "%lld.%lld.%lld.%lld:%lld", &a, &b, &c, &d, &e);
- if (t != 5) return 0;
- if (a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535) return 0;
- char s2[35];
- sprintf(s2,"%d.%d.%d.%d:%d",a,b,c,d,e);
- int len = s.size();
- int f = 1;
- for (int i = 0; i < len; i++) {
- if (s[i] == s2[i]) f = 1;
- else {
- f = 0;
- break;
- }
- }
- return f;
- }
- int main() {
- cin >> n;
- for (int i = 0; i < n; i++) {
- cin >> op >> ad;
- if (!ak(ad)) {
- cout << "ERR" << endl;
- } else {
- if (op[0] == 'S') {
- if (p[ad] == 0) {
- cout << "OK" << endl;
- p[ad] = i + 1;
- } else {
- cout << "FAIL" << endl;
- }
- } else {
- if (p[ad] == 0) {
- cout << "FAIL" << endl;
- } else {
- cout << p[ad] << endl;
- }
- }
- }
- }
- return 0;
- }
复制代码 |
|