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[][]这个二维数组里,然后再进行的计数操作,为什么这样就不对了呢? 思考了半天了,希望有大佬能给菜鸡指个导