P1789 Mc生存插火把
Posted 自为
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1789 Mc生存插火把相关的知识,希望对你有一定的参考价值。
题目背景
初一党应该都知道......
题目描述
话说有一天linyorson在Mc开了一个超平坦世界,他把这个世界看成一个n*n的方阵,现在他有m个火把和k个萤石,分别放在x1,y1...xm,ym和o1,p1...ok,pk的位置,问在这个方阵中有几个点会生成怪物?(没有光或没放东西的地方会生成怪物)
P.S.火把的照亮范围是:
|暗|暗| 光 |暗|暗|
|暗|光| 光 |光|暗|
|光|光|火把|光|光|
|暗|光| 光 |光|暗|
|暗|暗| 光 |暗|暗|
萤石:
|光|光| 光 |光|光|
|光|光| 光 |光|光|
|光|光|萤石|光|光|
|光|光| 光 |光|光|
|光|光| 光 |光|光|
输入输出格式
输入格式:
输入共m+k+1行。
第一行为n,m,k。
第2到第m+1行分别是火把的位置xi yi。
第m+2到第m+k+1行分别是萤石的位置oi pi。
注:可能没有萤石,但一定有火把。
所有数据保证在int范围内。
输出格式:
有几个点会生出怪物。
输入输出样例
输入样例#1:
5 1 0 3 3
输出样例#1:
12
这道题没有说n的范围
本来以为要用什么玄学操作。。
结果我还为了多骗点分写了个map。。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<map> 6 #include<algorithm> 7 #include<map> 8 #define LL long long int 9 using namespace std; 10 const int MAXN=88000; 11 inline void read(int &n) 12 { 13 char c=getchar();n=0;bool flag=0; 14 while(c<‘0‘||c>‘9‘) c==‘-‘?flag=1,c=getchar():c=getchar(); 15 while(c>=‘0‘&&c<=‘9‘) n=n*10+c-48,c=getchar();flag==1?n=-n:n=n; 16 } 17 map<pair<int,int>,bool>mp; 18 int main() 19 { 20 int n,a,b; 21 read(n);read(a);read(b); 22 for(int i=1;i<=a;i++) 23 { 24 int x,y; 25 read(x);read(y); 26 mp[make_pair(x,y)]=1; 27 mp[make_pair(x-1,y)]=1;mp[make_pair(x-2,y)]=1;mp[make_pair(x+1,y)]=1;mp[make_pair(x+2,y)]=1; 28 mp[make_pair(x,y-1)]=1;mp[make_pair(x,y-2)]=1;mp[make_pair(x,y+1)]=1;mp[make_pair(x,y+2)]=1; 29 mp[make_pair(x-1,y-1)]=1;mp[make_pair(x+1,y-1)]=1;mp[make_pair(x-1,y+1)]=1;mp[make_pair(x+1,y+1)]=1; 30 } 31 for(int i=1;i<=b;i++) 32 { 33 int x,y; 34 read(x);read(y); 35 mp[make_pair(x,y)]=1; 36 mp[make_pair(x-1,y)]=1;mp[make_pair(x-2,y)]=1;mp[make_pair(x+1,y)]=1;mp[make_pair(x+2,y)]=1; 37 mp[make_pair(x,y-1)]=1;mp[make_pair(x,y-2)]=1;mp[make_pair(x,y+1)]=1;mp[make_pair(x,y+2)]=1; 38 mp[make_pair(x-1,y-1)]=1;mp[make_pair(x+1,y-1)]=1;mp[make_pair(x-1,y+1)]=1;mp[make_pair(x+1,y+1)]=1; 39 mp[make_pair(x-2,y-1)]=1;mp[make_pair(x-1,y-2)]=1;mp[make_pair(x-2,y-2)]=1; 40 mp[make_pair(x-1,y+2)]=1;mp[make_pair(x-2,y+1)]=1;mp[make_pair(x-2,y+2)]=1; 41 mp[make_pair(x+1,y-2)]=1;mp[make_pair(x+2,y-1)]=1;mp[make_pair(x+2,y-2)]=1; 42 mp[make_pair(x+1,y+2)]=1;mp[make_pair(x+2,y+1)]=1;mp[make_pair(x+2,y+2)]=1; 43 } 44 int ans=0; 45 for(int i=1;i<=n;i++) 46 for(int j=1;j<=n;j++) 47 if(mp[make_pair(i,j)]==0) 48 ans++; 49 printf("%d",ans); 50 return 0; 51 }
以上是关于P1789 Mc生存插火把的主要内容,如果未能解决你的问题,请参考以下文章