• Hangzhou Invitation Preday


      有点惊险的一天。

      早上11点去杭州的飞机,我和队友们本来计划9点从五山出发的,结果拖迟了十几分钟。幸运的是,地铁速度够快,压哨2分钟从取票处拿到机票了。

      飞机飞了两个钟就到杭州,然后我们坐机场大巴到武林门,再转的士到酒店。自费的比赛,开支各种心疼。TAT

      到了酒店,我们入住一间3人房,设备足够简陋,居然还要一人100块一个晚上,继续心疼。TAT

      然后,查了一下地图,酒店是多么的偏僻。_(:з」∠)_本来以为是在浙工大附近住的,然后我们就可以自助去西湖游一下,最后看到这么偏僻的地方,出去市中心打的要50块,坐公交6点多就收车了,最后就只好决定在酒店呆3天算了。

      晚餐没有自助餐,不过还是挺丰富的,除了一人一份菜,白饭任拿,饭还送到酒店房间来,勉强没那么多怨言了。

     然后剩下几个钟,就一直卡一道LOJ的几何题1313,以为早上想到的思路应该没错了,结果敲出来还是各种WA。

      1 #include <cstdio>
      2 #include <algorithm>
      3 #include <iostream>
      4 #include <cstring>
      5 
      6 using namespace std;
      7 
      8 struct Point {
      9     int x, y;
     10     Point() {}
     11     Point(int x, int y) : x(x), y(y) {}
     12 } ;
     13 Point operator + (Point a, Point b) { return Point(a.x + b.x, a.y + b.y);}
     14 Point operator - (Point a, Point b) { return Point(a.x - b.x, a.y - b.y);}
     15 bool operator < (Point a, Point b) { return a.x < b.x || a.x == b.x < a.y < b.y;}
     16 inline int crossDet(Point a, Point b) { return a.x * b.y - a.y * b.x;}
     17 inline int crossDet(Point o, Point a, Point b) { return crossDet(a - o, b - o);}
     18 inline int dotDet(Point a, Point b) { return a.x * b.x + a.y * b.y;}
     19 
     20 inline bool onSeg(Point p, Point a, Point b) { return crossDet(p, a, b) == 0 && dotDet(a - p, b - p) < 0;}
     21 
     22 int ptInPoly(Point p, Point *poly, int sz) {
     23     int wn = 0;
     24     poly[sz] = poly[0];
     25     for (int i = 0; i < sz; i++) {
     26         if (onSeg(p, poly[i], poly[i + 1])) return -1;
     27         int k = crossDet(poly[i], poly[i + 1], p);
     28         int d1 = poly[i].y - p.y;
     29         int d2 = poly[i + 1].y - p.y;
     30         if (k > 0 && d1 <= 0 && d2 > 0) wn++;
     31         if (k < 0 && d2 <= 0 && d1 > 0) wn--;
     32     }
     33     if (wn != 0) return 1;
     34     return 0;
     35 }
     36 
     37 int andrew(Point *pt, int n, Point *ch) {
     38     int m = 0;
     39     sort(pt, pt + n);
     40     for (int i = 0; i < n; i++) {
     41         while (m > 1 && crossDet(ch[m - 2], ch[m - 1], pt[i]) <= 0) m--;
     42         ch[m++] = pt[i];
     43     }
     44     int k = m;
     45     for (int i = n - 2; i >= 0; i--) {
     46         while (m > k && crossDet(ch[m - 2], ch[m - 1], pt[i]) <= 0) m--;
     47         ch[m++] = pt[i];
     48     }
     49     if (n > 1) m--;
     50     return m;
     51 }
     52 
     53 const int N = 111;
     54 
     55 int inPoly(Point *mines, int m, Point *poly, int p) {
     56     int ret = 0;
     57     for (int i = 0; i < m; i++) {
     58         if (int t = ptInPoly(mines[i], poly, p)) {
     59             if (t == -1) {
     60                 puts("shit!!!");
     61                 while (1) ;
     62             }
     63             mines[ret++] = mines[i];
     64         }
     65     }
     66     return ret;
     67 }
     68 
     69 bool mat[N][N], res[N][N], cur[N][N];
     70 
     71 bool allOnLeft(Point a, Point b, Point *s, int m) {
     72     for (int i = 0; i < m; i++) {
     73         if (crossDet(a, b, s[i]) >= 0) return false;
     74     }
     75     return true;
     76 }
     77 
     78 int work(Point *holes, int h, Point *mines, int m) {
     79     memset(mat, 0, sizeof(mat));
     80     memset(res, 0, sizeof(res));
     81     for (int i = 0; i < h; i++) {
     82         for (int j = 0; j < h; j++) {
     83             if (i == j) continue;
     84             if (allOnLeft(holes[i], holes[j], mines, m)) mat[i][j] = res[i][j] = true;
     85         }
     86     }
     87 //    for (int i = 0; i < h; i++) {
     88 //        cout << "holes " << holes[i].x << ' ' << holes[i].y << endl;
     89 //    }
     90 //    for (int i = 0; i < m; i++) {
     91 //        cout << "mines " << mines[i].x << ' ' << mines[i].y << endl;
     92 //    }
     93 //    for (int i = 0; i < h; i++) {
     94 //        for (int j = 0; j < h; j++) {
     95 //            cout << mat[i][j];
     96 //        }
     97 //        cout << endl;
     98 //    }
     99 //    cout << "check" << endl;
    100     for (int t = 1; t <= h; t++) {
    101         for (int i = 0; i < h; i++) {
    102             if (res[i][i]) {
    103 //                cout << i << endl;
    104                 return t;
    105             }
    106             for (int j = 0; j < h; j++) {
    107                 cur[i][j] = res[i][j];
    108             }
    109         }
    110         memset(res, 0, sizeof(res));
    111         for (int i = 0; i < h; i++) {
    112             for (int k = 0; k < h; k++) {
    113                 if (cur[i][k]) {
    114                     for (int j = 0; j < h; j++) {
    115                         res[i][j] = cur[i][k] && mat[k][j];
    116                     }
    117                 }
    118             }
    119         }
    120     }
    121     puts("damn!");
    122     while (1) ;
    123     return 0;
    124 }
    125 
    126 int main() {
    127     freopen("in", "r", stdin);
    128     int T, n, m, g, p;
    129     Point holes[N], mines[N], poly[N];
    130     cin >> T;
    131     for (int cas = 1; cas <= T; cas++) {
    132         cin >> n >> m >> g >> p;
    133         for (int i = 0; i < n; i++) cin >> holes[i].x >> holes[i].y;
    134         for (int i = 0; i < m; i++) cin >> mines[i].x >> mines[i].y;
    135         int t = andrew(holes, n, poly);
    136 //        cout << "Convex Hull" << endl;
    137         int k = inPoly(mines, m, poly, t);
    138 //        cout << "inPoly" << endl;
    139         int ans1 = (m - k) * g;
    140         t = k ? work(holes, n, mines, k) : 0;
    141         int ans2 = t * p;
    142 //        cout << ans1 << ' ' << ans2 << endl;
    143         cout << "Case " << cas << ": " << ans1 + ans2 << endl;
    144     }
    145     return 0;
    146 }
    LOJ 1313

      好不爽的一个晚上。。

      明天热身,求后天可以爆状态。

    ——written by Lyon

  • 相关阅读:
    反转链表
    《Java JDK7 学习笔记》课后练习题1
    《Java JDK7 学习笔记》课后练习题2
    《java JDK7 学习笔记》课后练习题3
    SQL与NoSQL(关系型与非关系型)数据库的区别
    编程中编码的来源及发展
    JDK7学习笔记之基础类型
    《java JDK7学习笔记》之跨平台与路径设置
    《java jdk7学习笔记》之java三大平台
    VS2015安装之后加装SQL SERVER2014的步骤
  • 原文地址:https://www.cnblogs.com/LyonLys/p/20130601_Lyon.html
Copyright © 2020-2023  润新知