【bzoj4445 scoi2015】小凸想跑步
题目描述
小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏。
操场是个凸 nn 边形, nn 个顶点按照逆时针从 00 ∼ n - 1n−1 编号。现在小凸随机站在操场中的某个位置,标记为 pp 点。将 pp点与 nn 个顶点各连一条边,形成 nn 个三角形。如果这时 pp 点, 00 号点, 11 号点形成的三角形的面 积是 nn 个三角形中最小的一个,小凸则认为这是一次正确站位。
现在小凸想知道他一次站位正确的概率是多少。
输入输出格式
输入格式:
第 11 行包含 11 个整数 nn , 表示操场的顶点数和游戏的次数。
接下来有 nn 行,每行包含 22 个整数 x_i, y_ixi,yi ,表示顶点的坐标。
输入保证按逆时针顺序输入点,所有点保证构成一个凸多边形。所有点保证不存在三点共线。
输出格式:
输出 11 个数,正确站位的概率,保留 44 位小数。
说明
对于 3030 % 的数据, 3 \leq n \leq 4, 0 \leq x, y \leq 103≤n≤4,0≤x,y≤10
对于 100100 % 的数据, 3 \leq n \leq 10^5, -10^9 \leq x, y \leq 10^93≤n≤105,−109≤x,y≤109
题意:已经很清楚了!
题解:
①你可以设坐标为x,y画一下柿子可以做,网上这类做法主流;
②下面是大米兔的非主流做法:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdgAAAEhCAYAAADcRLFIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAEq6SURBVHhe7Z0JfFTV+f7fEFYBQRBZLJsSUEQhWpHNEkQrwQ1q/wi2ChRMcKEJFQVaKAFpUUQJSJXNKlgF16IWEv1hCcpWaCUosiUKKCq0bFH2Lf/7nLknOTOZmWyz3Jl5vn7uZ+6dO8FM7r3nOec573nfuEILCTJxcXH2nh9Slkvh3GT7wJ1Vq1ZJz5497aPoIVq/F+B3i0z43SIPXjPnUsV+DSrQ8FI3H+JKCCGERCIhEVhCCCEk1qDAEkIIIUGAAksIIYQEAQosIYQQEgQosIQQQkgQoMASQgghQcCRArt+/Xrpf9NN0isxUb1u2LDBPkMIIYREBo4T2MypU2VUcrIMXrlSJubmqtcPJ0+WBwcNsj9BCCGEOB9HCWxOTo68O22arDtyRPpZx0nWhtf/O3pUTmZlycvz5+NjhBBCiONxlMA+NW6cjLHE1RtpBQUy0xrdEkIIIZGAowQ2d+tW6WTve4L3c3ftch0QQgghDsdRAtuqWTPZbe97gvfryAUSHz9Z+vT5m3z22X7XCUIIIcSBOEpgBz/0kLxUu4595M5b1q9aKFfK+fOF8sEHX0rHjnMkIeE5eeWVzfYnCCGEEOfgKIEdMXKk/F+NpvJbqS56Jhavz8bHy4waF8vxuL6uN23y8w/J/fcvlbp1p8rw4e/Z7xJCCCHhx1ECm5OzW3Yd+pXMl27SRKoJqsi2rlVLNiQnyxf7dsihQ7+XQYM6SPXq8a4fsDl69LS8+OImZR8nJb1M+5gQQkjYcZTAjhr1gXo9KUmS3O8VVSf28PHj8uDo0VK/fn1rqymvvXa3nDo1Xp54opf85CcXqs9rYB+vWrWnyD5esOBT+wwhhBASWhwjsEuXbpfc3H1qv2bNqjJ1am+174vx438m33wzSj75ZKh06fITiYvDeLcY2McPPPC+XHrps/Lyy7n2u4QQQkhocITAnjx5Vh58cJl9JDJixE/liisuto/806NHC1m3bpgcOvS4DBuWWMI+/u67H2Xo0HeladNnZNy4j2TfvqP2GUIIISR4OEJg58z5d5HwYfQ6Zkx3tV8eYB8vWHCnso9nzLhVWrSoZ59xgX//ySdXK6EdNOhtWb9+r32GEEIICTxhF1gI31NPrbGPRFnDTZp4X6pTVtLTu8iePemya1eajB3bo8S/t2TJFuna9UVJTJyr7GOMoAkhhJBAEnaBhbjq0SuEEPZwoGjVqr4SbAjtSy/dJZ06NbHPuMCcL+zj1q1nKvt4927vaRoJIYSQ8hJWgYWwwh7WTJzYU1nEgQb/5pAhnWTTplQ1XztwYAf7jAttH0NoL7tsFqOPCSGEVJqwCiyW5Wh7FqPLQI5efYGI48WL75bvv3/Uq328a9dhFX18wQV/UoFXtI8JIYRUhLAJLOxZzIVqMHoNJRBW0z7u0OES+4yLEyfOqtF17dp/ll69FsrGjd/ZZwghhJDSCZvAYs5T06dPG+nX7wr7KLRo+/jzzx+0BP9uadOmgX3GBZJXIMNU587zlX2cmbnePkMIIYT4JiwCi6QS2dn59pErctgJ3HNPB8nLGyk7djwivXu3lvh49z8P7GPY2rCPBw9eSvuYEEKIT8IisJMmrbL3RAUceUb3hpu2bRvKihX3y9mzE9S88IUX1rDPuIB9vGjRZmUfY7kP7WNCCCGehFxgMa9ppkREUggn88ILt0lBwVif9jESVsA+btkyk/YxIYSQIkIqsLBUzdErRoeVTSoRKkz7+NZbLy9hH3/9dYGyjy+/fJbqRBw5ctI+QwghJBYJqcCaKREhrBVJiRhuYB9nZ/9a2ccjR3YuYR9/9dVhtbwHa2rxyuQVhBASm4RMYCGsZuQwxDVSRq++mDUrWdnHf//7Pco+NgsNYASLDgWENjn5VbegLkIIIdFPyAQWKRF11C2ENRRJJUIFlhjBPkb+Y0REI0WjCcQVIguxpX1MCCGxQUgEdvv2A0pYNAgcCkZKxHCDjgOyQyF5BbJFJSW1ss+4gF1s2sdffsnSeYQQEq2ERGBhDZspEcOVVCKUYPnRypWDZdu2h1UiC7NDoe3jYcP+LY0aPS0TJ660zxBCCIkWgi6wWJKDxBIapy/LCTQoHI9UjMh97M0+PnDguEye/LFUq/aEDBjwpuzZU2CfIYQQEskEXWBRDk6DkaunbRoroCC8to8RFHXZZRfZZ1ycPXte3nxzq7RunSlXXfW8fPTRLvsMIYSQSCSoAouRq04qAUKd0N+poKPx5Ze/lWef7SjXXNNY4uLsExaFhSJbt/5Pbr55kTRsOE1Gj/7QPkMIISSSCJrAeksq4bSUiOHm2msvks2bRyj7eNCgDlKtWvEyH3Do0Al55pl1yj6+447XaB8TQkgEEZeTk2ONmQLPW2/tldmzXWs/q1evIkuWdJEGDaqrY+KbV17ZY438v5WDB0/b77jTvPkF8sgjl8sNNzS03yGEEOJE4got7P2AgdErlqLorE2Ye6xMxZxVq1ZJz57RZy/7+16rV38tv/1ttrLYvV2iBg1qydChnWT69J/b7ziLaL1mgN8tMonFdiTSifTvFhSLGNawmRKRc6/lp0ePFvLppyny/fe/k/vv7+jTPm7a9Bl58snVRX9vQgghziDgAouG3qwqg5SI0ZhUIlQ0blxHFi7sJ6dPj1dLnJo2rWufcaFTUMIxQMS2GVRGCCEkfARcYDF6NZNKRFNKxHCTnt5Fvvvud7JhwwPSrVtztfRHg7/5yy/nSmLiXFWjdsmSLfYZQggh4SCgAovRk5kSEdYwR6+B5/rrm8maNb9R0cdIO4lkFiaoUTto0Nu0jwkhJIwEVGDNZTmxkhIxnKDzAocA6Rizsn5V4u+t7WMI7cCBb8krr2y2zxBCCAk2ARPYnJzdbikRkR6QhI4+fdqoDFHIFAUr2bSPweuvfyH3379U6tadqgoNEEIICS4BE9hRoz6w91yZiphUIjwg1zGCoXzZx0ePnlY2fnz8ZElKelk++2y/fSZWyJLUuDiJ89y6z5R867+Z3bvLTJbuJYQEgIAIrJkSEbZlZda8ksBg2sdvvz1AWrSoZ59xcf58oaxatUc6dpwjCQnPyYIFn9pnopT8mdJdiWlfmSfdJDOvUK0vdm3LJWVtuiTEJUj62g7Sto39M4QQUgkqLbCIXjUtRzTqnqMmEl5+8YsrVTF4RB936fITqVLFSH5skZ9/SB544H2pU+fPMnz4e0VR4NFCVqolrAnpshYH3TIlr3CNpLmJaLLMhchiN6WfdUQIIZWn0gILu1FHqWLUhHWvxJkg+njdumFy8ODjMmxYYokI72PHzsiLL26S2rX/LDfe+FIU2MewfOOk7zz7EOK6Jk28D1CT5bHMbtKtfYJ9TAghlaNSAgthfeqpNfaRKGsYmZuIs0EA1IIFd8qJE3+Q+fPv8GofI1Uj7OOWLTMj1j7OSoXlax/AFl7oS1xdtGnbQTrQHyaEBIhKCSzEVY9eIaxMKhF5DB9+rbKPUdXHm3389dcFyj6uVetPMmHCysixj7NSi0euIGW8hy3sheS5Mpf+MCEkQFRYYCGsTCoRPaAurWkf16pVzT7jAsI6ZcrHak0t1tbu3n3EPuNMspaa6oqpVSonISS0VFhgsSxHj2aYEjF60Pbx8eO/92ofHzlyUmWHQu5jZIvC+mfHkT9Tppj62i1THqO+EkJCTIUEFktyzFy3rJYTnZj2cWrqdSXm13EP9Oq1UK688i8qD7Jj7OO8ra6IYU2Htn7nXgkhJBhUSGBhEWqQQYgpEaMb2Mdz5tyuklcgQxfmak22bz+gKvnAPoazEW77OH+ne6EDRgYTQsJBuQUWSSWys4tT3TCpRGwxZEgnNVeLDfsmsI9RqhD28cMPb3IrWxhOGBlMCAkH5RZYM6H/wIEdmBIxRsEoFqNZjGoxReBpH3/xRYEazSL6ePDgpUp8QwWW2xBCSLgpl8AiathMiYictyS2gbBmZCQpoV28+O4S9jHmZRct2iwNG06Tzp0XyMaN39lngkhyP1dWJpstO0tJLpw/U1KZgJgQEmDKLLBoKM3RK6KGmVSCmMDRgHWMqj6XXlrLftcFklds3PitJbLzpVmzZ4NsHyfL3OXFErs2/WnJsvdLgBzFg0UeK3WRLCGElI8yC6yZEhHCypSIxBcIenv11Rtkx45H5NZbL5f4ePfb7Pvvf1T2cfXqU5R9vH9/EArCJ8+VvMxu9sE86RuXWkJkVY5iS1wX+kyfSAghFadMAgthNSOHIa4cvZLSaNu2oWRn/1rOnp0gjz7atUSN2jNnzin7uGnTZ+Xaa+ep9IyBpE3aGikszBOXzkJk7dJ09ra0X6EUUlwJIUGiTAKLlIh6jSOElUklSHmZPv3ncvjwGFm27F5p18692hJKxm3a9L0qMAD7eNq04vzWlaeNpK0xS9MVb0yLSAgJJqUKLNY4mikRUcSbKRFJRenbN8G6px6W3bvT5fbbE6Rq1ZL28ZgxK6RGjSlqnjaU0ceEEBJIShVYWMNmSkQmlSCBoGXLevL++/fKmTMu+7hBA/egqNOnz6l5WiSvQL1hdPQIISSS8CuwWJKDxBIaLsshwQD2MYoMrFhxv7Rv30jijII+6NzBQUE6xuTkV93uR0IIcTJ+BRbp7zQYuSYltbKPCAk8vXu3li++eEh27UpXnblWrerbZ1wgg1j//q+rTFEoOED7mBDiZHwKLEYKOqkEYEJ/EipgH6end7GENk2tqUW+axPkOsbUBexjdAJN+3j9+vXS/6abpFdionrNzs62zxBCSGhxE1jdOPXs2Ekeua+f9Y4ruw2ihpkSkYQDOCdZWb+SbdseVvehGWAH+xhVfGAfN2r0tCQnDZNRyckyeOVKmZibq15nDhokD1obIYSEmiKBzZw6tahxmvTZZpl9dId0kbekYfzbHL2SsHPFFRerCHakZMSrp3184MBW2bfqNVl35Iiga5hkbXjNso5PZmXJy/Pn42OEEBIylMDm5OTIu9OmlWic1slJuaXqV5L9/mJ8jJCwg2QVGMnCPsbIVtvH9WWFTLXuV2+kFRTITKsDSQghoUQJ7FPjxskYS1y9MebUMTZOxJFAXCGyGzY8IOfiD4p78bxi8H7url2uA0IICRFKYHO3bmXjRCKW669vJlcltJTd9rEneL+OXKCij5m8ghASKpTAtmrWzG/j1Opi99R2hDiNwQ89JAvr1rWP3HnLus0L5UoVfczkFYSQUKEE1l/jtLRqVenXv799RIgzGTFypOy+6ioZV7u26MkOvE63bvEnpb4ck+LEw2byil69FsqSJVvsM4QQEjiUwPprnBY1ay5TZ81yvUmIg8lat07qjR4trWvVEiSDwut71/WVg6r8umt5T+3a1dSrJidntwwa9LZkZOTY7xBCSGBQAgs8G6cmUk0yJFF6/mKG1KzpXmaMEKcyNiNDDh8/rqrl4PXjf78vEycWp/g8duyMJCQ0lF/84kr7HRdDhviKQiCEkIpRJLBAN05ZWXlySv4gx+QOWbrU1+wsIZFBRkaSWx7tvLyD8tVXh1X08dixPdSyH891tYQQUlncBFaD5Q+6oDoCQ2CjERLJIPXiSy/dZR+5ClkMGPCmpKZepxJXEEJIoPEqsGDgwA72nsjrr39h7xESucAGhsjqdIvoPCLICa+EEBJofArsPfdcZe+JirLUNWEJiWQgsiggYIpsYuJct8IWpTFv3lfqZ5AHmc8FIcQXPgW2S5efFM1LYWE+bWISLWAKxBRZ3N8YyZZFZCGo2dn71GdRyQfJK1DZh6NgQognPgUWDB7c0d4TWbhws71HSOQDkV23bpjKbQy0yKLmrD8grIcOnbaPRPbtO6pq00JosdyHHVFCiMavwJrzsKgPSzuMRBMowbhy5WA3kUVBd38iC2fnnXe6qehjHQiowVQKRBoJLGgfE0L8CixKhOk6sGgsmPGGRBtaZPV0CO5ziKy/e71Bg+oydWpvVdEHQVMQXROkYIR9jJSMtI8JiV38Ciwwg50YTUyiEW8iC7sXo1B/YA4XQVOwmrF5JqvAiNi0j0uznwkh0UWpAms2GphfwpwTIdEGxBUiC9dGg1FoaSKrwSgWo1kUhJ84sadX+zg5+VVlHyMPMu1jQqKfUgUWDUVSUiu1j0YBc7GERCMQWYxE9bQIgMiWJ08xnhdkjoLQ+rKPUdEHo1tCSHRTqsAC2sQkVkDAE0aypshOmrSqQsUAtH28aVOq2tfLgvr1u6LECJcQEn2USWARTawbB9jEDNog0QxEFsKIpTwaiCxqyFYEiDVGswiKQnDUmDHd7TOEkGimTAKLBsdsbBhNTKIddCiRjMK87zF3Csu4omDUiuU95uiYEBK9lElggWkTM+kEiQW0yJrrwRH0NHny1pAGKdExIiQyKbPAYt5I28QI1MBGSLSDe37x4rvdoun/+c//qrWyoRBZBEMh8pi5jwmJPOJycnIK7f1SefLJ7SoPK7j33haSknKZ2ickFnj22Z3y3nvf2UcinTs3kClTOkj16mXup5abt97aK7NnF6+fRZKLPn2ayJ13NpMmTVwZqAghziSu0MLeLxUslMdaPoAlDQjaCAWrVq2Snj172kfRQ7R+LxCt3w3RxAh40ugkFTrdYqDJzFyv/n/elvXAukY9W72MLhDwnow8eM2cS7m63niQ9fICzAsxsTmJNbDGdciQYkFD8n/kHw7WulYUikdHFkXhdaYpDXMfE+JsyiWwmI/CXKyGa2JJLAKBxbIbDUS2a9cXgxaMhNHxiBE/VUKblfUrt2cQMPcxIc6k3JNHZgk7VtghsQqCnkyRhchhNBlscdO1bCG2GN2a1rSZ+7i0qkCEkOBTboE1C7EjLzFtYhKrQGQRYayj6yGuENmyFG6vLHgGZ8y4VaVkhH1s5lAG6Pzq3Mfe8inn5ORIRkaGZGZmWp0Dpj8lJBhUKPzRXBdIm5jEMngWMKIMh8gC/H9hH2/b9rCyj81nE2BkvXnzfvsIo9wjkty1q0zq3x/pqWTP2LHS/4YbZNxvf2t/ghASKCoksKZNjEAL2sQkltG2rbZrYdWGUmQ1+D0wooZ9jIxR+vdBpLFmUHKyDF6/XlZaQpthHc84dUq2/fCDnPzrXyVj9GjXhwghAaFCAutZiJ0VdkisA3Ezl+tAZBH4FI55UNjHyHkM+xijWm0fL126VGpu2yYD1ZE7U48dk7lz5sjRoyxHSUigqJDAAqZOJMQdzzWx6HyGM9gI9rGZS3nVhx9Kz4IC+8gd/MZXV6kqW7dudb1BCKk0FRZYc64HgU7BWgdISCQBkUV5Oh0IqEW2rIXbg0nN2rXF31P6vx9Pyfz530iLFsOlV69eahs1apQKhjI3BEiZW25u+L8bIU6kwgKLBsQsxM4KO4S4wLOBkawpslinGm6RvfW22+Tdmt7r0EJ4v5TzkpdXW775prklnD+ztmaSmfmSTJo0yW3T4qu3xMREiYuLk4suukgGDRokc+bMkd27ubqAkAoLLGAhdkK8o0XWLE0HkUXqw3Cxe3d92XayuYwVV8SzBit374qvYYlsb2vPZW+7moa21jbK2kZam3tyC02fPn1k6tSp1qh9kxw+fFgWL14sI0aMsL5/4NI3EhKpVEpgzQo7LMROiDveRHbUqA8E+YxDDeaBIfAFcrfMluukbdULZGidOpJcv750bdhQBr3wnEx56h65+up61qc905M3tDaERo2Tiy++T8aOHStZWVmCNOZ4xXGnTsXVhgghLiolsMhLbCYap01MiDsIeILIIkGLBsn7QymyWC6EeWAXVSWh01B58Z8rpedzz0maNeJcuWWLDHngAXn88cHy3HOJVqf5Getzn1rbGfUTxdSQAwcul6efvsAaiR+QnTsP2u8TQrxRKYEF5ppY2sSElESLrBnRC5HFiDLYwFVCRifMAwOMqrF058YbO8uQIUOUxdukSfEIG2RlvW/9zh9be3+ytveszd2ZOnfuvHzwwZfSrt1sSUh4znru2bEmxBuVFljTJkZPmYXYCSkJnhEkozBFFkFPwRRZRPZDXJHSFEDoIa66IpYvkpKSrA7BSuvzCNLCSDbT2l6wxLmKVKkSh48UkZ9/SAYOfFvq1XtSHnxwmf0uIQRUWmDRcJjVPWgTE+IdPCsQOOQw1kBkYd/qEWag0MuDdIdXC7xnzmJfYE513bp1RrDSfkuo/yzffpuiUjPWqVPdft/FDz+ckjlz/i3x8ZPlN795t0jUCYllKi2wwLSJmXSCEP+gCo8pssiEFmiRHTTobcnJec7aQ0LEDOvfHi+9erVWy2nMrftM30kwrrjiCjWSbdXqUnV88uRJafrzB1VxgR9/HCeLFvWTNm0aqHOa8+cLre+Xqyr6YHQe6nSRhDiJgAgsAp109hrM+axfv1ftE0K8A5FFuTkNonxh5wYiYQsilV3pS++wtgwZ0lm9XUTK8kIpLMyTzG4ia9MT/AotRrDvpDSzjyw+Xyrv24kl7ruvo+TljZTNm0dI796t3exjdBYwOk9MnKtSRtLZIrFIQAQW9pOZ2YmjWEJKB+XmJk7saR+5lrqhSEBlRBbrbM21thDxP9xrKWkRKdIvGa9tJG3NcuvIBYQ2Ncs+cCNfPv7HRnvfxV8nTbL3XFxzTWNZseJ+OXfuj9b/u49bxDRAhxsjahSER71a2sckVgiIwAIz6QST/xNSNjIyklRifg0s1YqKLJ47jF41iI2AiOdtXWu/Y5HST5S+KpKln1ZYi3l9U+Vf9r53hsl1ffqoogHZ2dn2e+6kpd0g69YNU+kiYYOj862BsI4b91GRfUyni0Q7ARNY2MQ6NRwepHAlOCck0kBpOVjGGogsrNXyJG7B6BejRA1GkShdJ5IlS+e53gMpruFrEcmmwso8+aSEwuaJ1ueU5Qtk9d//bgl3P0sox7ne9AGSa+A7oXQeOhBm5LK2j2EdN28+Q4YPfy+g88+EOIWACSxgIXZCKgZGe6bI6sLtZRFZRAqbQVJ6rasaPWYttWRTo+1h3+z65lt7z4NumfKY9bM1a9aUv1siiyjjJUuW2Cd9A2FFBwKl8yD4nvbx3r0/yIsvbpLatf8sN974kmzc+J19hpDIJ6AC62kTs1dKSNmByBYJowXEFaM8f5G4cIvM4CgIGpJa6KDDLPfhq2EPl5H8nbJFuknmwjQpXsGLIK2XrN9vt/WMl93KRgfctI+rVi1ufhB9vHr119K583y57LJZ8vzz7vO+hEQiARVY2EJ6nR0eeM7FElI+kIgC61W1yEJAMZL1JrLowEJc9SgXPwOB1lM1pdnDZSZlvKSZ6mqDHMQVQdvHX3zxkNx66+USH+/eDO3adVgefni5XHDBn5V9HIjIakLCQUAFFjB1IiGVAyILodSjUAgMRBbzrCawhU3hhTCbhQXc7eFu0j7B3jXI3+m+fKZ1c9ea1yLapMmaub6FGZZxRWnbtqFkZ/9azp6dICNHdpYLL6xhn3Fx4sQZZR83bDjNGtkuoH1MIo6AC6w5D4tAJ/Y+CSk/CBo0rV48Rxit6uBBROGagYRI/mCmYQRu9nC3AXJbiVFovix7w4gwtkS4lfsUaciYNStZCgrGyrJl93pNXrFx47fKPkZQVDhL/hFSHgIusLCndCADLCzaxIRUDIxGIbI6AhfPE0atv/71O27F2xFEhPSF7rjbw90G3OY2h6rIXyZu+poyXn7pMYANNX37JqjkFbt3pyv72JynBQiKwlKkWrX+JIMHL2UHnjiagAssYOpEQgIDRBaBQXpeFSL76qufq32AYCFzHW0RHvbwgJLDV8l6Ol2K9TVFlvuxgkNNy5b1lH185swEefTRrtKgQS37jAv8HRYt2iyNGj2t1taWZ0kTIaEiKAJrJv/HvBEztxBScSCuGMk2blzbfsfF1Vdfoqxhb5RqD+fPlClFH+kmmXlzyx9hHCKmT/+5HDz4uLKP27dvZL/r4uzZ8yo7FJJXuPIvu89TExJOgiKwsLQ8y3IRQioOrFCM2kw+//y/PuYjS7OHsyQ1oXj0mrJ8jdcoYacB+xiRx7CP0Yn3tI+R7xjBYFde+RfV5nj+vQgJNUERWGCuiX333R32HiGkvMD+xNxrQcEpdVy9erx6BbBHMzJy7CMXWal9DXvYg6xUiYvT51NkeWGhOMgZLhOwjxExDfsY0daewV1IvIEgMOQ+pn1MwknQBBbRxHotH3KOshA7IeVHRw9rkUBUMRLrI8pYM2nSqqIcxKiM09dDXXXFHLXhZMpyKbSEtbDQubZwWdFLmpCSEYFeOuoa4G9n2scbNhyyzxASGoImsBBXFmInpOLoqGGzaDrSDd54Y4sSIzdYxRi1uYSzlC3ShqxlAPPUmI+G0OK1ONmGC7Q/jz/+mYo+vvfetxl9TEJC0AQWmDYxk04QUj4gmGbQDrIfaVGF2MImNTuxmHfEz8QyGMFiJAuh9WYfo9OyePEWadBgmlx77TyVnpGQYBFUgcXNrS0b9MJZnoqQsoG5Q9P1wVIcM4kL0CKLpToaiCwsZQb4uNvHqItrFoTHSH7Tpu9VgYEmTabLlCkf22cICRxBFVg0AKywQ0j5mDPn32ruUIMRGZJJ+AIjW1NkkeHJrK4T68AuRl3c997rLoMGdXALEgP79x+TCRNWWu9PUfbx/v1cVkgCQ1AFFpg2MedhCfEPMp89+OAy+8g1CvO11tUEIjtxYk/7yCWyFS3cHq3UqVNVXnvtbjl1arw88UQvadq0rn3GxZkz55R93LTps3LVVc/TPiaVJugCi2hHneoNCSe4EJwQ72AKxSyajixOsIDLSkZGkpvI4t+jyHpn/PifyXff/U4++WSoJCY2VRHWGtjHW7f+T9nHyBQ1ceJK+wwh5SPoAgtM+4qpEwkpCZbhmHOnOnsTplnKA0QWdqgG1XYgslwL6p0ePVrIp5+myKFDj8uwYYkl7OMDB47L5MkfS7VqT8iAAW/Knj0F9hlCSickAnvXXe3sPRZiJ8QTjDDNkSYCA81KOuUFAT2wjDUU2dLB33rBgjuVfYwOSosW9ewzLpCS8c03t8oVV8xWFj7/lqQshERgUV2HhdgJKQk6m6b4YcSKyFfPdZzlBa4RRFaPgPHvU2TLBjooe/akK/sYbZdpH+N6IQgNySvgOLAtI/4IicACpk4kpCSeRdORSEKXe6wsEFnM4Zoim5g41+3/R3wD+xiVjLR93LChe0UfHa0NsUWiD851E09CJrDmPCx6fbwZSawDq9GzaLqZOCIQIArZFFltR1Nky462jw8ceFwJrud6ZHRckKoSuY9xTZkWlmhCJrCwvFiInRAXWOcKq1HjvWh6YIDIQhj0nK4WWVPcSdlAGwaX4fvvH1XXTK+QANo+RjUf2MesIkZCJrCAqRMJca0HR6YmDUZEXoumBxAs+TEDpyCysDcpshUDwoprhixRmOvG39cEf1ekraxa9Qmrg/M32bnzoH2GxBIhFVjTWsENyELsJNbQDa8G68TNiN9gokVWB1BhxAWRZQKYigPrHdNfmzalKpfAnAoD586dlw8++FLatZstCQnP0bmLMUIqsJ6F2Plgk1gC855IJAFhA4isN+dHQ4E3kcXvRDuz8sA+RmcJ9nFq6nUSH+/evObnH1Idmnr1npTf/jbLfpdEMyEVWECbmMQiCIRB46qD+yBwWI5T0bWulQH/b4isXjoHMKqmyAYGDCTmzLldzp6doObVL7ywhn3GxQ8/nJLnntug7OObb15E+ziKCbnAIkpS99iRyo3r8ki0o+c79b0OUcXIVY8iwwH+37A0zblDl8gylWkgQWR4QcFYWbLkbmnTpoH9rgvYxx99tKvIPn79dTp60UbIBRaNi2cNS0KiFW3B6mUx6FwiCtUzKCYc4FnESNb8XSCwGRk59hEJFPfc00Hy8kbKjh2PyK23Xu7VPh448G2pW3eqW7EHEtmEXGCBmTqRNjGJZrytdTXjEMINRBYjWfN3mjRpFRv5ING2bUPrfvi1so8ffbRriSmCo0dPq6U+8fGTaR9HAWERWIxg9Y3FQuwkWsFSHNOhQaUbzyhTJ4BRNSxrU2TRyJvRziTwTJ/+czl8eIz627drVzwfDs6fL1T2cceOc9R1YGKQyCQsAosH2rSJmTqRRBsQKLNoOoQVlW6cihbZm266xH7HNX1jRj2T4IC2cPv2h5V9fPvtCW72Mf72uA5Icdm164tceRFhxOXk5BTa+yElN/eIpKe7evcNGlSXd97ppvYJiXQ2bDgkjz/+mX0k0rlzA5k27Rr7yPk8+eR2yc4uHjHh958ypYNUrx6W/nhM8vzzX8qWLQWydesP9jvFoL28885masM+cS5xIhk+BRZh/GYqMBNYvB07NraPSoIF9L7Q/y5yd+pkEwi28PUzq1atkp49iwtJRwvR+r1ArH43WHkYaehRHwKIMMepI+edjv5umIM1UznCPg71mt1AE4n3JKbQnnpqjRq5enMS4Ix07lzFul532O9EF5HejvgV2HAA4faMsDxy5Ij1vmtJAxZz16jhXhRZg6UHvpY+oGEIVJWSQBGrIhTp+PpuulqNudYV4uqrk+pEzO+GaGIEPGnwXKIj7BmYEylE8j2Jewodnrlz/+N1aSPatuuvbyaTJ/eK2OvjjXBfM3SYsW3evF+95uTsVvWCUdKwLDhOYMMFblBfvXM0lC1buhdg1pQm3GiUfN3wsShC0YC374YGEOJqrnWFuJrJHCIBz+8WTSIbLfckRrMQWjT2nlSpEifXXttUnn/+NiW4kU4or5k3MfUGXIOypjeNK7Sw90uA/4nujXsCa9dfWaZVq/bYeyXx9+/GEpg/ueYa3w9Bz54t7b2S+BNujJjC3bDHksDCukN1Gh0Nj04XRMhpjklZ8HbdEGRjRhTj3gpEUfhQE233JNrfmTP/JX/966dy+vR5+91imjatK48/3q3Moy0nEqxrVlYx9QamS3D/lwW/AhsKzB4yigFg+O0p3Js3b5aOHTuqfX9/iB07DvosIABBxx+SlD4/3rhxbfvIHQi6p31vYroA0SywL7zwgrwxb57k5OZK/Vq1pNGFV0jeflTDcVnBmKs0o+QjCV/XzVNkIa7oRESSyEbrPbls2UeycOEh677bLmfPlhTa6tXjVds6bdrN1rMdOdMVIJDXDB1gLJ0rj5ji/kabh3gjtJv+BjbeCLvAQkxRPxGgcca6ME+rNhQPBv74vpYj4Hf0JdwFBaf8Cre/fzeW0IFt3sAN6y9grjT7PpSN/JJXXpFnHnpInj56VLDoBoZwtrU9KvXkOxlqdRDvidoRA6xJiKy+n/F3R2fCX6fLSUSrwJrfa/ToD+Wll3Ll0KET6tgkLg7OV1OZNauP9OjRwn7X2QTymqENR2CtLyorpt4Iu8ACRF1qew3etudi/Gh9MF5//QOrR1mc1coEjZj+m3jjX//61qdwYx7QWyBErAFRLm1+vF4990TsGm/CvW/fXpny4F2y+sgh8ZT09dZ2b4Pm8tXBr11vRCilPWvISoW8yvreQwOEkWwkiGwsCKxm+fI8+d3vPpSdOw+ItxYe9nF6+g3y+OPd7Xecib9rhoFPeafC9MqVYIipNxwhsFiQrwtQe/O3Y+nBCDalCTdG477mx/fvP1bCvjcpj/USmayXB2WFPC/eOzaXSU3ZJUOsh7WTz4cVo/h27RraRyUpzb4PdkRyWe5JiCwSUOj7JFJENhbbkT17CiwhzZJ//CPPq31crVq8/PKXV6qpOSfax/q7oV3C5jlneuLEH3y6W97Az0JcgyGm3nCEwJpDd/yxdu1Kc2tIYvHBiHQ8v5s/4cb19yfc/gLm/Nn3geYC+bs8I5tlhH3syU2WwK6UftZe6OdfSwts8xcwZwq3Ge8A0BB5E05cTwR26WuK5xZ2sZlu0WnEejsyceJKef75f8uBA8ftd4qBfdy9ewt55ZX+JZybUINnWotpdvYW6/ioT7cOHTt/ndJw4wiBBXhYda8ECdFRR1FDgY08nPDdSgts8zc/7i1gbu/eD+XnX74hfyn0/jOXSg35Th6w9iJraU5lqFq1StHICEtEOnS4RBo0qKWO0VD7Wt7mS7g1/ubdKwrbERfIcYyC79u2/c+rfYyAKBSMD4VwmWKK59HfM+kJOoXQCicHFDpGYM0oRTxcWEOo4YMReUTjd9u581vp0f4K+ezcUfGUBgQ6zezSRbLWrfPbSPibHz916lyF7ftYAsLta5QFUb7hhkvtI3f27Nkjd911g0970N+/62Qq+qzBPn7ssQ9l6dIdcubMOfvdYuBsjBnTXQmu2dnJyclRG5L/9OnTx/pc+QUOU4KZmevLJabokOHaQh+wb7qcTsUxAouGAzax/oPDJtY3OwU28oi274b7Ey5Lbu56aSSvyzw5IQjFw/g4p2ZNebd5c8nasEE1OuHAn3DjmfIn3Bg9aOE2s6aB0uz7WAECU9GAudLs+8qOFAPxrM2f/6kKjFq6dLv9TjHokMBRHDSojYxJHSgnt2+XntZ9UlCjhmRb2+BHHpGxf/qT/emyAYE1i2GYmGJau/Zhue++WyJCTL3hGIEFiE7UF3jq1N4ydmwPtU+BjTyi6btBoHBvFtd1PSo/67havv42X5pcfLEk3XKLTJw2zWqEQxM4EUzKe930tA6EeMKElapwuOb//b/20r59I/vIHQbMlQ1/gW14HwFzGJm3bFlyjr0iAXPopCF5BRxFT7ekviyQF2SvDLSPNam160iTh34nk6ZNst8pHbTzeKZMMfU2Mo30dsRRAot1dohOBLgBtm17WO1TYCOPaPpumLpAg6MZO/YKqwN4j30UXVTmuhWP8ovnvVEDN9Bl+vwFtuF38DXvDiHat69qhez7WAIj1muuaaz+xnv3/iDHj5+x3t0uvWSp/FNKTlHgnWZVa8pX//u+zA4OrhOug6/Og4YCG0DwB7/ooqeKHoBNm1JVj4YCG3lEy3fzzMULwejVK47XzQdoOJOTX3WzpIMhshWhMt/Nn3ADf/Pue/YUVNi+dwo1ZJk8KRsl3T72pHuVWjJh2TtqTjaQRHo74iiBBeZoARYxrOJoFaJo/V4gGr6bZ3pAneSb180/EA13S718CdKDRSReN3+BbXrE7c0iDnTAXFX5UJ6QtTLWPvYkUWpK9c6PWp3RIQFdqhXpz5rjBBYPJXrAAEFOCHaK1gaNDbVzMe9DYNZD5XUrHSeKLNsRFxBlCCyywa1e/bXaSme3dJIlssmLRYyxeWtLYI+o8W1N1W7r6GNfEdtlJdKvWRX71TGgIdO+PG4EBjuQUIPGB+KgwTTF4sV3uy1VcCN/pnSPi5O4cmzdZxYLTzSCvxUysplpT+EI4O/qy0olgQdtKAKKMNWB+XFMwbVuPVNdB0Tx+hNX3KcQSCQpGTv219L8Z0mS4RHIB3G9p9oFckySrT3XOfw/UbAfq0LwGstR6I4TWGAuHH799S/sPUKCDxoHjFy1CKA3DqHw2xNvkyZrCgslL7Ob/YaLlOWFAoOoaMvLFNcnusmA25yb8SiQeOYW19GjFNnAA7HE8pexY1eUEFPEEWCw4ssWdhfTHvLJJ0Pl/Pk/quIrOTlD1FTdGx/8XU498IAk1qsnQ+vUkeT69aVrw4Yy9MU58vX3i9TPmUFLuMYoEo9iLnimvC0BinYcZxEDzB2gAADABVu06Fq55ZZe6jiaoNXoLND44L7TPW40ON6Kpvv6bvkzu0tC+lr7KEWWF85V/Xo3MNpN2CrjvZ1zAMG6bqNGfaASC2iwhASWe2UtxPIQTc/bxo3fyTvvbLPuz2/kP//5Vo4dO6c6cWUBf3O4MhBTvGIrT4KN3NxctTVpgp/tpF41EFWsBkFBeG9zwPj/pKXdoDpdZbn2kX7NHCmwAD0vjCbAtGnXyGOP9Vf70UQ0PfCeRNp3Q8OAXraektAWp7e1hL6+W1ZqnPSdZx+kLJfCud4kNEtSU8VqgJwor8G9bp4R2WjYkUs2VCIbqc8bxPQf/9hh/f575PPP/6s6gufPh0ZMKwMEFkJrLnHT+Hu+TCK9jXSkRQwGDy5OOJ6d7Ts8npBAgPXX5nw/rM3yZdjJkqVaXC1S+rkLaP7MmdYnQLJjxTXYYKkOrEYN5rphZZYnmjXagZgiKX9S0svSsOE0iY+fLJ07z5fJkz9WAos6r77ENS7OJah3332lcgcQIAqLF50Y/O0x9RYqcQVIHIHn6PvvH1VLtUz7GALrLzNWtOBYgUUEmmb16gOcsyFBA/alOT8EETDvvzKRtVSK9TVF3PQ1f6YMfkMkwT6MZTBPZ0YSQ2QTE+cWuVWxBBI5IMpaByDVqvWnMospgJiicPqAAc1lxYr7rc9OVIL61lsDQi6m/oCwQuAhtLj2EFZYxD6DBqMIxwos5r1gZ4DTp8/H5AQ5CT6YFzTnBtPTuygRKC9Z5vC1W/tiMVVzrukiA26T2AhrKh3P5ToQVwhMNIusKaaYikCELTbs6wAkf4MIiCmEaeTIzrJs2b1SWOgSUwQjPfTQ5dK7d2v7k84G1x5xDag/Gws4VmDBPfdcZe+JLFy42d4jJDCg04bRqwa9/oo9+O72sKxNlwR7OU6cJa5rYyhquKygocUcnB7FQFwRYIYRbaSzc+dBmTZtjXU/LfEqphBaX6kegS8xhTDNmpUsffvSC4kUHC2wpk2HHp6/m5KQ8oAADJ33GqBBw1rXCuFmD3eTzDy9NCdPXCt3Okhb6msJzOQdAM83RrKRJLJaTDFn2qTJdKla9Qlp1262jBmzQt59d4dfMcX3xjw/HBPce8i97mgx9breO9WOLQguWE+LJUiRpgGOFljMIehAE9gntIlJIMAyHIwmtCWH+8wcTZUXd3t4gBQPVttI2sJM6ZbSz5FLcpwARNZcZ4yAJ4isGXDmFD77bL9PMcWcKSoEnTvnKj7viTcxPXHiDyoASc/5ey4HcwxZqUVuTAdjbbdr3fc86WudC2biFLgbWE+LxBhwAtAx9pcG0kk4WmCBaRMz6QSpLOgBQ1x15Coa9sotFXG3h7t5mWsd4BFRTNyB8JjXANcG18hMsxhqIKZTpnysxLRRo6dVNG/HjnPKJKYA3+X66y9Vo9CIElMPsPQsTq09czkzZgB8m7SFtkODWZHBEiyN9Vzmg3W2mE5AcBzOOTkA1vECi5uxenXXr4lebSxGG5LAgAcRDbe+hzCqQKNXqWhLD3u4xFxrmzRJo76Wil4Tq5dy4FohA1EoRBaCjrbFDECCmKK+LcT0wIHjpUbzQkxRlByWt7Z5N2wYruZRI0VMPTHXdXfLXChpJaY52kjbolm8tZL+dHDMYkQgY9TvuWwOUwkoxoGcCbCPnagNjhdY3LydOhU3gOi9EFIR0GCb83toDHWkekXxbQ+XBJmeUkMxYRWh4Fpg7lF3eHSHyFuigopiiinuBzTOSCkIW7qsAUiJiU1l2LDEEmL6wgu3uaV5jWRwrxYlTZEUGV9SXS3yZafZHM9bGrT5WAy00AGDG4COjDmdg+sF+xjX0nM9e7hxvMCCPn2KG0HaxKQiIEjCHA2hMax8Wa3S7WEX+TKze5wkvDFAHuNo1i8QV09XAaOUCRNekf433SS9EhPVa3Z2tn3WN3v2FKglWLB5b775FauRXu8mpojp8DfqMcV0yZJfFonpp5+myIIFd0aNmJYA67aLUn5i9PqYY2II4Abg2cWaWkT8e7pPGIDh+iL/sRPs44gQ2B49Li7qsWAEEsvVGUj5wWgFQRIaBJqgF1xZslL7GvawN1zCGheXIGivfAswMUGjuWlTapG7UEs+kbempMjglStlYm6uep05aJA8aG2a/fuPKjG9+eZF0qzZs1Kt2hPWv5OplmHB5v3oo6+skY7vjFGwH7EGGutz8f/2FFMzFiS6se7ZwVhapvG3xCxPthZ/0Pqosf47yKDzg+uFbFVwEjw7y9AIdMxg94fTPo4IgcUcrLlkh2tiSVlBL9bMf4v7yEzXV1EQVVlsoblYm55gL13Qm0tYXfiy2Yg30IBiJNumzQ/STtbINjkp/az3k6wNr1lHjsjBt96Vxg3usdqHKdKkyTNKTD/6aJc1uvlRzp71HYDkTUzx/8KICOtzKzttENHkL5M33ETTz7RH/k5xm7Dr0DYsHUg4CYhE92YfY0oA9rEuHhNqIkJggdmD5DwsKQuwhGENa9DLNTMIVQa9VKHsmzOr5zgZiGyz2qtkqpci3+D3Z0/IqcP/J2fOnLPfKYm2eRFstGDBT63rQDH1R/6yN4zRq3/XxfOznvm3Q41pH+PVtI9RAD4cRIzAotepIwwx3I+UdVAkPGAqAQEPeg4GDanfoukk7GC0AZu3T5+/SfPmM9TI9N+bt0hxNVl38H6BHHYdWFx4YQ255prGXudMZ81KtkbDxcnmiXfy3DxfDEp9yqsscxvqeuTfDiPoVGEkC/sYI1uMcE0HNJREjMCiYTSDCmgTE1+gA4YIUTTYAD1ZzNPgwSPOwBTTli0zpUaNKSoACTbvBx98KXv3/qBGptWlrviKCcX7DWtcKIsW9VNiWlAwVjZvHhFjc6bBpJu09zWpmvW0Mf1hyetyZzo0OluYWcknlESMwALzoUEEYLgjxIjzQMNtrnWFqOIB84w2JKEDz+kjjyyXq656Xomop5h+/XWBnD7t3eY9JtfLbKlhH7mztGpVue/+e+S++4pLW5JA4jvFp9vytJTlbgkoogHdOa8sESWwsIl1Q4m1T05Mp0bCBxpyjFx1lDlcD9jCnGcLHaaY1q07VapUmazKsP3lLxtl69b/qYbLl5iCOnWqS/v2jWTQoA4yf/4dcrpwuRzskijjatcWHQeK10xLXF9v3VqmzprlepMEhIT2dmomf2Sluq2RXR5l6orpR6ypRfxGZaOPI0pggemlc00sMUFYvtnpQkBT5de6El9ALCGmV1452xLGkmJ69OhpFeDlC08xhc3744/j5IsvHpLXXrtbhg+/Vn0ua906qTd6tLSuVUvirGO87hk6VLI2bLA6UbT9A0mbtPGWZGq2yM4SibSyJLVIXS1xjcLgvblz/6PubSztg9DCEatoHvyIE9jBg4vtIEQT0yYmAGvdzOjyChVNJz7Bc/bYY//nJqaweSGm27cflGPH/ItplSpxUq9eTenYsbFMn/5zn2Lqi7EZGXL4+HH1/8DrjHnzpH592v6BJ1nmLtcSu1bSB8+UIo1V1XTstd/dMiUvCsUV97lnAC1WI+isX4gbKI99HHECi1BsndsTfwxW2CG60oYGEYQVKZpOikFDgkblsstmqVEptunT15ZbTNPTb1Bieu7cH62GaYzk5o6QRx/tan+SOJLkudY1W+4ayZaobYxRa6EUrkmLyqQpmFbCelpEH3u6X7CLETeA5BWwj8uS8CjiBBaYo1jaxLENOliea12xBo6UHS2mCQnPya23fmw1ppNUQ4K/7a5dh/26RBBTBJL5EtMZM/rYnySRhTWShZCW2GJjPTfaEYgslvqgw26uQMDzgE490jGWZh9HpMCa1h+G74GK+CKRhWfRdAQzIWKY+GbUqGxJTJxjNRhPqXWmppjm5x+SU6d8Z0CqUSNejUw7dXIXU6w1pZiSaARBteiwQ2g9k1cA0z6Gi+apRREpsPiSXbr8RO2jN8HMTrEH7Br0HvXoCvcEMvQwkUQxppiininENDPzX5YY7peCgpN+MyDVqlVN2rRpoNaeI+sRxPTkyfFqZLppE8WUxBbekleYoD1CHAjsYwRbavs4IgUW0CaOXdBLRMUM3VvEzQ9xNW2cWAMBSNddN1cFHnkTU3/1TE0xfeSRNkpMjx//veTljVSOAPL2hp2sVNc8YGlbdyMoh5AgoJNXQGzxbHjax8h/rgOlIlZg0Rjo0QqWZvir4UiiB9zAZiIJ3APoUXpaN9HMM8+sKyGmCED69NN9qtPhT0wxZ1qnTg256qpG8vDD15cQ01/+0uUMOQ4VeFMoeZnmOk074MbaigNfEZSTGrS6pIRo0ObA3dG5j3XwLQRXT2NGrMAi9ZVZ4T6QRZmJc8F8hxlGj0QSerogGlmw4FO59963rYf3L5Yw/lmJ6ejRH5ZJTDGiq127uvWzDZWYnjjxBzVn+uOPY2XLlodk9uy+9icjB7dcuUZ5tOTHMqVYeufJUiosCRHo5MM+1tHHEF09+ItYgQVm6sR3391h75FoxbNoOm5kz7mQSEaLqc6CBDF94IH3rU7EFtmx44AcO3bG/mRJPMUUgUfnz/9Rjh4dZz34jygxjfz56XzZaYRb+Kv0sqVkhgRCgg7sY1Rp0kS0wGIYrhsNjGpYiD16QYSeZ9F0R8wNVpApUz6WHj3+Ko0aPS1Vqz7hJqY6C5IvqlePl4suquVXTKNyPtqtVql7IXD30mn+ioQTEjoiWmAhruYIhtHE0QmuKyL0NOhYBaJoeqiYOHFlkZhWq+YS0wkTVsqaNd/IgQPH5dw530tjIKYtWtSTW2+9XI3YIaanTo2XQ4cej24x9YKbiLoVAs+Sp43SLt0yFwpr2xMnENECC8xoYpawiz5gCSPsXYN590AVTQ8GENOuXV+Uiy8uHplOnvxxkZiePVt+Md2zJ936O/y6RMRibOFef7TIHjbT91kj18y8QllDdSUOIeIFFg2ubnQQWeqZR5JELp5F0xGlh0hXb3OJ2dnZ9l7oeOWVzXLTTQtLiCnuwYMH/Y9M4+Jcy2Nat66vbN49e9Iopv5ws4cRLJxg/Q3jXOn7VF5cRBOv4ciVOIqIF1g0tmZmJ66JjQ7QWULEsF7ripB4ROh5is769eslOTnZEt/gBjvhvho+/D3p2HGO3HbbaiWm99+/VFau3F1uMd2x4xE5f961POarr9KUzduiBRPX+8PdHtaCam1Yn1OUL5fLc4iziHiBBWY0MedhIx+IKsRVr3WFqGLkaq513bdvnwwdOlR69eolU6dOtc4VL9mqLFpMr712nlprCjEdOPAtefHFTfLZZ/vl2DHfuXkxqrrgAv9i2rZtQ/vTpGz4sIdB8lxjbew86ctEE8RBxOXk5PheSBdB/OIXa+XQIVfk5bRp10jnzg3UPoksTp8+L+PHb5ENGw6p4+rVq8iUKR2Cdj3ffHOvrF17QPbsOS4FBWeskWjZH4f4eCS6ry41a1ZRv9/Agc2lcWPaugHn27fk4V/NFu1N3f5Ujoy+wT4A/5ouSWP+YR94OU9ImIgrhM/icFatWiU9e/a0j7yDKFNdsgzrkJwcCKMpy/eKVCr63RDQZCYNwXXU68pgB48aNUq9ghdeeEFGjBih9svC7Nkb5J13tsnWrQeUresv4MiTqlWrSKNGta3RZwO5+upqMnr07dKyZT37bPTgyHsSaRL9Ffl2O299YnmhzPVS8iVanze2I84lKixiYNrEqAyiA2NI5IBOkimuEyf2VOJ65AjqMI6Srl27Folrenq6X3GFmN5yyyJp1uzZoqUxI0dmqTnT/fuP+hVXiGnTpnWtB7uliubdvTtdzpyZIN999zvJyRmi0glGo7g6laylxeIpKf1KlEtzOy/dpL1O70RImIkagUWpMp0LEnN4/mr0EefhWTQdwpqRkWQJ7sty5ZVXSmZmpn0Geaj7WcI3wz4qrgnrKaYrVuyS77//sdSRao0aVZVgpqZeJ5999qCbmCKal2IaTrLEXV895NUavRqDV+sD4xlJTBxD1AgsYOrEyCEnJ8cS0AwlnAsXripRNH3MmHYqgAmBTAho0lxxxe2WkA6Tzp0XFAUgISAKAl0WMcVaUwjmb36TKBs3PqCS3Z88+Qc1Sp0z53a5+upL7E8SJ5CVqte4ghQx9TV/Znc3a1hFF3vzhgkJE1ElsGYOSIxq9BIP4hxg9yZ37SqT+vcXmTRJdo8ZI2OH9JFa8ok6f801l0iHDlskMTHREuFvrXfQYA63trHWliHbt/9Unn/+P5Y4flvq9TXFdPXqoUpMsdYUYvrii3fKT3/azP4kcSKIyHYbnSJKWC3HcW0JRdmbXAkmCtek+cxNTEg4iCqBxTIOsxA7bWLn0d8alaauXy8rLaHNsI4zT5+WXXJSbrYEtlbVjfLFF7tk+vTq1vWDoP7K2hAOimvqOzo3Pr6KNG5cWzp2bOxTTLt3b2F/mkQKap1rmTYmmCDOJKoEFjB1onPBfGqr/HzpZx9rIJ1vyGkpPPuBnDtXwzryfVtaAxdp0KCmCkB64oleap3p2bMTZN++0ZKbO4JiSghxDFEnsGbyfxZiDz8ffbRL1S+98caXJD31ObnhqPfrAZFtJUiBWDzf6uK4te22tn9a2wvWaCVDjh/PkMTEzTJ8eFsmbSCEOJaoE1gUYkeQjIaZnUIHMi/BlkcWpNtvXy1VqkySm29eJM88s05Wr/5aTp6OF3+zpqesrVYtkUsu+a+19zdrg4k8zdpetraPrW2/tcH+P6mCo1q3bq2W75hBUIQQ4hSiTmCBGU3M3MTBQYtpRkaO9Oq1UEX0tm49U0X0IqXg0aNnrdGm/WGbU3K5vOdjLhUSWdjgAjl06DnZv/8v1s/myeHDh2XlypUqocTEiRMlKSlJOnUqDmSj0BJCnExUCixsYhZiDxzIv+tLTCdNWqWseF8RvVWqxEmDBrXUnOkf/5giVa7tJHOqVbPPukDG4aH168uMOXOs61YswPWt9yCqSCiBJT0Q202bNqnAlm3btqljCO+QIUMkNzdXJaKg0BJCnELUpEr0BGXOtD2MjEBIWuA0nJgGbOPG7+Qf/9hh/W575PPP/2uNIk8qQSsLSMqPhB8Q0337vpFhw3rL9de7L4XBqPPBe++V3H/+UzqdOyf7qlaV3fHxMnHGDBl43332pyoHsj116dLFPgo8TE0XmUTrd+M1cy5RK7AYcWGEBZDhadu2h9W+kwj3zeMpphiFnj9ffjHFKzaz2k1p3w0jTmxNmuBnO6nXSIENWmQSrd+N18y5RKVFDBDopGuHwiKO9ULssHmnTPlYkpJelkaNnpb4+MnSufN8VSAcAnvo0Amf4opF/dde21Q5ASgbt2tXmjWyHSMrVw5WzgAseVNcywJEFdZunz59IkpcCSGkrEStwGIO1lyyE0upE7E0KTs7X82Z/uQnM5SYolD4hAkrlZgeOHDcj5i6Rqc9erSQRx/tKp98MtT67B/lP/9JqbCYEkJILBK1AgvMpBNmlZZowhTT5ORXpWnTZ9SGfQQgffvtD35tX4gpsl9BTFesuN/67EQ1OoWwTp/+cyW0hBBCyk9UC2xSUiu1LhZAiBDtGsns3HlQFi/+3KeYQmj9JdbQYjpyZGdZtuxeQTpBiOm6dcOUmPbu3dr+JCGEkMoS1QILzAIAkZQ6cc+eAsnMXK/mTFGGrWrVJ6Rdu9ly773vlCqmsMfRuRg7toe88MJtJcR01qxk6duXRTMJISSYRL3A3nVXO3vPuYXYMTKdNm2NEtMmTaYrMW3VKlNGjfpAzZmiDNu5c97LsJliunjx3Spa+sSJP6gApKlTe8uIET+NKDFFCbLULPvAK/kys7tdUcX/BwkhJKxEvcDCEjULsWPkF05MMe3ff23RyHTMmBVKTPfvP+ZTTMEll9T2KaYDB3Yo+q4RSVaqUYLMO/kzB0vRR7bstOSWEEKcSdQLLAhX6kQIOuZ9MWd6882vlBDTw4dP+xVTzJkmJjaVYcMS1fIY2Lz794+ODjH1JH+mdHcv/umFfFn2RrEAdxtwG+t/EkIcS0wILMRIA5u4tELdFcEUUyS4QCpBpBREakHMmX700Veliun111+qxHTJkl8WzZl++mmKLFhwp9uSo+gjS1IT0sX/2NWTFBnPIqCEEAcTEwKLkV4gC7HrACRfYop/H8nwfaHF9K67mhWNTCGmGzYMV2JqjrijH8yp9pXSxq4u8mSrrcIpy+dKsmuXEEIcSUwILHCJ1l6pJwtlYlo/6X/TTZKdne066Yf9+48qMUXZtebNZ0i1asUBSGURUwQgpad3kZdeuktWrLjPTUxHjWob5SPT0slKHSwyPlO62cdi7bUvLSarW6Y8RnUlhDicmBHYo//7QK6Qv8nLsksW/rBHBq9cKTMHDZIHrU3jKabVq0+RJk2eUWKKwuF79/4gZ8/6tnlNMd20KVWJKQKQZsy4VS0X6t37MvuTBGSlxsnSfmskraxBzvk7ZYslwJkL0zj3SghxPDEhsDk5OfLR85myTU5KP+sYdXXwmnXkiBx86z1p0nCg1KhRUkzPnDmHH/cKbN477mjrU0yR/J74BstxprTPk7nlHYmmjBdOvRJCIoGYENinxo2TMZaYeuP3Z4/LyUMfyunTvsX0wgtryDXXNJb77+/oFoD03nuDKKYVActxto6XNeVVyjZpsqbcikwIIeEhJgQ2d+tWKc7n5A7eL5DDrgOLOnWqS/v2jWTQoA6yaFE/JaYFBWNl8+YRsnBhvxgLQAoCWI4zpb3kmUKZt7WcEcSEEOJ8YkJgWzVrJr6yEOP9hjXqyvz5dygx/fHHcfLFFw/Ja6/dLffdV1wsgAQCeznO2nRJQCYmvbmtf+0gbWkBE0KigJgQ2MEPPSQL69a1j9xZWrWq3Hf/QBk+/Fr7HRIcsBxnirTPK7Q6Mh7b8hT7M4QQEj3EhMCOGDlSdl91lYyrXVv0TCxeMy1xfb11a5k6a5brTRI0slITZOv4NQxQIoTEDDEhsCBr3TqpN3q0tK5VS+KsY7zuGTpUsjZskJo1a7o+RIICluP4ixjO37nF3iOEkOghZgQWjM3IkMPHjytbEq8z5s2T+vXr22dJMEDlm75bMmWhz6Gre35hkXmylEVyCCFRQEwJLAk9qvKNCmrqLjM9St9gLWxcXEJxdRybeX3jSilZRwghzocCS4JKcTBTyfnXNmlrjPPuG5e7EkIiHQosIYQQEgQosIQQQkgQiAmBxVwf5/QIIYSEkugXWOS99YyiIYQQQoJMdAss8t66peEjhBBCQkMUC6yd99Y+IoQQQkJJlAos8t72FY5dCSGEhIuoFNis1MEi4zOlm30s1l77BHuXEEIICQFRJ7DIe7u03xpJo6ASQggJI1ElsFiO4y+pPCGEEBIqokdgsRxn63hZw3pohBBCHEB0CCyW40xpL3nm0DVvKyOICSGEhI0oEFh7OY6q2BIncXpzW//aQdpyYEsIISSERLjAYjnOFGmf56Uiy/IU+zOEEEJI6Ilogc1KTZCt40uWQSOEEELCTcQKLJbj+IsYzt+5xd4jhBBCQk9ECuzM7nHSd0umLPQ5dM2XZW+YIU7zZCmr6RBCCAkhESmwqjiOCmrqLjPzXe9psBY2Li7B9RmDeX3jWLKOEEJIyIjLyckptPcJIYQQEiDiChFy63BWrVolPXv2tI+ih2j9XoDfLTLhd4s8eM2cS4Qv0yGEEEKcCQWWEEIICQIUWEIIISQIUGAJIYSQIECBJYQQQoIABZYQQggJAhRYQgghJAhQYAkhhJAgQIElhBBCggAFlhBCCAkCFFhCCCEkCFBgCSGEkCBAgSWEEEKCAAWWEEIICQIUWEIIISQIUGAJIYSQIECBJYQQQoIABZYQQggJAhRYQgghJAhQYAkhhJAgQIElhBBCggAFlhBCCAkCFFhCCCEkCFBgCSGEkCBAgSWEEEKCAAWWEEIICQIUWEIIISQIUGAJIYSQgCPy/wG1ySx5agj1IgAAAABJRU5ErkJggg==" alt="" />
肯定是用合法的面积/总面积,AB是P0P1的话,合法的应该是OE分割的的靠近
AB的半部分,如果求出所有的OE就可以求出合法的面积;OE是什么呢?定义是
在OE上的任意一点P,$S_{PDC}=S_{PAB}$,E的方向可以直接由A'D'的中点
获得,结合交点O可求出OE,这样复杂度OK;实现也是半平面交而已;
③注意n变形的n条边也要加进去!
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const double eps = 1e-;
const int N=;
typedef long double lf;
int n,m,tot;
char gc(){
static char *p1,*p2,s[];
if(p1==p2) p2=(p1=s)+fread(s,,,stdin);
return (p1==p2)?EOF:*p1++;
}
int rd(){
int x=,f=; char c=gc();
while(c<''||c>'') {if(c=='-') f=-;c=gc();}
while(c>=''&&c<='') {x=(x<<)+(x<<)+c-'';c=gc();}
return x*f;
}
int dcmp(lf x){return fabs(x)<eps?:x<?-:;/*x==0?0:x<0?-1:1;*/}
struct point{lf x,y;point(){};point(lf x,lf y):x(x),y(y){};}p[N],py[N];
struct line{point A,B; lf ang;line(){}line(point A,point B):A(A),B(B){ang=atan2(B.y-A.y,B.x-A.x);}}hp[N],l[N];
point operator -(const point&A,const point&B){return point(A.x-B.x,A.y-B.y);}
point operator +(const point&A,const point&B){return point(A.x+B.x,A.y+B.y);}///
lf operator *(const point&A,const point&B){return A.x*B.y-A.y*B.x;}
lf operator ^(const point&A,const point&B){return A.x*B.x+A.y*B.y;}
point operator *(const point&A,lf t){return point(A.x*t,A.y*t);}
point operator /(const point&A,lf t){return point(A.x/t,A.y/t);}
bool operator <(const line&l1,const line&l2){
int d = dcmp(l1.ang-l2.ang);
return (!d)?(dcmp((l1.B-l1.A)*(l2.A-l1.A))<):(d<);
}///
point inter(line l1, line l2){
if(!dcmp(l1.ang-l2.ang)) return (l1.A+l2.A)/;
lf t,k1,k2;
k1 = (l2.B-l2.A)*(l1.A-l2.A);
k2 = (l1.B-l1.A)*(l2.B-l2.A);
t = k1 / k2;
return l1.A + (l1.B-l1.A)*t;
}//////
bool onleft(line l1,line l2,line l){
point ip = inter(l1,l2);
return dcmp((l.B-l.A)*(ip-l.A))>;
}//
lf len(point A){return sqrt(A.x*A.x+A.y*A.y);}
void half(){///
sort(l+,l+tot+);
int tmp = tot,tot = ,L=,R=;
for(int i=;i<=tmp;i++){if(i==||dcmp(l[i-].ang-l[i].ang)) l[++tot]=l[i];}
hp[++R] = l[]; hp[++R] = l[];
for(int i=;i<=tot;i++){
while(L<R-&&!onleft(hp[R],hp[R-],l[i])) R--;
while(L<R-&&!onleft(hp[L+],hp[L+],l[i])) L++;
hp[++R] = l[i];
}
while(L<R-&&!onleft(hp[R],hp[R-],hp[L+])) R--; hp[++R] = hp[L+];
m=;for(int i=L+;i<R;i++) py[++m]=inter(hp[i],hp[i+]);
}
point calc(point A,point B){return (A+B)/;}
int main()
{ freopen("bzoj4445.in","r",stdin);
freopen("bzoj4445.out","w",stdout);
n=rd();
for(int i=;i<=n;i++) p[i].x=rd(),p[i].y=rd(); p[n+] = p[];
for(int i=;i<=n;i++) l[++tot] = line(p[i],p[i+]);///
for(int i=;i<=n;i++){
point ip = inter(line(p[i+],p[i]),line(p[],p[])),v;
if(dcmp((p[]-p[])*(p[i+]-p[i]))>=)
v=calc(p[]-p[],p[i+]-p[i]),l[++tot]=line(ip,ip+v);
else v=calc(p[]-p[],p[i]-p[i+]),l[++tot]=line(ip+v,ip);//////
//printf("%d %.4lf %.4lf\n",i,v.x,v.y);
}
half();
lf ansA = ,ansB = ;
for(int i=;i<m;i++) ansA+=(py[i+]-py[i])*(py[i]-py[]); ansA = fabs(ansA);
for(int i=;i<n;i++) ansB+=(p[i+]-p[i])*(p[i]-p[]); ansB = fabs(ansB);//
printf("%.4Lf",ansA/ansB);
return ;
}//by tkys_Austin;
【bzoj4445 scoi2015】小凸想跑步的更多相关文章
- BZOJ4445 SCOI2015小凸想跑步(半平面交)
考虑怎样的点满足条件.设其为(xp,yp),则要满足(x0-xp,y0-yp)×(x1-xp,y1-yp)<=(xi-xp,yi-yp)×(xi+1-xp,yi+1-yp)对任意i成立.拆开式子 ...
- BZOJ4445: [Scoi2015]小凸想跑步
裸半平面交. 记得把P0P1表示的半平面加进去,否则点可能在多边形外. #include<bits/stdc++.h> #define N 100009 using namespace s ...
- 2018.10.15 bzoj4445: [Scoi2015]小凸想跑步(半平面交)
传送门 话说去年的省选计算几何难度跟前几年比起来根本不能做啊(虽然去年考的时候并没有学过计算几何) 这题就是推个式子然后上半平面交就做完了. 什么? 怎么推式子? 先把题目的概率转换成求出可行区域. ...
- [bzoj4445] [SCOI2015]小凸想跑步 (半平面交)
题意:凸包上一个点\(p\),使得\(p\)和点\(0,1\)组成的三角形面积最小 用叉积来求: \(p,i,i+1\)组成的三角形面积为: (\(\times\)为叉积) \((p_p-i)\tim ...
- 【BZOJ4445】[Scoi2015]小凸想跑步 半平面交
[BZOJ4445][Scoi2015]小凸想跑步 Description 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸n边形,N个顶点按照逆时针从0-n-l编号.现 ...
- 【BZOJ4445】[SCOI2015]小凸想跑步(半平面交)
[BZOJ4445][SCOI2015]小凸想跑步(半平面交) 题面 BZOJ 洛谷 题解 首先把点给设出来,\(A(x_a,y_a),B(x_b,y_b),C(x_c,y_c),D(x_d,y_d) ...
- [SCOI2015]小凸想跑步
题目描述 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 n 边形, nn 个顶点按照逆时针从 0 ∼n−1 编号.现在小凸随机站在操场中的某个位置,标记为p点.将 p ...
- BZOJ 4445 [Scoi2015]小凸想跑步:半平面交
传送门 题意 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 $ n $ 边形,$ n $ 个顶点 $ P_i $ 按照逆时针从 $ 0 $ 至 $ n-1 $ 编号. ...
- bzoj 4445 [SCOI2015] 小凸想跑步
题目大意:一个凸包,随机一个点使得其与前两个点组成的面积比与其他相邻两个点组成的面积小的概率 根据题意列方程,最后求n条直线的交的面积与原凸包面积的比值 #include<bits/stdc++ ...
- 洛谷P4250 [SCOI2015]小凸想跑步(半平面交)
题面 传送门 题解 设\(p\)点坐标为\(x_p,y_p\),那么根据叉积可以算出它与\((i,i+1)\)构成的三角形的面积 为了保证\(p\)与\((0,1)\)构成的面积最小,就相当于它比其它 ...
随机推荐
- 基于scrapy爬虫的天气数据采集(python)
基于scrapy爬虫的天气数据采集(python) 一.实验介绍 1.1. 知识点 本节实验中将学习和实践以下知识点: Python基本语法 Scrapy框架 爬虫的概念 二.实验效果 三.项目实战 ...
- 201421123042 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 Comparable Arrays.sort -has a Lambda表达式 1.2尝试使用思维导图将这些关键词组织起来 ...
- OO面向对象课程作业1-3总结
作业一.多项式的加减运算 1.设计要点与自我分析 我设计的类图 老师建议类图 我设计了两个类来进行多项式的计算,类Polynomial进行多项式的存储和输入输出,第二个类进行多项式加减运算.而加减运算 ...
- 再一次, 不要使用(include/require)_once
本文地址: http://www.laruence.com/2012/09/12/2765.html 最近关于apc.include_once_override的去留, 我们做了几次讨论, 这个APC ...
- 第一章 创建WEB项目
第一章 创建WEB项目 一.Eclipse创建WEB项目 方法/步骤1 首先,你要先打开Eclipse软件,打开后在工具栏依次点击[File]>>>[New]>>&g ...
- Python内置函数(29)——slice
英文文档: class slice(stop) class slice(start, stop[, step]) Return a slice object representing the set ...
- 安装 docker-compose
安装Docker-Compose之前,请先安装 python-pip,安装好pip之后,就可以安装Docker-Compose了. 一.检查是否已经安装 二.安装 docker-compose 1.安 ...
- SpringBoot应用的监控与管理
spring-boot-starter-actuator模块 /health /autoconfig /beans /configprops:应用配置属性信息 /env:环境属性,如:环境变量.jvm ...
- ActiveMQ学习系列(三)----下载github源码并编译
前记:坚持使用官网的资源去学习是挺痛苦的一个过程,昨天瞎溜达了一天,也没看到有系统性的学习文章,倒是发现了github上的ActiveMq项目. 地址:https://github.com/apach ...
- 推荐几个IDEA插件,Java开发者撸码利器。
这里只是推荐一下好用的插件,具体的使用方法不一一详细介绍. JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署.收费的,破解比较麻烦.不过功能确 ...