马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
我将你的代码中的问题和修复用注释标明,希望这对你有帮助。
|