zoukankan      html  css  js  c++  java
  • 【HDOJ】1107 武林

    简单模拟,题目数据太弱太弱了。

      1 /* 1107 */
      2 #include <iostream>
      3 #include <cstdio>
      4 #include <cstring>
      5 #include <cstdlib>
      6 #include <vector>
      7 #include <algorithm>
      8 using namespace std;
      9 
     10 typedef struct node_t {
     11     int x, y;        // position
     12     int nl;            // 内力
     13     int wy;            // 武艺
     14     int hp;            // 生命
     15     bool hasFight;
     16     int d;        // direction: 0:up, down:1
     17     node_t() {}
     18     node_t(int xx, int yy, int nnl, int wwy, int hhp, bool h=false, int dd=0) {
     19         x = xx; y = yy; nl = nnl; wy = wwy;
     20         hp = hhp; hasFight=h; d = dd;
     21     }
     22 } node_t;
     23 
     24 int map[15][15];
     25 vector<node_t> vnodes[3];    // 0:少林, 1:武当, 2:峨眉
     26 int dir[3][2][2] = {
     27     { {1, 0}, {-1, 0} },
     28     { {0, 1}, {-1, 0} },
     29     { {1, 1}, {-1, -1} }
     30 };
     31 int nn[3];
     32 int t, n;
     33 
     34 void init() {
     35     memset(map, 0, sizeof(map));
     36     for (int i=0; i<3; ++i) {
     37         vnodes[i].clear();
     38         nn[i] = 0;
     39     }
     40 }
     41 
     42 inline bool check(int x, int y) {
     43     return x>0 && x<13 && y>0 && y<13;
     44 }
     45 
     46 int getDPS(int i, int j) {
     47     double tmp;
     48     
     49     if (i == 0) {
     50         tmp = (0.5*vnodes[i][j].nl + 0.5*vnodes[i][j].wy) * (vnodes[i][j].hp + 10.) / 100.0;
     51     } else if (i == 1) {
     52         tmp = (0.8*vnodes[i][j].nl + 0.2*vnodes[i][j].wy) * (vnodes[i][j].hp + 10.) / 100.0;
     53     } else {
     54         tmp = (0.2*vnodes[i][j].nl + 0.8*vnodes[i][j].wy) * (vnodes[i][j].hp + 10.) / 100.0;
     55     }
     56     
     57     return (int) tmp;
     58 }
     59 
     60 void fight() {
     61     int dps0, dps1;
     62     int i, j, k, p;
     63     int ii, jj, kk;
     64     int x, y;
     65     
     66     for (i=0; i<3; ++i) {
     67         for (j=0; j<nn[i]; ++j) {
     68             if (vnodes[i][j].hp>0 && map[vnodes[i][j].x][vnodes[i][j].y]==2 && !vnodes[i][j].hasFight) {
     69                 x = vnodes[i][j].x;
     70                 y = vnodes[i][j].y;
     71                 vnodes[i][j].hasFight = true;
     72                 for (ii=0; ii<3; ++ii) {
     73                     if (ii == i)
     74                         continue;
     75                     for (jj=0; jj<nn[ii]; ++jj) {
     76                         if (vnodes[ii][jj].hp>0 && vnodes[ii][jj].x==x && vnodes[ii][jj].y==y) {
     77                             dps0 = getDPS(i, j);
     78                             dps1 = getDPS(ii, jj);
     79                             vnodes[i][j].hp -= dps1;
     80                             vnodes[ii][jj].hp -= dps0;
     81                             vnodes[ii][jj].hasFight = true;
     82                         }
     83                     }
     84                 }
     85             }
     86         }
     87     }
     88 }
     89 
     90 void move() {
     91     int i, j, k;
     92     int x, y, xx, yy;
     93     
     94     for (i=0; i<3; ++i) {
     95         for (j=0; j<nn[i]; ++j) {
     96             vnodes[i][j].hasFight = false;
     97             x = vnodes[i][j].x;
     98             y = vnodes[i][j].y;
     99             --map[x][y];
    100             k = vnodes[i][j].d;
    101             if (i == 0) {
    102                 if (x == 12) k = 1;
    103                 if (x == 1)  k = 0;
    104                 if (k) {
    105                     --x;
    106                 } else {
    107                     ++x;
    108                 }
    109             } else if (i == 1) {
    110                 if (y == 12) k = 1;
    111                 if (y == 1)  k = 0;
    112                 if (k) {
    113                     --y;
    114                 } else {
    115                     ++y;
    116                 }
    117             } else {
    118                 if (x==12 || y==12)
    119                     k = 1;
    120                 if (x==1 || y==1)
    121                     k = 0;
    122                 if ((x==1&&y==12) || (x==12 && y==1))
    123                     /* do nothing */;
    124                 else {
    125                     if (k) {
    126                         --x; --y;
    127                     } else {
    128                         ++x; ++y;
    129                     }
    130                 }
    131             }
    132             vnodes[i][j].d = k;
    133             vnodes[i][j].x = x;
    134             vnodes[i][j].y = y;
    135             ++map[x][y];
    136         }
    137     }
    138 }
    139 
    140 int main() {
    141     int i, j, k, tmp;
    142     int x, y, nl, wy, hp;
    143     char cmd[3];
    144     
    145     #ifndef ONLINE_JUDGE
    146         freopen("data.in", "r", stdin);
    147         freopen("data.out", "w", stdout);
    148     #endif
    149     
    150     scanf("%d", &t);
    151     while (t--) {
    152         init();
    153         scanf("%d", &n);
    154         while (scanf("%s", cmd)!=EOF && (cmd[0]!='0')) {
    155             scanf("%d %d %d %d %d", &x, &y, &nl, &wy, &hp);
    156             if (cmd[0] == 'S') j = 0;
    157             if (cmd[0] == 'W') j = 1;
    158             if (cmd[0] == 'E') j = 2;
    159             ++map[x][y];
    160             vnodes[j].push_back(node_t(x,y,nl,wy,hp));
    161             ++nn[j];
    162         }
    163         while (n--) {
    164             fight();
    165             move();
    166         }
    167         for (i=0; i<3; ++i) {
    168             k = 0;
    169             n = 0;
    170             for (j=0; j<nn[i]; ++j) {
    171                 if (vnodes[i][j].hp > 0) {
    172                     k += vnodes[i][j].hp;
    173                     ++n;
    174                 }
    175             }
    176             printf("%d %d
    ", n, k);
    177         }
    178         puts("***");
    179     }
    180     
    181     return 0;
    182 }
  • 相关阅读:
    CentOS随笔
    CentOS随笔
    CentOS随笔
    CentOS随笔
    产品从生到死的N宗罪
    即将结束的2015。
    Mvvm
    android 热补丁修复框架
    反编译APK
    关于短视频
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4209567.html
Copyright © 2011-2022 走看看