zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",cas++,ans2,ans1);
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    51nod-1420-贪心
    51nod-1455-dp/缩小范围
    51nod-1574-排列转换
    简单的鼠标滚轮事件
    数组去重
    模仿jq里的选择器和color样式
    在页面里写个动态本地时间
    使用css中的flex布局弹性手风琴效果
    bootstrap中如何多次使用一个摸态框
    使用css让文字两端对齐
  • 原文地址:https://www.cnblogs.com/scaulok/p/9744000.html
Copyright © 2011-2022 走看看