首页 > 其他 > 详细

bzoj1709[Usaco2007 Oct]Super Paintball超级弹珠*

时间:2016-08-16 00:00:25      阅读:294      评论:0      收藏:0      [点我收藏+]

bzoj1709[Usaco2007 Oct]Super Paintball超级弹珠

题意:

n*n的网格中有k头牛。在一个格子里发射子弹可以射中本格子,同行,同列,左斜线,右斜线(就是一个米字形)的牛,问能射中所有牛的格子有几个。n≤100。

题解:

枚举所有格子,从当前格子出发按题目里的方向走累计被射中的牛即可。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 110
 6 using namespace std;
 7 
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<0||ch>9){if(ch==-)f=-1; ch=getchar();}
11     while(ch>=0&&ch<=9)x=x*10+ch-0,ch=getchar();
12     return f*x;
13 }
14 int a[maxn][maxn],n,k,ans;
15 int main(){
16     n=read(); k=read(); inc(i,1,k){int x=read(),y=read(); a[x][y]++;}
17     inc(i,1,n)inc(j,1,n){
18         int tot=0; inc(l,1,n)tot+=a[i][l]+a[l][j];
19         int kx=i,ky=j; while(kx>=1&&ky>=1)tot+=a[kx][ky],kx--,ky--;
20         kx=i; ky=j; while(kx<=n&&ky<=n)tot+=a[kx][ky],kx++,ky++;
21         kx=i; ky=j; while(kx>=1&&ky<=n)tot+=a[kx][ky],kx--,ky++;
22         kx=i; ky=j; while(kx<=n&&ky>=1)tot+=a[kx][ky],kx++,ky--;
23         tot-=5*a[i][j]; if(tot==k)ans++;
24     }
25     printf("%d",ans); return 0;
26 }

 

20160812

bzoj1709[Usaco2007 Oct]Super Paintball超级弹珠*

原文:http://www.cnblogs.com/YuanZiming/p/5774504.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!