|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 元豪 于 2023-4-29 16:36 编辑
有N个人,编号为1,2,…,N。
举行了M次聚会。k_i; 参加第 i ( 1≤i≤M )次聚会的人是 x_i 人。
确定是否每两个人至少参加一次同一个聚会。
输入样例:
输出:
解释:
第一个人和第二个人都参加了第一次聚会。
第二个人和第三个人都参加了第二次聚会。
第一个人和第三个人都参加了第三次聚会。
因此,每两个人至少参加一次同一个聚会,所以答案是肯定的。
错了十个点,大家帮忙看看为什么
https://atcoder.jp/contests/abc272/submissions/41016260
- #include <bits/stdc++.h>
- using namespace std;
- int g[101][101], h[101], s[101][101], dss[101], ok = 0;
- int ren, juhui;
- int main(){
- cin >> ren >> juhui;
- for (int i = 0; i < juhui; i++){
- cin >> h[i];
- for (int j = 0; j < h[i]; j++){
- cin >> g[i][j];
- s[g[i][j] - 1][h[i] - 1] = 1;
- dss[g[i][j] - 1] = 1;
- }
- }
- for (int i = 1; i < ren; i++){
- if (dss[i] && dss[i - 1]){
- ok = 0;
- for (int j = 0; j < juhui; j++){
- if (s[i][j] && s[i - 1][j]){
- ok = 1;
- }
- }
- if (!ok){
- cout << "No" << endl;
- return 0;
- }
- }
- else{
- cout << "No" << endl;
- return 0;
- }
- }
- cout << "Yes" << endl;
- return 0;
- }
复制代码
首先,你的代码中使用了 int g[101][101] 和 int s[101][101] ,但这两个数组的大小不需要那么大。使用一个 bool g[N][N] 数组就足够了。同时,我发现你的代码中对数组 s 的更新存在问题。你的代码中还使用了 dss 数组,但实际上并不需要这个数组。
你的代码中,你用 freopen("input.in", "r", stdin); 打开了一个名为 "input.in" 的文件,这可能会导致本地运行时输入错误。在提交到在线评测系统时,不需要这一行代码。
接下来是我修改的代码,我会在注释中解释问题:
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 101;
- bool g[N][N];
- int n, m;
- int main() {
- ios::sync_with_stdio(false);
- cin.tie(nullptr);
- cin >> n >> m;
- for (int i = 0; i < m; ++i) {
- int k;
- cin >> k;
- for (int j = 0; j < k; ++j) {
- int x;
- cin >> x;
- // 修复:将参加聚会的人的信息存储在 g 数组中
- g[x][i] = true;
- }
- }
- for (int i = 1; i <= n; ++i) {
- for (int j = i + 1; j <= n; ++j) {
- bool ok = false;
- for (int k = 0; k < m; ++k) {
- // 修复:检查 i 和 j 是否参加了同一个聚会
- if (g[i][k] && g[j][k]) {
- ok = true;
- break;
- }
- }
- // 问题:你的代码在判断 i 和 i - 1 之间的关系时存在问题
- // 修复:修改为检查 i 和 j 之间的关系
- if (!ok) {
- cout << "No" << endl;
- return 0;
- }
- }
- }
- cout << "Yes" << endl;
- return 0;
- }
复制代码
我将你的代码中的问题和修复用注释标明,希望这对你有帮助。
|
|