标签:scanf 坐标 names space rgba std const 代码 span
题意:二维空间里放了n个盒子,有水平往左和竖直往下两种重力,求重力作用之后形成的轮廓周长。
解析:
用数组分别存储xi、yi坐标下盒子的数量,分类讨论:
首先先把盒子的周长加上,即+4
1.如果底下有接触-2
2.如果左边有接触-2
3.如果右边有接触-2
水平和垂直都适用于此方法
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N = 2e5+10; 4 int resx,resy; 5 int dirx[N]; 6 int diry[N]; 7 int n; 8 9 int down() 10 { 11 return 2; 12 } 13 14 int left() 15 { 16 return 2; 17 } 18 19 int right() 20 { 21 return 2; 22 } 23 24 int solvex(int x) 25 { 26 resx+=4; 27 if(dirx[x]!=0)resx-=down(); 28 if(dirx[x-1]>dirx[x])resx-=left(); 29 if(dirx[x+1]>dirx[x])resx-=right(); 30 dirx[x]++; 31 return resx; 32 } 33 34 int solvey(int x) 35 { 36 resy+=4; 37 if(diry[x]!=0)resy-=down(); 38 if(diry[x-1]>diry[x])resy-=left(); 39 if(diry[x+1]>diry[x])resy-=right(); 40 diry[x]++; 41 return resy; 42 } 43 44 int main() 45 { 46 scanf("%d",&n); 47 for(int i=1;i<=n;i++) 48 { 49 int dx,dy; 50 scanf("%d%d",&dx,&dy); 51 printf("%d %d\n",solvex(dx),solvey(dy)); 52 } 53 return 0; 54 }
标签:scanf 坐标 names space rgba std const 代码 span
原文地址:https://www.cnblogs.com/kaoru1120/p/14764071.html