HDU1050

思路分析(盗图一张):

分析过程有如下图所示:

我们可以用一个数组flag记录(1,2),(3,4)·····的公共走廊被记录的次数,每经过一次便把对应的flag[i]加1;注意边缘化处理,我们只采用一个长为205的数组处理,所以需要把数据统一到偶数中去,然后采用flag[j/2]进行存储。

由于对于每一个flag[i]一次只能访问一次,所以我们只需要找出最大的flag[i]就可以输出结果。

代码展示:

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 #define maxn 205
 5 int move[maxn][2];
 6 int flag[205];
 7 int main()
 8 {
 9     int t;
10     cin>>t;
11     while(t--)
12     {
13         int n;
14         memset(flag,0,sizeof(flag));
15         cin>>n;
16         for(int i=0;i<n;i++)
17             {
18                 cin>>move[i][0]>>move[i][1];
19                 if(move[i][0]>move[i][1]){int t=move[i][0];move[i][0]=move[i][1];move[i][1]=t;}
20                 if(move[i][0]%2==1) move[i][0]++;
21                 if(move[i][1]%2==1) move[i][1]++;
22                 for(int j=move[i][0];j<=move[i][1];j+=2)
23                     flag[j/2]++;
24             }
25             int max=flag[0];
26             for(int i=1;i<=200;i++)
27             if(flag[i]>max)max=flag[i];
28             cout<<max*10<<endl;
29     }
30     return 0;
31 }
posted @ 2014-07-21 22:04  future_hero  阅读(172)  评论(0编辑  收藏  举报