zoukankan      html  css  js  c++  java
  • poj1113 Wall 凸包问题 官方数据

    http://poj.org/problem?id=1113

    题意:给定n个点,建一个围墙,围住所有点,并且墙与所有点的距离不得小于L,求这个墙最小的长度。

    解题:凸包边长+L半径圆周长

    copy一个证明:http://blog.sina.com.cn/s/blog_687916bf0100jq9g.html

    证明如下:假如顺时针给出四个点A、B、C、D。组成了凸四边形ABCD。我们不妨过A点作AE垂直于AB,同时过A点再作AF垂直于AD,过B点作BG、BH分别垂直于AB、BC。连结EG,垂线段的长度为L,过A点以AE为半径作一段弧连到AF,同理,使GH成为一段弧。此时EG=AB(边),AB段城墙的最小值为EF+弧EF+弧GH=AB+弧EF+弧GH
    。对所有点进行同样的操作后,可知城墙的最小值=四边形的周长+相应顶点的弧长(半径都为L)之和。
    下面证明这些顶点弧长组成一个圆。依然以前面的四边形为例。A、B、C、D四顶点各成周角,总和为360*4=1440度,四边形内角和为360度,每个顶点作两条垂线,总角度为4*2*90=720度,所以总圆周角为1440-360-720=360度,刚好组成圆。
    所以四边形ABCD的围墙最短= 四边形的周长+圆周长。
    推广到任意多边形,用同样的方法,城墙最短=凸包的周长 + 以L为半径的圆的周长。
    首先,我们得出城墙最短=凸包的周长 + 相应顶点的弧长(半径都为L)之和。
    再证明 相应顶点的弧长(半径都为L)之和=以L为半径的圆的周长。
    事实上,设凸包顶点为n,n个顶点组成n个周角,角度为360*n=2*180*n,凸包的内角和为180*(n-2),作了2*n条垂线,和为2*n*90=180*n,所以总圆周角为2*180*n-180*(n-2)-180*n=360,组成圆。
    in

    3 100
    0 0
    0 3000
    4000 0

    out

    12628

    in

    4 1000
    10000 10000
    10000 -10000
    -10000 -10000
    -10000 10000

    out

    86283

    in

    4 1
    10000 -10000
    -10000 -10000
    -10000 10000
    10000 10000

    out

    80006

    in

    17 2
    5 3
    6 2
    5 1
    4 0
    2 1
    1 1
    2 0
    0 0
    0 2
    1 3
    2 4
    1 2
    2 2
    3 3
    4 2
    5 2
    4 4

    out

    29

    in

    1000 1000
    -8488 5287
    -8455 5340
    -8421 5393
    -8387 5446
    -8353 5498
    -8318 5551
    -8283 5603
    -8248 5655
    -8212 5706
    -8176 5758
    -8140 5809
    -8103 5860
    -8066 5911
    -8029 5962
    -7991 6012
    -7953 6062
    -7915 6112
    -7876 6161
    -7837 6211
    -7798 6260
    -7759 6309
    -7719 6357
    -7679 6406
    -7638 6454
    -7598 6502
    -7557 6549
    -7515 6597
    -7474 6644
    -7432 6691
    -7390 6737
    -7347 6784
    -7305 6830
    -7261 6875
    -7218 6921
    -7175 6966
    -7131 7011
    -7086 7056
    -7042 7100
    -6997 7144
    -6952 7188
    -6907 7232
    -6861 7275
    -6815 7318
    -6769 7360
    -6723 7403
    -6676 7445
    -6629 7487
    -6582 7528
    -6535 7569
    -6487 7610
    -6439 7651
    -6391 7691
    -6343 7731
    -6294 7771
    -6245 7810
    -6196 7849
    -6146 7888
    -6097 7927
    -6047 7965
    -5996 8003
    -5946 8040
    -5895 8077
    -5845 8114
    -5793 8151
    -5742 8187
    -5691 8223
    -5639 8259
    -5587 8294
    -5535 8329
    -5482 8363
    -5429 8398
    -5377 8432
    -5324 8465
    -5270 8499
    -5217 8531
    -5163 8564
    -5109 8596
    -5055 8628
    -5001 8660
    -4946 8691
    -4891 8722
    -4837 8753
    -4781 8783
    -4726 8813
    -4671 8842
    -4615 8871
    -4559 8900
    -4503 8929
    -4447 8957
    -4391 8985
    -4334 9012
    -4277 9039
    -4221 9066
    -4164 9092
    -4106 9118
    -4049 9144
    -3991 9169
    -3934 9194
    -3876 9218
    -3818 9242
    -3760 9266
    -3701 9290
    -3643 9313
    -3584 9336
    -3526 9358
    -3467 9380
    -3408 9401
    -3349 9423
    -3289 9444
    -3230 9464
    -3170 9484
    -3111 9504
    -3051 9523
    -2991 9542
    -2931 9561
    -2871 9579
    -2811 9597
    -2750 9614
    -2690 9631
    -2629 9648
    -2569 9664
    -2508 9680
    -2447 9696
    -2386 9711
    -2325 9726
    -2264 9740
    -2203 9754
    -2141 9768
    -2080 9781
    -2018 9794
    -1957 9807
    -1895 9819
    -1833 9830
    -1772 9842
    -1710 9853
    -1648 9863
    -1586 9873
    -1524 9883
    -1462 9893
    -1399 9902
    -1337 9910
    -1275 9918
    -1213 9926
    -1150 9934
    -1088 9941
    -1025 9947
    -963 9954
    -900 9959
    -838 9965
    -775 9970
    -712 9975
    -650 9979
    -587 9983
    -524 9986
    -461 9989
    -399 9992
    -336 9994
    -273 9996
    -210 9998
    -147 9999
    -85 10000
    -22 10000
    41 10000
    104 9999
    167 9999
    230 9997
    292 9996
    355 9994
    418 9991
    481 9988
    543 9985
    606 9982
    669 9978
    732 9973
    794 9968
    857 9963
    919 9958
    982 9952
    1045 9945
    1107 9939
    1169 9931
    1232 9924
    1294 9916
    1356 9908
    1419 9899
    1481 9890
    1543 9880
    1605 9870
    1667 9860
    1729 9849
    1791 9838
    1852 9827
    1914 9815
    1976 9803
    2037 9790
    2099 9777
    2160 9764
    2222 9750
    2283 9736
    2344 9721
    2405 9707
    2466 9691
    2527 9676
    2587 9659
    2648 9643
    2709 9626
    2769 9609
    2829 9591
    2890 9573
    2950 9555
    3010 9536
    3069 9517
    3129 9498
    3189 9478
    3248 9458
    3308 9437
    3367 9416
    3426 9395
    3485 9373
    3544 9351
    3602 9329
    3661 9306
    3719 9283
    3778 9259
    3836 9235
    3894 9211
    3952 9186
    4009 9161
    4067 9136
    4124 9110
    4181 9084
    4238 9058
    4295 9031
    4352 9004
    4408 8976
    4464 8948
    4521 8920
    4576 8891
    4632 8862
    4688 8833
    4743 8803
    4798 8774
    4854 8743
    4908 8713
    4963 8682
    5017 8650
    5072 8618
    5126 8586
    5180 8554
    5233 8521
    5287 8488
    5340 8455
    5393 8421
    5446 8387
    5498 8353
    5551 8318
    5603 8283
    5655 8248
    5706 8212
    5758 8176
    5809 8140
    5860 8103
    5911 8066
    5962 8029
    6012 7991
    6062 7953
    6112 7915
    6161 7876
    6211 7837
    6260 7798
    6309 7759
    6357 7719
    6406 7679
    6454 7638
    6502 7598
    6549 7557
    6597 7515
    6644 7474
    6691 7432
    6737 7390
    6784 7347
    6830 7305
    6875 7261
    6921 7218
    6966 7175
    7011 7131
    7056 7086
    7100 7042
    7144 6997
    7188 6952
    7232 6907
    7275 6861
    7318 6815
    7360 6769
    7403 6723
    7445 6676
    7487 6629
    7528 6582
    7569 6535
    7610 6487
    7651 6439
    7691 6391
    7731 6343
    7771 6294
    7810 6245
    7849 6196
    7888 6146
    7927 6097
    7965 6047
    8003 5996
    8040 5946
    8077 5895
    8114 5845
    8151 5793
    8187 5742
    8223 5691
    8259 5639
    8294 5587
    8329 5535
    8363 5482
    8398 5429
    8432 5377
    8465 5324
    8499 5270
    8531 5217
    8564 5163
    8596 5109
    8628 5055
    8660 5001
    8691 4946
    8722 4891
    8753 4837
    8783 4781
    8813 4726
    8842 4671
    8871 4615
    8900 4559
    8929 4503
    8957 4447
    8985 4391
    9012 4334
    9039 4277
    9066 4221
    9092 4164
    9118 4106
    9144 4049
    9169 3991
    9194 3934
    9218 3876
    9242 3818
    9266 3760
    9290 3701
    9313 3643
    9336 3584
    9358 3526
    9380 3467
    9401 3408
    9423 3349
    9444 3289
    9464 3230
    9484 3170
    9504 3111
    9523 3051
    9542 2991
    9561 2931
    9579 2871
    9597 2811
    9614 2750
    9631 2690
    9648 2629
    9664 2569
    9680 2508
    9696 2447
    9711 2386
    9726 2325
    9740 2264
    9754 2203
    9768 2141
    9781 2080
    9794 2018
    9807 1957
    9819 1895
    9830 1833
    9842 1772
    9853 1710
    9863 1648
    9873 1586
    9883 1524
    9893 1462
    9902 1399
    9910 1337
    9918 1275
    9926 1213
    9934 1150
    9941 1088
    9947 1025
    9954 963
    9959 900
    9965 838
    9970 775
    9975 712
    9979 650
    9983 587
    9986 524
    9989 461
    9992 399
    9994 336
    9996 273
    9998 210
    9999 147
    10000 85
    10000 22
    10000 -41
    9999 -104
    9999 -167
    9997 -230
    9996 -292
    9994 -355
    9991 -418
    9988 -481
    9985 -543
    9982 -606
    9978 -669
    9973 -732
    9968 -794
    9963 -857
    9958 -919
    9952 -982
    9945 -1045
    9939 -1107
    9931 -1169
    9924 -1232
    9916 -1294
    9908 -1356
    9899 -1419
    9890 -1481
    9880 -1543
    9870 -1605
    9860 -1667
    9849 -1729
    9838 -1791
    9827 -1852
    9815 -1914
    9803 -1976
    9790 -2037
    9777 -2099
    9764 -2160
    9750 -2222
    9736 -2283
    9721 -2344
    9707 -2405
    9691 -2466
    9676 -2527
    9659 -2587
    9643 -2648
    9626 -2709
    9609 -2769
    9591 -2829
    9573 -2890
    9555 -2950
    9536 -3010
    9517 -3069
    9498 -3129
    9478 -3189
    9458 -3248
    9437 -3308
    9416 -3367
    9395 -3426
    9373 -3485
    9351 -3544
    9329 -3602
    9306 -3661
    9283 -3719
    9259 -3778
    9235 -3836
    9211 -3894
    9186 -3952
    9161 -4009
    9136 -4067
    9110 -4124
    9084 -4181
    9058 -4238
    9031 -4295
    9004 -4352
    8976 -4408
    8948 -4464
    8920 -4521
    8891 -4576
    8862 -4632
    8833 -4688
    8803 -4743
    8774 -4798
    8743 -4854
    8713 -4908
    8682 -4963
    8650 -5017
    8618 -5072
    8586 -5126
    8554 -5180
    8521 -5233
    8488 -5287
    8455 -5340
    8421 -5393
    8387 -5446
    8353 -5498
    8318 -5551
    8283 -5603
    8248 -5655
    8212 -5706
    8176 -5758
    8140 -5809
    8103 -5860
    8066 -5911
    8029 -5962
    7991 -6012
    7953 -6062
    7915 -6112
    7876 -6161
    7837 -6211
    7798 -6260
    7759 -6309
    7719 -6357
    7679 -6406
    7638 -6454
    7598 -6502
    7557 -6549
    7515 -6597
    7474 -6644
    7432 -6691
    7390 -6737
    7347 -6784
    7305 -6830
    7261 -6875
    7218 -6921
    7175 -6966
    7131 -7011
    7086 -7056
    7042 -7100
    6997 -7144
    6952 -7188
    6907 -7232
    6861 -7275
    6815 -7318
    6769 -7360
    6723 -7403
    6676 -7445
    6629 -7487
    6582 -7528
    6535 -7569
    6487 -7610
    6439 -7651
    6391 -7691
    6343 -7731
    6294 -7771
    6245 -7810
    6196 -7849
    6146 -7888
    6097 -7927
    6047 -7965
    5996 -8003
    5946 -8040
    5895 -8077
    5845 -8114
    5793 -8151
    5742 -8187
    5691 -8223
    5639 -8259
    5587 -8294
    5535 -8329
    5482 -8363
    5429 -8398
    5377 -8432
    5324 -8465
    5270 -8499
    5217 -8531
    5163 -8564
    5109 -8596
    5055 -8628
    5001 -8660
    4946 -8691
    4891 -8722
    4837 -8753
    4781 -8783
    4726 -8813
    4671 -8842
    4615 -8871
    4559 -8900
    4503 -8929
    4447 -8957
    4391 -8985
    4334 -9012
    4277 -9039
    4221 -9066
    4164 -9092
    4106 -9118
    4049 -9144
    3991 -9169
    3934 -9194
    3876 -9218
    3818 -9242
    3760 -9266
    3701 -9290
    3643 -9313
    3584 -9336
    3526 -9358
    3467 -9380
    3408 -9401
    3349 -9423
    3289 -9444
    3230 -9464
    3170 -9484
    3111 -9504
    3051 -9523
    2991 -9542
    2931 -9561
    2871 -9579
    2811 -9597
    2750 -9614
    2690 -9631
    2629 -9648
    2569 -9664
    2508 -9680
    2447 -9696
    2386 -9711
    2325 -9726
    2264 -9740
    2203 -9754
    2141 -9768
    2080 -9781
    2018 -9794
    1957 -9807
    1895 -9819
    1833 -9830
    1772 -9842
    1710 -9853
    1648 -9863
    1586 -9873
    1524 -9883
    1462 -9893
    1399 -9902
    1337 -9910
    1275 -9918
    1213 -9926
    1150 -9934
    1088 -9941
    1025 -9947
    963 -9954
    900 -9959
    838 -9965
    775 -9970
    712 -9975
    650 -9979
    587 -9983
    524 -9986
    461 -9989
    399 -9992
    336 -9994
    273 -9996
    210 -9998
    147 -9999
    85 -10000
    22 -10000
    -41 -10000
    -104 -9999
    -167 -9999
    -230 -9997
    -292 -9996
    -355 -9994
    -418 -9991
    -481 -9988
    -543 -9985
    -606 -9982
    -669 -9978
    -732 -9973
    -794 -9968
    -857 -9963
    -919 -9958
    -982 -9952
    -1045 -9945
    -1107 -9939
    -1169 -9931
    -1232 -9924
    -1294 -9916
    -1356 -9908
    -1419 -9899
    -1481 -9890
    -1543 -9880
    -1605 -9870
    -1667 -9860
    -1729 -9849
    -1791 -9838
    -1852 -9827
    -1914 -9815
    -1976 -9803
    -2037 -9790
    -2099 -9777
    -2160 -9764
    -2222 -9750
    -2283 -9736
    -2344 -9721
    -2405 -9707
    -2466 -9691
    -2527 -9676
    -2587 -9659
    -2648 -9643
    -2709 -9626
    -2769 -9609
    -2829 -9591
    -2890 -9573
    -2950 -9555
    -3010 -9536
    -3069 -9517
    -3129 -9498
    -3189 -9478
    -3248 -9458
    -3308 -9437
    -3367 -9416
    -3426 -9395
    -3485 -9373
    -3544 -9351
    -3602 -9329
    -3661 -9306
    -3719 -9283
    -3778 -9259
    -3836 -9235
    -3894 -9211
    -3952 -9186
    -4009 -9161
    -4067 -9136
    -4124 -9110
    -4181 -9084
    -4238 -9058
    -4295 -9031
    -4352 -9004
    -4408 -8976
    -4464 -8948
    -4521 -8920
    -4576 -8891
    -4632 -8862
    -4688 -8833
    -4743 -8803
    -4798 -8774
    -4854 -8743
    -4908 -8713
    -4963 -8682
    -5017 -8650
    -5072 -8618
    -5126 -8586
    -5180 -8554
    -5233 -8521
    -5287 -8488
    -5340 -8455
    -5393 -8421
    -5446 -8387
    -5498 -8353
    -5551 -8318
    -5603 -8283
    -5655 -8248
    -5706 -8212
    -5758 -8176
    -5809 -8140
    -5860 -8103
    -5911 -8066
    -5962 -8029
    -6012 -7991
    -6062 -7953
    -6112 -7915
    -6161 -7876
    -6211 -7837
    -6260 -7798
    -6309 -7759
    -6357 -7719
    -6406 -7679
    -6454 -7638
    -6502 -7598
    -6549 -7557
    -6597 -7515
    -6644 -7474
    -6691 -7432
    -6737 -7390
    -6784 -7347
    -6830 -7305
    -6875 -7261
    -6921 -7218
    -6966 -7175
    -7011 -7131
    -7056 -7086
    -7100 -7042
    -7144 -6997
    -7188 -6952
    -7232 -6907
    -7275 -6861
    -7318 -6815
    -7360 -6769
    -7403 -6723
    -7445 -6676
    -7487 -6629
    -7528 -6582
    -7569 -6535
    -7610 -6487
    -7651 -6439
    -7691 -6391
    -7731 -6343
    -7771 -6294
    -7810 -6245
    -7849 -6196
    -7888 -6146
    -7927 -6097
    -7965 -6047
    -8003 -5996
    -8040 -5946
    -8077 -5895
    -8114 -5845
    -8151 -5793
    -8187 -5742
    -8223 -5691
    -8259 -5639
    -8294 -5587
    -8329 -5535
    -8363 -5482
    -8398 -5429
    -8432 -5377
    -8465 -5324
    -8499 -5270
    -8531 -5217
    -8564 -5163
    -8596 -5109
    -8628 -5055
    -8660 -5001
    -8691 -4946
    -8722 -4891
    -8753 -4837
    -8783 -4781
    -8813 -4726
    -8842 -4671
    -8871 -4615
    -8900 -4559
    -8929 -4503
    -8957 -4447
    -8985 -4391
    -9012 -4334
    -9039 -4277
    -9066 -4221
    -9092 -4164
    -9118 -4106
    -9144 -4049
    -9169 -3991
    -9194 -3934
    -9218 -3876
    -9242 -3818
    -9266 -3760
    -9290 -3701
    -9313 -3643
    -9336 -3584
    -9358 -3526
    -9380 -3467
    -9401 -3408
    -9423 -3349
    -9444 -3289
    -9464 -3230
    -9484 -3170
    -9504 -3111
    -9523 -3051
    -9542 -2991
    -9561 -2931
    -9579 -2871
    -9597 -2811
    -9614 -2750
    -9631 -2690
    -9648 -2629
    -9664 -2569
    -9680 -2508
    -9696 -2447
    -9711 -2386
    -9726 -2325
    -9740 -2264
    -9754 -2203
    -9768 -2141
    -9781 -2080
    -9794 -2018
    -9807 -1957
    -9819 -1895
    -9830 -1833
    -9842 -1772
    -9853 -1710
    -9863 -1648
    -9873 -1586
    -9883 -1524
    -9893 -1462
    -9902 -1399
    -9910 -1337
    -9918 -1275
    -9926 -1213
    -9934 -1150
    -9941 -1088
    -9947 -1025
    -9954 -963
    -9959 -900
    -9965 -838
    -9970 -775
    -9975 -712
    -9979 -650
    -9983 -587
    -9986 -524
    -9989 -461
    -9992 -399
    -9994 -336
    -9996 -273
    -9998 -210
    -9999 -147
    -10000 -85
    -10000 -22
    -10000 41
    -9999 104
    -9999 167
    -9997 230
    -9996 292
    -9994 355
    -9991 418
    -9988 481
    -9985 543
    -9982 606
    -9978 669
    -9973 732
    -9968 794
    -9963 857
    -9958 919
    -9952 982
    -9945 1045
    -9939 1107
    -9931 1169
    -9924 1232
    -9916 1294
    -9908 1356
    -9899 1419
    -9890 1481
    -9880 1543
    -9870 1605
    -9860 1667
    -9849 1729
    -9838 1791
    -9827 1852
    -9815 1914
    -9803 1976
    -9790 2037
    -9777 2099
    -9764 2160
    -9750 2222
    -9736 2283
    -9721 2344
    -9707 2405
    -9691 2466
    -9676 2527
    -9659 2587
    -9643 2648
    -9626 2709
    -9609 2769
    -9591 2829
    -9573 2890
    -9555 2950
    -9536 3010
    -9517 3069
    -9498 3129
    -9478 3189
    -9458 3248
    -9437 3308
    -9416 3367
    -9395 3426
    -9373 3485
    -9351 3544
    -9329 3602
    -9306 3661
    -9283 3719
    -9259 3778
    -9235 3836
    -9211 3894
    -9186 3952
    -9161 4009
    -9136 4067
    -9110 4124
    -9084 4181
    -9058 4238
    -9031 4295
    -9004 4352
    -8976 4408
    -8948 4464
    -8920 4521
    -8891 4576
    -8862 4632
    -8833 4688
    -8803 4743
    -8774 4798
    -8743 4854
    -8713 4908
    -8682 4963
    -8650 5017
    -8618 5072
    -8586 5126
    -8554 5180
    -8521 5233

    out

    69116

    #include<stdio.h>
    #include<stdlib.h>
    #include <iostream>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define maxn 1001
    struct p{
        double x,y;
    }list[maxn],s[maxn];
    int n,top;
    double m(p p1,p p2,p p0){
        return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
    }
    bool cmp(p p1,p p2){
        double t;
        t=m(p1,p2,list[0]);
        if(t>0||(t==0&&pow(p1.x-list[0].x,2)+pow(p1.y-list[0].y,2)<pow(p2.x-list[0].x,2)+pow(p2.y-list[0].y,2)))
            return 1;
        else return 0;
    }
    void  Graham()
    {
        int i;
        sort(list+1,list+n,cmp);
        for(i=0;i<3;i++)s[i]=list[i];
        top=2;
        for(i=3;i<n;i++){
            while(top>0&&(m(list[i],s[top],s[top-1])>=0))top--;
            s[++top]=list[i];
        }
    }    
    int main()
    {
        int i,r,cas;
        p t;
        while(scanf("%d%d",&n,&r)!=EOF)
        {
            
            for(i=0;i<n;i++){
                scanf("%lf%lf",&list[i].x,&list[i].y);
                if((list[i].y<list[0].y)||(list[i].y==list[0].y&&list[i].x<list[0].x)){
                    t=list[0];
                    list[0]=list[i];
                    list[i]=t;
                }
            }
            Graham();
            double ans=0;
            for(i=1;i<=top;i++)
                ans+=sqrt((s[i-1].x-s[i].x)*(s[i-1].x-s[i].x)+(s[i-1].y-s[i].y)*(s[i-1].y-s[i].y));
            ans+=sqrt((s[i-1].x-s[0].x)*(s[i-1].x-s[0].x)+(s[i-1].y-s[0].y)*(s[i-1].y-s[0].y));
            printf("%d\n",int(ans+2*r*3.141592653589+0.5));
        }
        return 0;
    }

  • 相关阅读:
    消息传递协议
    TSL 访问器
    graph engine
    uwp 动画Storyboard
    iOS播放视频时候,忽略设备静音按钮
    Could not find Developer Disk Image
    GIT常用命令
    iOS 音频播放时听筒及扬声器切换
    iOS 9:ATS
    iOS设计模式
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740282.html
Copyright © 2011-2022 走看看