求大佬,CSP一道AC的版本和自己Wrong的版本想不通差异在哪
  • 板块学术版
  • 楼主weiweiyy
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/10/9 17:11
  • 上次更新2023/11/5 11:28:00
查看原帖
求大佬,CSP一道AC的版本和自己Wrong的版本想不通差异在哪
403042
weiweiyy楼主2020/10/9 17:11

题目描述 AC的代码

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;


const int N = 1010,M=25;
int n,k,t;	//n表示居民的个数,k表示逗留临界,t表示居民位置个数
int X1,Y1,X2,Y2;
int cnt_1,cnt_2;	//cnt_1表示在区域中,cnt_2表示逗留 
int g[N];

int main()
{
	cin>>n>>k>>t>>X1>>Y1>>X2>>Y2;
	for(int i=0;i<n;i++)
	{
		int nei=0;
		int flag=0;	//flag=1表示有感染风险 
		int lianxu=0;
		int maxcnt=0;
		int x,y,m;
		for(int j=0;j<t;j++)
		{
			cin>>x>>y;
			if(x>=X1 && x<=X2 && y>=Y1 && y<=Y2)
			{
				lianxu++;
				flag=1;
			}
			else lianxu=0;
			if(lianxu>=maxcnt) maxcnt=lianxu;	//保存一个连续的最大值,依次来判断该人是否逗留 
		}
		if(flag==1) 
		{
			cnt_1++;
			if(maxcnt>=k) cnt_2++;
		}
	}
	
	cout<<cnt_1<<endl<<cnt_2<<endl;
 }  

自己wrong的代码:

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;


const int N = 1010,M=25;
int n,k,t;	//n表示居民的个数,k表示逗留临界,t表示居民位置个数
int X1,Y1,X2,Y2;
int cnt_1,cnt_2;	//cnt_1表示在区域中,cnt_2表示逗留 
int g[N][N];

int main()
{
	cin>>n>>k>>t>>X1>>Y1>>X2>>Y2;
	for(int i=0;i<n;i++)
	{
		int x,y;
		for(int j=0;j<2*t;j=j+2)
		{
			cin>>x>>y;
			g[i][j]=x;
			g[i][j+1]=y;
		}
	}

	for(int i=0;i<n;i++)
	{
		int nei=0;
		int flag=0;	//flag=1表示有感染风险 
		int lianxu=0;
		int maxcnt=0;
		
		for(int j=0;j<2*t;j=j+2)
		{
			if(g[i][j]>=X1 && g[i][j]<=X2 && g[i][j+1]>=Y1 && g[i][j+1]<=Y2)
			{
				lianxu++;
				flag=1;
			}
			else lianxu=0;
			if(lianxu>=maxcnt) maxcnt=lianxu;
		}
		if(flag==1) 
		{
			cnt_1++;
			if(maxcnt>=k) cnt_2++;
		}
	}
	cout<<cnt_1<<endl<<cnt_2<<endl;
 }  

区别就是我将输入的位置信息存到了g[][]这个二维数组里,然后再进行的计数操作,为什么这样就不对了呢? 思考了半天了,希望有大佬能给菜鸡指个导

2020/10/9 17:11
加载中...