2 条题解
-
0
解题思路如下:
输入读取:循环读取输入,遇到“START”开始处理,读取起始点 s 和节点数 n。 数据处理:逐行读取输入,提取数字并统计边的数量,同时记录每个节点的度。 判断欧拉路径:遍历每个节点的度,判断是否为偶数。若除起始点和 0 号节点外的所有节点度为偶数,或者只有起始点和 0 号节点度为奇数,则可能存在欧拉路径。 结果输出:根据判断结果输出“YES”及边的总数,或“NO”。 // ShellDawn // POJ1300 // No.17
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define MM(x) memset(x,0,sizeof(x)) using namespace std; int solve(const string& cc) { int L = cc.length(); int ans = 0; for (int i = 0; i < L; i++) { ans *= 10; ans += cc[i] - '0'; } return ans; } int main() { string a; while (cin >> a) { if (a == "START") { int s, n; cin >> s >> n; getchar(); // 吞掉START一行最后的回车 int cnt[30]; MM(cnt); int ans = 0; for (int i = 0; i < n; i++) { char c; string cc; while ((c = getchar()) != '\n') { if (c >= '0' && c <= '9') { cc += c; } else { cnt[solve(cc)]++; cnt[i]++; ans++; cc = ""; } } if (cc != "") { cnt[solve(cc)]++; cnt[i]++; cc = ""; ans++; } } scanf("%*s"); bool flag = true; bool flagflag = true; for (int i = 0; i < n; i++) { if (cnt[i] % 2 == 0) { continue; } else { flagflag = false; if (i == s || i == 0) continue; else { flag = false; } } } if ((flagflag && s == 0) || (!flagflag && flag)) { printf("YES %d\n", ans); } else { puts("NO"); } } else { return 0; } } return 0; }
-
0
解题思路如下:
- 输入读取:循环读取输入,遇到“START”开始处理,读取起始点
s
和节点数n
。 - 数据处理:逐行读取输入,提取数字并统计边的数量,同时记录每个节点的度。
- 判断欧拉路径:遍历每个节点的度,判断是否为偶数。若除起始点和
0
号节点外的所有节点度为偶数,或者只有起始点和0
号节点度为奇数,则可能存在欧拉路径。 - 结果输出:根据判断结果输出“YES”及边的总数,或“NO”。
// ShellDawn // POJ1300 // No.17 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define MM(x) memset(x,0,sizeof(x)) using namespace std; int solve(const string& cc) { int L = cc.length(); int ans = 0; for (int i = 0; i < L; i++) { ans *= 10; ans += cc[i] - '0'; } return ans; } int main() { string a; while (cin >> a) { if (a == "START") { int s, n; cin >> s >> n; getchar(); // 吞掉START一行最后的回车 int cnt[30]; MM(cnt); int ans = 0; for (int i = 0; i < n; i++) { char c; string cc; while ((c = getchar()) != '\n') { if (c >= '0' && c <= '9') { cc += c; } else { cnt[solve(cc)]++; cnt[i]++; ans++; cc = ""; } } if (cc != "") { cnt[solve(cc)]++; cnt[i]++; cc = ""; ans++; } } scanf("%*s"); bool flag = true; bool flagflag = true; for (int i = 0; i < n; i++) { if (cnt[i] % 2 == 0) { continue; } else { flagflag = false; if (i == s || i == 0) continue; else { flag = false; } } } if ((flagflag && s == 0) || (!flagflag && flag)) { printf("YES %d\n", ans); } else { puts("NO"); } } else { return 0; } } return 0; }
- 输入读取:循环读取输入,遇到“START”开始处理,读取起始点
- 1
信息
- ID
- 301
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 13
- 已通过
- 2
- 上传者