社区讨论
80分求调
P1056[NOIP 2008 普及组] 排座椅参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhizi8ba
- 此快照首次捕获于
- 2025/11/03 18:15 4 个月前
- 此快照最后确认于
- 2025/11/03 18:15 4 个月前
求各位dalao帮我找找原因,谢谢!(帮必关)
这个是测试用的代码
CPP#include<cstdio>
#include<algorithm>
#define gc getchar()
#define pk putchar(' ') //printf一个空(k)格
#define pen putchar('\n') //printf一个换行(enter)
using namespace std;
int in() {
int re=0; char zf=gc;
while(zf<'0'||zf>'9') zf=gc;
while(zf>='0'&&zf<='9') re=re*10+(zf-48),zf=gc;
return re;
} //快读
void out(int x) { x<10?putchar(x+48):(out(x/10),putchar(x%10+48)); } //快写
struct jiao{ int x,id; }h[1001],s[1001];
inline bool cmp(jiao q,jiao p) { return q.x>p.x; }
int n,m,k,l,d,g[1001][1001];
bool ou1[1001],ou2[1001];
char wyy;
int main(){
m=in(),n=in(),k=in(),l=in(),d=in();
for(int i=1;i<=n;++i) h[i].x=0,s[i].x=0;
for(int i=1,x,y,r,c;i<=d;++i) {
x=in(),y=in(),r=in(),c=in();
if(g[x][y]!=0&&g[r][c]==0) g[r][c]=g[x][y];
else if(g[x][y]==0&&g[r][c]!=0) g[x][y]=g[r][c];
else if(g[x][y]==0&&g[r][c]==0) g[x][y]=i,g[r][c]=i;
} //输入和存图
for(int i=1;i<m;++i) {
for(int j=1;j<=n;++j) h[i].x+=(g[i][j]==g[i+1][j]&&g[i][j]);
h[i].id=i;
} //计算各行有几对相邻的交头接耳
for(int i=1;i<n;++i) {
for(int j=1;j<=m;++j) s[i].x+=(g[j][i]==g[j][i+1]&&g[j][i]);
s[i].id=i;
} //计算各列有几对相邻的交头接耳
//以下为 调试代码
for(int i=1;i<=m;++i) {
for(int j=1;j<=n;++j) {
if(g[i][j]<10) pk,out(g[i][j]),pk;
else out(g[i][j]),pk;
}
pen;
} //图的输出
pen;
for(int i=1;i<m;++i) if(h[i].x) out(h[i].id),pk;
pen;
for(int i=1;i<m;++i) if(h[i].x) out(h[i].x),pk;
pen,pen;
for(int i=1;i<n;++i) if(s[i].x) out(s[i].id),pk;
pen;
for(int i=1;i<n;++i) if(s[i].x) out(s[i].x),pk;
pen,pen,pen; //调试用,上行是h数组的id和x,下行是s数组的
//以上为 调试代码
sort(h+1,h+m,cmp);
sort(s+1,s+n,cmp);
for(int i=1;i<=k;++i) ou1[h[i].id]=true;
for(int i=1;i<=l;++i) ou2[s[i].id]=true; //标记要输出的
for(int i=1;i<m;++i) if(ou1[i]) out(i),pk;
pen;
for(int i=1;i<n;++i) if(ou2[i]) out(i),pk; //输出
return 0;
}
这个是交上去的代码
CPP#include<cstdio>
#include<algorithm>
#define gc getchar()
#define pk putchar(' ')
#define pen putchar('\n')
using namespace std;
int in() {
int re=0; char zf=gc;
while(zf<'0'||zf>'9') zf=gc;
while(zf>='0'&&zf<='9') re=re*10+(zf-48),zf=gc;
return re;
}
void out(int x) { x<10?putchar(x+48):(out(x/10),putchar(x%10+48)); }
struct jiao{ int x,id; }h[1001],s[1001];
inline bool cmp(jiao q,jiao p) { return q.x>p.x; }
int n,m,k,l,d,g[1001][1001];
bool ou1[1001],ou2[1001];
char wyy;
int main(){
m=in(),n=in(),k=in(),l=in(),d=in();
for(int i=1;i<=n;++i) h[i].x=0,s[i].x=0;
for(int i=1,x,y,r,c;i<=d;++i) {
x=in(),y=in(),r=in(),c=in();
if(g[x][y]!=0&&g[r][c]==0) g[r][c]=g[x][y];
else if(g[x][y]==0&&g[r][c]!=0) g[x][y]=g[r][c];
else if(g[x][y]==0&&g[r][c]==0) g[x][y]=i,g[r][c]=i;
}
for(int i=1;i<m;++i) {
for(int j=1;j<=n;++j) h[i].x+=(g[i][j]==g[i+1][j]&&g[i][j]);
h[i].id=i;
}
for(int i=1;i<n;++i) {
for(int j=1;j<=m;++j) s[i].x+=(g[j][i]==g[j][i+1]&&g[j][i]);
s[i].id=i;
}
sort(h+1,h+m,cmp),sort(s+1,s+n,cmp);
for(int i=1;i<=k;++i) ou1[h[i].id]=true;
for(int i=1;i<=l;++i) ou2[s[i].id]=true;
for(int i=1;i<m;++i) if(ou1[i]) out(i),pk;
pen;
for(int i=1;i<n;++i) if(ou2[i]) out(i),pk;
return 0;
}
这是出错的测试点
输入
CPP20 20 18 13 50
20 12 20 11
4 19 3 19
12 16 12 17
16 10 17 10
2 18 1 18
14 11 15 11
9 19 10 19
20 1 19 1
17 12 17 13
20 10 19 10
17 7 17 6
6 14 7 14
4 10 5 10
10 13 10 12
8 11 9 11
8 16 9 16
1 12 1 13
16 11 17 11
11 17 11 16
13 16 13 15
5 19 5 20
11 12 12 12
13 3 12 3
19 6 20 6
6 20 6 19
3 3 3 2
7 12 6 12
3 2 4 2
16 10 16 9
17 13 18 13
19 13 19 12
7 19 8 19
13 19 13 20
12 20 12 19
10 7 11 7
15 19 16 19
2 4 2 3
14 19 13 19
12 12 12 11
10 3 10 2
11 19 11 18
2 7 2 8
19 10 19 9
6 15 5 15
16 13 17 13
6 18 6 19
18 4 19 4
12 13 13 13
17 10 17 11
11 4 11 5
输出
CPP1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 4 6 7 9 10 11 12 15 16 18 19
我的代码的输出
CPP1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 3 4 6 7 8 9 11 12 15 16 18 19
回复
共 3 条回复,欢迎继续交流。
正在加载回复...