1. 程式人生 > >[noip]2014複賽提高組day2 無線網路發射器選址

[noip]2014複賽提高組day2 無線網路發射器選址

本蒟蒻自己想的方法,非常好,哈哈哈哈哈哈哈 

#include<iostream>//生死有命,富貴在天!! 
#include<cstdio>
using namespace std;
int d,n,x,y,k,s[10000][10000],x1,y1,max1,tims;
int main()
{
	//freopen("wireless.in","w",stdin);
	//freopen("wireless.out","r",stdout);
	cin>>d;cin>>n;
	for(int i=1;i<=n;i++)
	 {
	 	cin>>x>>y>>k;
	 	s[x][y]+=k;
        for(int j=0;j<=d;j++)
         {
           x1=x-j;
		   for(int m=0;m<=d;m++)
		    {
		    	y1=y-m;
		    	if(x1!=x||y1!=y)
		    	 if(x1>=0&&y1>=0&&x1<129&&y1<129)//注意邊界
		    	 s[x1][y1]+=k;
		    }	
         }
        for(int j=0;j<=d;j++)
		 {
		 	x1=x-j;
		 	for(int m=0;m<=d;m++)
		 	 {
		 	 	y1=y+m;
		 	 	if(x1!=x&&y1!=y)
		 	 	 if(x1>=0&&y1>=0&&x1<129&&y1<129)
		 	 	 s[x1][y1]+=k;
		 	 }
		 } 
		for(int j=0;j<=d;j++)
		 {
		 	x1=x+j;
		 	for(int m=0;m<=d;m++)
		 	 {
		 	 	y1=y+m;
		 	 	if(x1!=x||y1!=y)
		 	 	 if(x1>=0&&y1>=0&&x1<129&&y1<129)
		 	 	 s[x1][y1]+=k;
		 	 }
		 }
		 for(int j=0;j<=d;j++)
		 {
		 	x1=x+j;
		 	for(int m=0;m<=d;m++)
		 	 {
		 	 	y1=y-m;
		 	 	if(x1!=x&&y1!=y)
		 	 	 if(x1>=0&&y1>=0&&x1<129&&y1<129)
		 	 	 s[x1][y1]+=k;
		 	 }
		 }  
	 }
	 for(int i=0;i<129;i++)
	  for(int j=0;j<129;j++)
	   {
	   	 max1=max(max1,s[i][j]); 
	   }
	 for(int i=0;i<129;i++)
	  for(int j=0;j<129;j++)
	   if(s[i][j]==max1)
	    tims++;	 
	cout<<tims<<" "<<max1;
	//fclose(stdin);fclose(stdout);
	return 0;
}