ACM-ICPC 2017 沈阳赛区现场赛 M. Wandering Robots && HDU 6229

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6229

参考题解:https://blog.csdn.net/lifelikes/article/details/78452558

        https://www.cnblogs.com/cxhscst2/p/8215717.html

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define ull unsigned long long
 5 #define mst(a,b) memset((a),(b),sizeof(a))
 6 #define mp(a,b) make_pair(a,b)
 7 #define pi acos(-1)
 8 #define pii pair<int,int>
 9 #define pb push_back
10 const int INF = 0x3f3f3f3f;
11 const double eps = 1e-6;
12 const int MAXN = 15e4 + 10;
13 const int MAXM = 2e6 + 10;
14
15 int n,k;
16 int dx[4] = {-1,0,0,1};
17 int dy[4] = {0,-1,1,0};
18 map<pii,bool>ma;
19 map<pii,int>sub;
20
21 bool judge(int x,int y) {
22     if(x < 0 || x >= n || y < 0 || y >= n) return false;
23     return true;
24 }
25
26 int check(int x,int y) {
27     if(x == 0 || x == n - 1) {
28         if(y == 0 || y == n - 1) return 3;
29         else return 4;
30     } else {
31         if(y == 0 || y == n - 1) return 4;
32         else return 5;
33     }
34 }
35
36 int main() {
37 #ifdef local
38     freopen("data.txt", "r", stdin);
39 #endif
40     int cas = 1;
41     int t;
42     scanf("%d",&t);
43     while(t--) {
44         ma.clear();
45         sub.clear();
46         scanf("%d%d",&n,&k);
47         if(n == 1) {
48             printf("Case #%d: 1/1\n",cas++);
49             continue;
50         }
51         ll ans1 = 16ll * (n - 2) + 5ll * (n - 2) * (n - 2) + 12;
52         ll ans2 = 5ll * (1ll * n * (n + 1) / 2 - 2ll * (n - 2) - 3) + 8ll * (n - 2) + 9;
53         while(k--) {
54             int x,y;
55             scanf("%d%d",&x,&y);
56             if(ma[mp(x,y)]) {
57                 ans1 -= sub[mp(x,y)];
58                 if(x + y >= n - 1) ans2 -= sub[mp(x,y)];
59                 sub[mp(x,y)] = 0;
60             } else {
61                 ma[mp(x,y)] = true;
62                 ans1 -= check(x,y);
63                 if(x + y >= n - 1) ans2 -= check(x,y);
64                 sub[mp(x,y)] = 0;
65             }
66             for(int i = 0; i < 4; i++) {
67                 int nx = x + dx[i], ny = y + dy[i];
68                 if(!judge(nx,ny)) continue;
69                 if(ma[mp(nx,ny)]) {
70                     if(sub[mp(nx,ny)]) {
71                         ans1--;
72                         if(nx + ny >= n - 1) ans2--;
73                         sub[mp(nx,ny)]--;
74                     }
75                 } else {
76                     ma[mp(nx,ny)] = true;
77                     sub[mp(nx,ny)] = check(nx,ny) - 1;
78                     ans1--;
79                     if(nx + ny >= n - 1) ans2--;
80                 }
81             }
82         }
83         ll gcd = __gcd(ans1,ans2);
84         ans1 /= gcd, ans2 /= gcd;
85         printf("Case #%d: %lld/%lld\n",cas++,ans2,ans1);
86     }
87     return 0;
88 }

原文地址:https://www.cnblogs.com/scaulok/p/9744000.html

时间: 2024-08-15 20:55:20

ACM-ICPC 2017 沈阳赛区现场赛 M. Wandering Robots && HDU 6229的相关文章

ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path &amp;&amp; HDU 6223

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223 参考题解:https://blog.csdn.net/qq_40482495/article/details/78492841 注意优先队列自定义比较级的用法!! 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define ull unsigned long long 5 #define

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5984 Pocky 题意 给出一根棒子(可以吃的)的长度x和切割过程中不能小于的长度d,每次随机的选取一个位置切开,吃掉左边的一半,对右边的棒子同样操作,直至剩余的长度不大于d时停止.现在给出x和d,问切割次数的数学期望是多少. 解题思路 当看到第二个样例2 1时,结果是1.693147,联想到ln

2014ACM/ICPC亚洲区鞍山赛区现场赛——题目重现

2014ACM/ICPC亚洲区鞍山赛区现场赛--题目重现 题目链接 5小时内就搞了5题B.C.D.E,I. H题想到要打表搞了,可惜时间不够,后面打出表试了几下过了- - K题过的人也比较多,感觉是个几何旋转+ploya,但是几何实在不行没什么想法 B:这题就是一个大模拟,直接数组去模拟即可,注意细节就能过 C:类似大白上一题红蓝三角形的, 每个数字找一个互质和一个不互质个数,除掉重复就直接除2,然后总的C(n, 3)减去即可,问题在怎么处理一个数字互质和不互质的,其实只要处理出不互质的即可,这

hdu 5956 The Elder 2016ACM/ICPC沈阳赛区现场赛I

Problem Description Once upon a time, in the mystical continent, there is a frog kingdom, ruled by the oldest frog, the Elder. The kingdom consists of N cities, numbered from east to west. The 1-th city, which is located to the east of others, is the

ACM总结——2017ACM-ICPC北京赛区现场赛总结

现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情理之中意料之外了,我们本来以为自己会在北京赛区拿个倒数20什么的(比赛前听说北京赛区是最难的),事实上虽然不是很简单,但是也绝对没有想象中难(以为会A1或者零来着). 说下比赛前吧~赛前一星期是软考,所有自己训练很少,也正是这样,这场比赛算是抱了大腿(自己太菜了..)!咳咳~虽然软考复习了两周,但是

2014ACM/ICPC亚洲区鞍山赛区现场赛1009Osu!

鞍山的签到题,求两点之间的距离除以时间的最大值.直接暴力过的. A - Osu! Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5078 Appoint description:  System Crawler  (2014-10-22) Description Osu! is a very popular music game. B

hdu5512 Pagodas(2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学) )

Pagodas Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 14 Accepted Submission(s): 13 Problem Description n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai M

HDU 4119 Isabella&#39;s Message (2011年成都赛区现场赛I题)

1.题目描述:点击打开链接 2.解题思路:本题是一道模拟题,要求模拟一个解密的过程,练习这么久第一次做模拟题1Y了,内心还是很激动的~.只需要根据题意,记录* 所在的位置即可,然后每次都是先解密,后顺时针旋转90度.把每次解密的信息放到一个vector里,接下来就是连接它们,得到解密后的字符串,在map中查找这些单词是否存在即可.如果都存在,就把这条解密信息放到ans中,最后对ans排序,输出ans[0]就是答案. 3.代码: //#pragma comment(linker, "/STACK:

2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)HDU6225.Little Boxes-大数加法

整理代码... Little Boxes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2304    Accepted Submission(s): 818 Problem Description Little boxes on the hillside.Little boxes made of ticky-tacky.Littl