码迷,mamicode.com
首页 > 其他好文 > 详细

2021山东省赛Dyson Box|模拟、找规律

时间:2021-05-24 07:44:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

2021山东省赛Dyson Box|模拟、找规律

标签:scanf   坐标   names   space   rgba   std   const   代码   span   

原文地址:https://www.cnblogs.com/kaoru1120/p/14764071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!