社区讨论

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;
}
这是出错的测试点
输入
CPP
20 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
输出
CPP
1 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
我的代码的输出
CPP
1 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 条回复,欢迎继续交流。

正在加载回复...