Phone List

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 140     Solved: 35


Description

  Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers:

  • Emergency 911
  • Alice 97 625 999
  • Bob 91 12 54 26

  In this case, it’s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob’s phone number. So this list would not be consistent.

Input

The first line of input gives a single integer, 1<=t<=40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1<=n<=10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.

Output

For each test case, output “YES” if the list is consistent, or “NO” otherwise.

Sample Input

2
3
911
97625999
91125426
5
113
12340
123440
12345
98346

Sample Output

NO
YES 题意:查询n个字符串,是否存在一个字符串是其他字符串的前缀。 秒想到字典树,撸模版AC了,然后和队友交流,学长说我写的太复杂了,直接用set写就行了。我后面试这写了一下,但是一直超时,各种优化实在出不来,问了下学长,了解了新操作,涨知识了了。

第一个是set写的,下面这个是字典树写的,set这个很卡时间,数据再强一点也许就卡了。
 
然后再HDU上提交,HDU把内存卡30M了,所以普通的字典树内存可能不够,就改进写成了树状数组(静态字典树),内存就被压缩到了6.7M,也能过了;
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAh8AAABfCAIAAADH+DLDAAAgAElEQVR4nO29a3Mc15UtWDF/qiIqKrrnL/jDfLhm8U2p53sLkghKNxwkYFvutmbiSiTtjntnTBCyr2WREG05jB5LIEBBIkiRtrvdDVZVZr1Btu2hSKHyUZDtDt0PK/eqlZmFQoF4sFJARgUCKGSePGfvdfbr7LNPLgzDMAyDIPA8L7ArDEPf9/G97/u9Xo8/wzDsdrt8pNvtep7X6/X0kSAIcA//9DwPLaDB9fV1/Bcv9X3f8zz8HtrleR7epT3hW9B+r9fDq/kudBKv0+H0er3HT576vo/H0Th+we/8JQzDjY0Nz/M2NjbYCNvkELTbeBAt4/Fer9e1a2Njgz3sdrtosNfrbWxsoBF8if+muYBf8HaMGq9DT0BqdkCpzV9IW44Cf3K8eBakVu6DtniEHOc37OfjJ0/5dv48OLjy7coQrh4/eTr+uNIpkMYVhpBpXD1+8jTruEpzQXGVIyyUkRgeQUk+gWr8Be/TTpAivC0NjsR/fd/H8Pgi/NLr9dAr/MlGtAOcDGgHrGX7IBY5ASHIaUb+kRx44xdffME3BiIclWFsU/8kDtAgnl1fX8c9CnGQTh8nefH7+vp6eqR8lqDhEAg4BaXONB2L0p9DU+4oJTlVOEyAmFLJ930gjPNNJcVBwBXxkyFcYS6MOa4Ip4G4grGYaVzR3s0urjCEzeRVDsRK6GSyU3vZ7XYxHryAlOVQldxEA9uhoMEAEhRng4o5HQYBwYvThi1TmSfAjZ+cUSr1aDUojIIgwOv4dlCJ35ANuEhxnaXACgauk5PsT5CLvQrMbGTPdaoTRoQarvX1ddpBmKi+mJl+3LrkN8qLBA3DMEQ7tD05lsBMGLyRhOWI8POA4IqYyRCuKNfGGVcY/ma4whAyjStMnEzjCpblZvIqBx2FP5QfpBdhpBc5odThgKmEFYiETvCcokDkpb9n3np6RMSHTo/QPGUaFJzJwSDLS8eoQwjMZiG/grg0YQ8VLrh0JoRmlCk+SNIwDNExut7EH7r9+MlTspVdPTi4UhpmBVf048cZV6HJ6IG4AuoyjavHT55mHVcM7g2UVzlf1C9+4pXgHIcdiH0BiiM8B+apMiTISE1FdmKEyqFAdCP/VKLo2HxzSNkajYXQbBN+iS5Bzfom7wLzlBO4J3FVh3M4iam4vr5Oj17vYa+0TfzOuYRXJOZSAv2hxWoVW2xccUYiKOx8sRm1h5jYX375JSDC4fO/OgqlPKeN3qBOoQqUA4IrFb5ZwRWEwpjjin0eiCtM50zjSle/MoorjVuk5VWO5E6wU4fHx5TEHFIomlmRx4FpX8lR9cQDia4SxOy0nwrXcsz6Fg0U8hdCxDMnLgGdhEsbiO7VxxOk0O8TpCdllQ0KCB01Ca6TlkQAGjB2WHkkApHK1hAuwOOIZngSbQjFAuK4aPr5Jk3UelL44gLE0RNyZ2NjA6JKJxKvg4Ar0idDuILhP+a4gpzaDFcaVsoorrhgmV1cUccPlFc53kcnjoAgdPgwoaDc0s4pdBSIgfi/JD3eRT7RJccj0Ni4yIBQTCpFIScJo4cEBGcChCBBwMGyD4qJxATgn6FFOTE6GESMzOLPxFxSOJLZnCTkKIlGftMr14tDS8Cr1+ux/6AJCQ6iJVZBdLpqy6QMRQPbDyR2oaSj2tahHRxceWZ4ZghXFM3jjCsSaiCuEFbKNK6g4zONK0bGBsqrnPI7MC2EwSeUdiB+qCc2Ed8NK48uKilCjurNZBLZzO8ZZOyJ556ABXHPvinjyU5izjd7TWdRmpp+6vLkoo1Gnq2vr+vo1M4FEUheokTBQWagEYQUQnOQ2bK+haglPnStVV/KSZUGCklHUiiheDP7oJ1XwODC+qo+ggzOA4KrhIDIBK5gEIw5rvDUZrhSqzmjuIKCzDSuYKZsJq9yz/aOwFQ6X6mt+6bKQvHyQskWD0RX0wRQHPM2EpQzhG8hfPkKkptDUGYzyUT7AGzRoUObhAvRpvMHN5PQxCV7S6xQtvIb/qkA3SPs7ptMZN7IzrGbRVzx/gzhipGxccbVcJkI0ZxpXCUykrOIKy5m83vFVY5d9MXS5JC8+OKVAoVv5f2eOKq+xP7AEl1NAlyUiGkfTckdyIqWJ9YWXqEpg4lXawtUs3oD+0xRqN3mS3EDnWXf/FZFVWDetNKKqp5gVVp5lmGi81Bpjpd2LWEDr8A3Ou3xFn0vGwniwtGzBBs+SGKSYrAQdb6xTeJEQ/CaLqFkPyC48m2xIUO4evzk6fjjinQYiCtM50zjShOuMoorul8D5VVOyU3e93YjSMcGQ7FreCfpHsq6Hy6OwTcdiG4owzzbTKQTQJ1i/Z6E4H9JEfaHbQZmp2hrNILYSdJKgavESQCLswj/6qVCwNolvjoTiwpqgnHsBwdXOuSs4IpbEccZV8rxNK6YrZRdXCU2umcRV+pBBil5FWUke3YlXhZm37ImAxJO3DhY1ok+aJ9xsSqDTOD61VPFfKGYn1r0pLKFdoyUDMXVZfJPelAcOKe3L6ujSljFBqmR2O9C0h0QXKnkygqudO8X5UIoBvI44EpDOmlcQa5lGldcsMwurpjaPlBe5UIropCABfsaWiYGKaukJ274PtgvHDOVNjW5hj7ThgB5EFoBHAVuuINNIeRlGt+kuLf7yftOpAxin+mb9ghh4UtwlmOhX/zll18aB2umXW7qzFQEJHrI7iGEzenKl/JnzwxMmp/gWtf24vbEeiK1dX3Vixu2BwFX0e/u7IlCMV8oTi0+/00hW+KKc0Fw1V/Z3gauFqcB6fMf7T6uOIqBuEp4zFnEFfe7DMPVOG02SuMKXNhMXuXIHs/2VAeiMAkOkrVrdRqWpuMSc2qRKOn1eoHBLvqcmnVFn4fxjENeBF8gdgFBA373ZN2JMycQHU5oehaWgU6GiU0MkTHoNhonHLlo5qX84oQJRijzYn+CIOhrl1OzbhiGoTsTKZvpj7/8MjSjhu+iOA7FpiAUwjD0vMqVk8V8oZifXtT3sj+8OHwlqWeJN0rJQOwy5ZGCTAeFL32JgPuWL6SofTZc8U7VTD0J7CiXdQ4kcLU4nVbqxROzzq7jCgP3KlehXc4veGHoRkyfvrVnuAp01CpAvxwBV7pU5kmkhTKCryjPnE6TkcTsa5eF3ccVQTIQV9yrPyKuKK9OzFT4iDt7JhrO9OKIuNJrh/JKU/k3xdV+y6vt4YpAGiivcol2lQqJB4RSSxcilnyM3ttMnr4pKNnY2AgCZ8ZkqxPPI9KXBvE53LOALPGkoPctWMGCa4RCEE9fIbLxDZw4mhJsVjmhlFJkcHokjHH+1D4EYrN4XiUSNCevOmhz6dt5M3J933TPhQUHQD81i9vCuHq+sEiDxWVkzOHcKEwvCr84ZM7GUExCpSRJsbGDqkSJolXK023iKrqHEfP0g5y0CfalcUVMLqBLRk8omF3EVUQQ0y4XFv0+W82/3ANcxaIiQTz1iw8m5AhpyM0ivhjCyjX9GfXfCAgo7gOuaCMPxJUa/qPg6uaUzaaTV53oS5NOhWJ+emlEXLEPO5dXyoVNcbXf8mp7uFIFiUtxlWNbvVEX2frGuGOd68vQU7Pl2CKb+6OT0fe1573IRkKgkV5qkU09RP2enQz64x19kc1R7eL7/WDCiVmn2zVHRJy8qu9HBuOp2arvB4GDe07MOr7v93o1PnLiqhMEQTRtTl51nlNSQGIjURC3+kfGVZLI/JOSS3C19eIttctixMrFC3E3OgzD6lU1zE9fdYmrZDzzwqLfB/nUIsYYveL0j50gCByLjC3VkjydvrUHuArILw6Zgqa71Q5WJpGjHX+UnYYL1C6CK9OpU4thGC6dN2B/dCEa+9RSjwDOF05fqfRx1fcbCsV84cxVZ3tJAVqDZBRciS975krFC4KAwUzYAcRVAhUzVeAqws+JWWfBFBUMRFNRZ4Cf0eUV90gMlFfjmWySwBWGoI6R4irHSBlaUeeOjNSm/aqxZGpRSWN29OmZal/Jr6+XZ0221p53gVUQYmO/C/eW1XsLw5C+y4VFv79EP71E+nvezSmbxtEoIoV0Zqbqd7uVGYu6RF2S/7KTYdyv70nYnX3We/gvT4wvJQh1DOFI1nCJmPDl9N4GrmxisBvhzgr3mq3KJa6b581KRW9xwwkELCMaTn/U7VIPnZipoAM3p4rnF7q9Xs0ov4RuRMGWU+9UfX+j9mP6Lhq93DNcDSvcu2Gl5pX+niwaJ8pDcUIRCYHEdiLy9n0XwVXtHfHYTH/jnr7zfXqm6kcS2UzSiPhXHZkR0zfjuEoIsgSuGI8dEVd938X0fSx2Or0IXIGnJ2YqGxsbNoTpBc/T0Z1f8CTyf/pH5fWbNjp3O/KKwb2B8oqs3F95tT1cMWeMr1Bc5fy4E4TBsE/q9OGG7gJNb9eXi1GaC4sBOd0P45x6x7FXsimOlutmelGK+aY52SvOhG2VpkgUJlKakoieBPf5alzkayDmiYrjTQxGM9zijgj+7NvI04uk8/pHUwZi2424oNHtctTC1GI0tGp/PVn7o5YOwYeL1OOgQnFNAlmdI1/4IMEQWtycJXZCC5pT9G8DV1ZsSmlL0cADJAxXoTJrIK4SvotZymeuOoHv+yYWz1x18Cw1uu9XZ08WivlCcfpWAld1Uh7vUplCQ/jCorjy00t7hqthJU98WZbv40qO7mCFq8CO7kCCEKcGiU+2Kgj7uKpcPWlfet5NyN+T79Q9z/MkVBgEgcmH6Zv9DIgzV10MP3rw/EIMV5RWA3EF1I2OqwgPp06fiCLJixcKxfzJqQs2Af1+x07P1oCrRbHzbk31Qw7dvqu6qOiaXtqOvNIhpOWVSvl9lFfbw9XjJ0+HHAmT68kG1I1Ryoia0j45W/MlH4PuJMBknXBmzXKvSFYfEawyy48veYW7XZ6WajY2nCAg20LT3pqWF8jFp3QeevEyoqHEkXxfwimxUMmSScy+diExQwlwY7zq7vTV1fRS1EMD+vmP9qk8LWe+znOdHgT9NnAlEkFxxc74vuKqb4h5m+BqYSpF9lOzVeIqkXVinxNXHd+PZEr/y1kHi4gaGfMYbDn1TsXzaMVPLYZy5809w5WXaIFEY1qgElBFki/l68PRM5EEln1ciU5Vn8/v6+/I3KR2Wez74snPydma4koX7dO4wobQ0XFljubszFQxXyhemJrOF4onZpfoj3qeNwQV/cjYTMX3fQmE9oK+9JteNKKNIq8wBOWgYoC+yP7Kq+3hintaiTHFVY6qj1HOXjzlg2iLSGOWXT4yCqNu0TaE2jcjwtH1GOKAkiKxkqZCjfPB36WQDl1potAb6nqz/RFdb52ivX5IJ5bXkArpJH0X3/eJ46kls2sk9qUKKUrrjIzKM0gb0DyTrtWNSKgK9pBrhmR6GDe7SG1807X8SxXu9F08CQhsG1eSCaO46sVDOr246+1vHtLp+y4S4j9x1cHwCVeGE2O4Isj7oR5fdQYaocCqijA9v+CJ73Jrz3DV73YwKFSYILi2BneTIOF/qbk1XZjU7orv0seVq37zolr3qniE4NMLnqd+5BBcUUAPxBVX+0bE1SKZJUGt2Vpt1jgVhqEjqEjhqj86IESMib52WdqOvOKe1oHyip3fX3m1PVzpJkL1w/AzR9nBdv24jmUPfIu7RXw6ebVqXVQtUjVjs9eTBb3pJdJIaU1w4xFqTg6esEM+HBkQSNo1lRDbCeIh+MACOP5zqGlfmRHKkO72FmdWFlE4tAjlJ69qEvPJd+q+OkORnWThYAnxBzuzUHqywOuZF6xCStHSs615fMq3pK/t4iq0M5qUKZyffgxXyUyQNK40MqYe5IVF3/d9LkdPfzwcV7dsLdfVbL3YK07NVn1/vTxDD7KfKmnr/3uAq9iCZQpXW1i+YJm/LcvXhDIDhr1eL3QjNYx1F67qB0GgsSPf98tXIvl7Uw3/xWG4Im4H4ipx8vGWuOLCTzWW3+HOSAwz0bE4rvqr+n4/hhZ5ZtQuH21HXmmsPi2vyKD9lVfbw1WiAArnI3DVP9+F1GQrm2cH3qREQw80I5lAUURigVoBtCtZpxwzSUC1D0Kzha5tv/J2knX6LNmBLhdayqnsQA3Q+4kltVRGsmG0NijUthjIFdrF/qs1RwLqT52ffETnPO9JZ51qzru3q1mnHI7CI9HzzXCVzJLvJwhFKOUNH0W4WrwAYbE4DXr6vs/Fg6mlXhiGCZyrdtFlhh7TySwRfw9wNSzrlPYjp7ovhlcoAQ1fZB/7gF8Yl44uAyS2i0Zs7Y866MeOrjpBENC6RxZAJdo3gxVyXz1LEP+83cluDM9mThSl3RJXyhH8fmLW7YcWppfQDju2JLsvLiz6Gxsf03cJw1B9lzAMa++cUbCNKK/0TJC0vOKd+yuvtocrVZBhPAUgRAV+NVvCkTd83kzEtSXtMr6RLVpH5SAV0MHIYdZgx+F72mtKxN5W4Xv1JfWGcDeWhbSHgayfh2OwkdiPqxZ2NUyFWfUYXX/L8P1+LQstifKIuNZX2JHsSG0VPD1b64XJ4HsUcvR0HVE/yBQycYOlaTo90P3jhivWT9wGrvoZyYIr813OL3hi3bubR8a+zS1x8cTfIoLqiiuGuQbiivtdtievTl6txHCVXPgM+/GxPiquuiEjYydna57n0ctJ6M6l7cgrza1IyysqhmCM5RW37AyUVzlyDv/uysYIjpDalY+pglJ2krtqLOs46btxeYAg6G5vy3qfjmpkdTffsk5XGs/u89Zib9CWdU98ySDu6ur3iidcxFaCIGwf3NT7FUYkrAIuwWL+GZiOUc1Em4CRMfZZxf1BwJUyKCu4ors5zrgKRL2lccXN0dnFleZWjD2u+k6e4iqxmzIhr3LBlqt5+75K7A1dzXvmVWKu6nvPtEqsWNS3cPh8hPDVe/gvT/xfnQD6PSeSko53koVkB4HuS2Y9YR2KAbWLhz1waEh94SgUzQcBV6RthnBFd3OccdVLrRIrrphwlV1cJfZIDMHVksTr9gVX5qNPLRp++gmTiquBFROIq1xCEPSeq+elMOoNXZYkA0ZflqQfum/L3b2hy5K+HTG0zwnEux6B1JAjO3NwcMX2M4QrFu8ZZ1z5opPSuGLt1OziSpfEh+PKliG+vbhPuOKW7Y8NV0x/WFRcUbsk+gDK93dTkgeZsFyC7VvEFILheFgu5LdOY76LgA7G8lg9tYgTR+xl2iJ+BlyxGxnCFSvBjDOuVPalccXgXnZxlairOwRXS/GtwQlcpWvqhGHYLxgxtSg3TC8IrgZUej15tdxNbdGbvtXPTppekgWz6X82J3igvMoFcTOhF08dUTR4lmzgi1bXm5UrVJvEHKHGZ/kN/0uqkT2cqJyWnl2B+YA9SQ/nrFCAYthqr6F7icMH8cu3Dq9B11dffYVZ0ZUduZwkZL0aUwcEV7xhOK44TBVhfCP7wKbQw4Ro88XJCO1sFQpBEhaNJIipLNAoMRvXgSRYTElNfiVUiA6E0pw3MHrDUcN+17ekcaXASONKt69lFFeJM9yG4Mq0y9TNFDcXrKBREDCvb3rB8zQL/8RMpb9wcmEBj2vans8a0qdm3TDsl6WwYhN6ksiJWbefc3/+Q2UBIQomRusu4fYzhQgjRWQCWOG+ZwoN8dO5pXy4n/6tb33rfz+84te//W7lq6++6m6SgUbvuLsbGWiZw5W3l/EfvU2fooDT0emXiceVgKEc+EbS0TNIyDiV0cpW73lnNjLtLbu4whBGwVUiFb6PqygjPCrAisRuJNDrTm28dFH0B1PJkT7uxTdvyYatm0bY2L7v/v0nrlQEV734kU657jY31HStbo+SG5hQWPhycQqFYgWEmxtWQVwBksEKi2D7hlViSzlvSBhW0C5fHV5yQbsABumNWqyT6ovBeHBwFeyjwR6O7AjquJQgtLTYNwr3nW9YDi3i3937DYCJPbxZxBWP19wSV6pdYrjarHTNTEUOGVpCmyyLV/H6NW+mlqLBxgtxUpcsGXm5ErOIV0e7U09ccQVXSslut5tT51ppHca9crJcJ1ICsmwkoYQ5ATjNyDBfFiTJIXUMdbIpI/XtxDT7wDcSar6Z2JwknhS/0wlwqF3SF7QL0c/5o/Nc/wVJekBwRedmOK58ibro49qyUph9S2gpFTpcH/ZFCuNxmN7aW11p0I3u/IkW6HuFKUs/MIOayo9v7Eo9kkCcCdyPNhn/Se+VHoirhPhO4IqiObu4otO/Ja5Y8HshjistXZPClaNFPfz45l/b+3UalZBC8WwqnrexUWexCcOVxdkuLGBc9F3K8RrEyq8cHRn6tiQNGRyISaUzjUxl9MP3Y6YNS96S9yA0ZmxCbwcSf1BYk5QwsuhCBrJkR/DxZup/jpabe4ly9azZyKF2SV/ULjqBOaO4o4rIUQf5a48rfj8cV75IW8oj3kO5xttUuySIqaIZz/rxS4WsWsEkl55Gwfv5RlCSBPcl3JTgFB7ncr0G04IgQN1ltq8ie2NjQ49OGIgrDG0zXOnhKBnFVeLYvSG4Ys7YzQSunP4e3hSuuA6/iEHFtEu8kkKv17vZr5Tj9yt4TS1aR/r7XXB/wnehhlZc5ZT0RGog6SKhrFmpBaRZGaSdAjEwDzQxH0IxB3Qu0edVxhNzyjxCiv1R11IxGoorShN7symHVxxql/TFyBgu2p6c5zpFNdHzIOBqS1GemHL7IMo3NjaQ+aqikGNEzpgncTxusyCn2L7SqmebJFTzkXq8n3TQS8dOBgWy6J3GVWjXQFxhCJnGlabDDMfVgmQkJ3C1FK+pw9I1/ZMbE0VuotPz+pUhUbzg429Hf8IXYVm2coSr/im6oJKuu3BoYTw+HFWxRGLc+vp6u912HKeyv5fjOO12u9vtbjzryWD4uTH0pB260gqLMHXSzqF2SV8J7aJhEN+OlCbLOJ2IK52u/K8Kbj4bbHUyWPux991bT45f/9M3fvKHr8fn+PU/fefWk/r/35dBw09wCiU4pnoo4Q+peGJsjWziVkSVoRRtviy0UHTq0dHami8GuwKAjbBZDalFfsZiv+5yGlf0MAbiSoN7I+HKjk2KTgaL40o1AZ/1RjzJUE7t3Ja8YqXqgfLKF7W9lE4dNsXQ65/cmChdQ//jJnr+4QXVLkEYuoPKGr3jRiOVcyimFxNxtpDrNCeuVDffyJkj7dbX1x3H+fzzz//85z/vs/D685///PnnnzuOo/ggdJTiynvCSAPT4AeMQbiKtMsIRwJFmyJ0DrVL+oJ2IZEReqaJygQkL15qMEFn/qnSh2Sn6ExoI53Sj77onZz707VV/0/+X583SXbt+pP/12ur/sm5P6193heRoZ3oHMgqBbUFbfaEiAxlgYHtMHEgjPvxVD+06jjddALi2tj4mBWClZuehXp0hlLs0iPxZVWcOgnjsgpdp2eqSVzR0h+IK62dOgKu+qcysxFWSjz5Tp2j6G8NscXwAZtCjA54kcj3M3ZM8kjyivbuQHmlInuIvPLFZ+L3tM8SinkIriJqTN3cFq5YBcqXFTXiKkfYtdvtzz///DlOs88//7zdbpNhikiOlniimZOg3cC5hDGDEFvOpUPtkr6gXaj41bYKJG0/YTDSXlO5k2Yu5ptujEeQJ5S1cUyJ7956cm3Vf97E2JPrvX/33/j4afCsMlqVzcbGBqzmdIiSPGKGiz4bWKiAcpBPxc4asO1+DEYFYmj7FutjeIDzS0WtDKFvFCdwlXBcErjSI2q2xFUU5zk5UxFc9evwnrxajV7a39UBI31DDgqK1jzM3zp+pUxNJqdic6Fia3kFs2wzeRVsQ/dvpN+4Pd3v9g9D2xau0kfUKK5yPdu5Wq1W//KXvzzHCfaXv/ylWq2q2dLb1R3Ruu7CueSldkQfapf0Be3S22RHNIP4NHD8vdkR/c2f/fHz8D+fNzH25Po8/M8j7/1RcUgt8gw1zShbaW9yFlC7+NvYaR8VP0a1Y3Mu7TStmQrF9PkFr7/8Kyez9VeY7YMDLgEhO3p1+uZ2dtrrat9WuNIDjPu4kirvp2drvY2NDe4CwYI27uyveSDSy50is05Xd9pH8bGpxZHlFXPGBsqr7m5XcEjgyk4NiBFhu7hiwTqdpxxvrmdJ35VK5XlPsa8qlQohQkXt7dLmZybIqxTzxWOFVj/ULumL6y46Z0hzXZxU9eDt9ubnb/zkD8+bEnt4feMnf/AlmkFjnMCmeeiLHwBZoLKDcTPSXymM/4649yuybWUHeNgPD0Qb9yKlIgc+XnXo67xT9X2sM+ejE9ii5CVVVDwviocYcbIPwVUiqXoYrqz/i3FcxUJe04te4rTs6Y9BIt3T3u12fTkoVnOReXja+YVR5RUTEwbKq+7OijWoit07XCUKzyeUWY5gGhPtsndCSuvCkhzkDSs0HGqX9MWM5ISQCmzL8UhCyqaW96wbCQ+CdtkVowrXkI2Eic0ivEhqnVzRUsSpWTfWkyWeFdbr9eLHiMk582GYOAqFjBYhFcWjTsw6A4XUQFxhCKPgKlrawSFvgiurfXLmRJSOtTRVKOZPTU/FNxIuJA6yslWZlPKzUcxURpRXFM3Djarh8krbpM8XWjaHKL89wRUX8AZuUO3XSB4T7UJ8k2RIwRzIIdWuDBQyLql2kC8ZGoHEl8WA8sIw/PLLLw+1S/piJRgNQhLoMITJC0/i+AmUJ7hD4Coi+RMRZyKh2+3utXb5t9+tbPnZu7d/4yd/0KQpT4ouU0+DzkxGYpRSbVtKVYpysoxqGxF/ijnfcpo1JMWdJZGqmF7SRQI559gNw7BXe0cD9zzneDEIQkht+WAVneNiThSa8iSONwRXzCXZElfRkrsdpEtc8TyxmalivlCcmp7OF4onZhaYaoXXca/JQmS8Wy6WhPJAW9x58seNEeUVJNJm8ooDGS6vqIl1HlENQ93uHa643MCuKq5y1JZjol2C+BXa5aWSFnRi6E+SQB/xU2dTUqXEQ90AACAASURBVAlTjfu+fxgZG3hxVR8078WzwJm9o+ZVwuMengXOOC9xqQ4N/xxRu/wf/6W03Z/g+CjaZe/g8Y2f/CGwoAQD6N4zHQ6d9ku8eLauLsYGW2WBR9plqr/q7vu+591U7dJfFl7EX9FJwB9B1jizJ+IK5vxCLFsX0aeTszXFlUIojSvWH9oSV65plwSu+qkK/bDemasuC6jcQoPcJ79kZr55ZmeuVGKHQy/GdeSW8krL16flFdk6XF4FolP3+tDxNK50uSEQPYorx6/GRLuEEiShFaMGglKBc4D888XTJCKx+Ka8pHJWGw3/OtQu6Uv3u9Bfps3F8qBUDCQpLp0bZIGymH8S0PwzkB3Ro/su21UwHObz9V0w3u6Ozysk5fmluoCerUEGEo2k5ZvQRj5t/1Oz5fV1pjP1tctMJaZdlnpBEFiG7vSiGL94ipnN4mFEteJPzFQUVzCoN8MVh7AlriJlYJEx4qpfFZjHVJ+adVmeaypeUKvw7Y/MITDdeeaqG8pLI5/mxKw7orxKRMYS8koHNURekbyJ6embE8MO7AWuWG4AffbiUe4c+Tcm2oWk98UwIb38eOW7BP807Y/kI6FVu9BY5rsAZf9wr/6gi+suoXjrRJsuaHme98UXXwQSqOX91Bl08BN/+hINIEZhjsHs+tqvu1DgMrRNrcBZ7Uvps0AsWcrlQPbeJyLvlAvpOmNqJvOl0W5/rorbGVOe58laveOLdzK1GAb9XSPTN33fX5xGcSq97fxCN+yH9fs5XYqrQFyQNK4Y8d8aV9J/xRUjY645TydmnX7x+ambaHxx0GZ4VVdGsf6q/ojyiukwA+WVToQh8krnI94VSlAxlADAXuAqcbZTGDcmolX9cGzWXbw98FoUjltaAYfaJX0xMpbwWoBgzvO981rwxq+9dtm5dZmgZ5DyWjzbaeGN4LWYRIu2IkL6GwZuMTIGtXFS7qF2WQwCP1nH98yVSn9dxPM820EyvTSa1+JbpuLIuFpiTpriKl4ZhUF4d0aO+O31egP3ySP8FXtpNIpv3xxZXtHpHyivwnHyWjbDFQ9A81K5Ob1eL8fXO44zJvtdEmNW24TcUpb0tkovCW2/CxnjbZ62dKhd0he1S3dQXX0taBGIsxIMTVvqxRfzefUGpS3h9//ysz8+7X3N97uEkvAdpurqq2TRm9UC48IsvhlYV59zoSfJqSodKKYxuWjmV3e/rj53U95KK7whuHr85OnouNLy8mlccfjqHASm57yR6urHDkQZUV6p+7VHaZb+rh6wlsaVClXFEn7PUa21Wq1x2KsfiBtIfU5oeray15ONYCOe16QV+BVAiqfwMCN50MXdlD1ZNSUBVVQRkd09OK/p20tf573637n1RG1PFdwkKcniDT0HPsEmLuQS+Vr7nc5Kb9g5YFYJZqYSiPWa8Hu62z8HzI3XkE9MzCG40qNmR8DVolaySeDKl+I6qil5g9o6FDUqVW2d6fRVZxvyiruOBsorqqLh8kpv06cIIR3druNKnWBlNJrKkTesM/bXv+53Eae//vWvqDNG+TLE21I0ewO8+HA9tvbocYZozphiKGGtHGqX9MU6Y8w54TykIUxckvKhXeCCWmdB3BTln6FFA0yobYCh4H7jcXhi7k/XVv31ja+PB7O+8Z/XVv0Tc39y/+h5I69pc84PjA75tmZJYOsCDFmmAkgFkxcPtUctLExrUIiWODeHM37StYvzVzUEm+31eqwseX5hAK4oGQfiilsRR8UVq3DOVBK4wp8Jb8kXh4Migt9zXL7Ps1KK5xe2J68gkTaTVyqXhsirxJCVid6gHJzdxZW6XwmvMeC6C1tvtVrVanWfayRXq9V2u/3FF18kVHSv12MgMhEw4S9bLmAmCKFqVkHDcuWH2iV9aUYyp19au9D2URb4u3pq1tqT4Lu3nnzzZ3987rWNd+tz5L0/okayyg5KZOKZ1CDau11dGI8lXPhbnZqV2Gmhqp33qzXtj99pbInK3DvEVSjBKM9y6H1xPviL6qEdyitKpIHyKtHzzeSV2tZUS0Hcfdk7XGklGN7M9nP8R3fk3VVkTDe2uypWoJT+NX7hSXk6Tg5JgeubeuSdOkilINHPDhDuXjzO69nGn4Rq9c2s09jat771rVEyUw/a56uvvgrMq1DcB6a2ySaC4YDgKm2yDcQVExpxYRr7EhLBRavTl+C+H9+1h/aH7DLmnzSEtWOeVYJB53UdpSf78vTtHDKFWuJfgZSfSgigrp2CrKKTPCVI0rjinQNxlaifmEVcaTpMRnFFBUmeKq5yfPeu1xz0rQYf1b5yCH9Ck6sTHUjihLertSyhXbpb1YZ73n7C+F6cSIlallprSMXKAcFVuC81B7dVy3Kg0Fepp5ExjjfYopal78vZZRR8lMu+WPoJMarc6cm6DvswEFeqKtK4Ys5YdnGlhTgziitm9JBEiqscBx/GDyDCxa6Ttdq/xPvS+i0UG0G5G0poj2/393jrKdddEv3kT4Wgb6EA0k4fDOOH5BDZNI74JfvALpFbnlTDVgNfDRnadMpjfuOPsKXZ272t8v4mB1sxRqE4Pji4SsNj/HFFlo0zrtjgQFxpRnJGcaWJCRnFVSLEmpBX/d2U/eU7qVET7tbynXnfpK8/8vId+9Dd2bIwzuMLd7J8t9vpBnyFGk2JvumsY1c5x2iSkCmckAn26Sg4hTgi3NyT/Mvu0GVhT3x29V2CIcvCX1NchTtfFt53XDHNb5xxpR1L44qoyy6utNxARnHFNdeB8iqX6VlE1BIfBF+QWiLTKpYJyHq7nVzBF3lxO4h/KkyHz6Lxl840wTabRV9vXCWGnAlcwdIac1wNl86Jwk5ZxFWihFIWcYUhbCavctkaHvugOEhAxLOgoU4b39Ib0i8NxQHnuxJA5IMqa3QeemLHBSPvsB04bTInjomw7IrjneCKd2YIV2TZOOMqLY4VV5zO2cWVpvJnFFe67hKk5FWOwwvieimU3UndeNoP9t/SKunFt18xlsc38UHPrjR1SPGubMgiENldJUpoC1m0gEgOX4wmsllTsxP3841dSUMksHw5p1p7NZA4ZKFynT1nC+Rib7+qZytw2Q1FmM4QlSyhbWFjUxwauMAwC1cISaKDgCsdQlZwxQr844wrUm8grhJbdrKIK81IziiuCCR/kLzKBaJUvTFLUSD/eCeRlFik0rdwbvAR3MMop7amM0Qpzka08zpJSARCUMnqS5k5bZYM9ix772uQUpW51JfdxVUQVz+ZwFXiNIrxxJV2Po2rEVNAxxlXDClnF1e6GyEtr/qnhwVf92Qb+i6kHX4nS0B0tkBq4EsW601MV2VP+hvOlkTHSFLaAjpRCVx9hJ3UtzxDsk2420lceoIQ/3VwcKVkzAqudKfF2OJKH0njijlj2cWVFhjOKK40Zywtr3LkvS/pHJ44vByVJ16eajDPYou8n8PWZ0PztckPfbDb7W5sbHRtm2gQBBsbG/imZ4WjyRiOQRshFXwzYWhfEI6KCd92eAWyJ0DZg+FoGb5e3ItX4PJ+9iQ9RvZZf9eBKKZ1kigIaACSsKSS9kH7jAtYV+rppjA0mzAP+QpCKjBDjCwO4lW4OfCDg6uErMkErhguH2dc6aDSuIJ2yTSuEhMni7hKmOwJeZXTu9l1MpgdIrnTrwy2OtuO49dBevHjncO4XRPuwUYQdeLYpe7zS9gnfIOMx210I5FOyAOCKyIhQ7jSMipjiyt/aNxG03kziitol0zjinN/oLzK8d16TJN2CMNeX1/nONNAVFSR4koLWgf+Do7/4iOBKX8dP/HniQu5IcfpsCIpm+rt+DidUEwhklXjkrw4qRIDJE0SyECDBAdhyvcqLMgR8hj/guNPMmqH+a4EOr3tH//FWkO+GC8HB1e4IVu4omgeZ1z1xC9J44qiObu40s0iGcWVHq+Zllc5PulbeoYq8158uS8Q1aov47DZISpJ5V8gITxFsy9+N6Gpj5CaBH3PUhjZJikYSC6gYkgP6QwlXyUwla6wINsILIWpby4/qaRziXcGZr9oPDoxJ7VBpZsnSRoKFxUECbng25Kj4lhlBLCbmGa+OdSKqlAMFuUUHmc5EPSQCMOUZvsHBFfkYIZwpTstxhZXbHMgrqAgM40rhpWyiytdc03Lqxx7oAgIzVEin4iwBOfIDI5ZO+qLVcJHAsm8pnlC/vl7dpAOfRcyXumrjydIod+TPRyX8kYnJ7/hfwl9sl+J4Ps+6yzt9gFN/exP/snfFYtKN1pJHFSwyQFNVNsktRLha48rX9ZOs4KrxInu44krXgNxpSXPM4orFc0ZxRWAtJm8yj1+8vTwc/g5/Bx+Dj+Hn939HGqXw8/h5/Bz+Dn87P7nULscfg4/h5/Dz+Fn9z+5VqtVq9Xq9XqtVms0GrVardVqtVqter1erVbr9Xqj0Wg0Grit2Wzink6nU6vV2u027q9UKvgXzrV0HKfdbjebTTxSr9fr9TruwW1o3HXdTqeDV6+uruK9juM0Gg3XdavVKjqAp3BoZrPZLJfLruuyJ3gL+9But9vtdsuuRqOBTjqO8/jJUw4Hd9bsajabaLzZbDqO4zgOelKtVlutVrPZXFtbq1ara2trruuiEdd1HcfRIdTrdXzJB9Fyq9V6+PBhp9Mpl8vlcrlSqTx8+BDfo89oEwRBU5VKBTQHMfHGer2ONtH/arVaq9XK5TJ+b7Va7XYbpC6Xy47jsGU0jgfRZ3QSBHQcBz/r9ToGjiGjGxhXq9UCzcFWNALygrDsPMjLrh4EXOnAs4Krx0+ejj+uwJrNcPX4ydOs4+rxk6dZx9XjJ0+HyKvco0ePlHN4Md7d6XQwhlartba2Bpa3220yFf0DREho3NbpdDqdDsGK3j969AjNArLAHxiJl7ZaLYwHv4NnoBFeihd1Op12u12pVACaSqUCquERkhL3g53VahWEwMjRebANvKxWq3gQJK5UKhwpQIOraRduW1tb4yTBSzudDp4CcfAKzMlGo4GugtqEMl5aLpcxjdE+kYo2QS58j3ex82AtuYOWAW6AFaRgr/B7uVxeW1tDz0lD8Boowazg63ABEhQcIOPjJ087nQ6RgLccHFzhl2zhCtplzHEFrbAZrh4/eZp1XD1+8jTruHr85OkQeZVDJ9AEWoF2goJic0QPesP+Qa1BX2EM6Ch1IKmMxh3HgQKk/uRFSwccxT1QrWgB1hPvhAXhui7sDjIA6ET3MCvwDbRLp9NBB3gPO6bkownDmUl2YtZhpDq10GbDLpgtpLuOrt1u6zTmxKPOxwUzBORFb2kDkmt1cQ7QIC0p8JEiAO8C7yAFOFKYLUAeJx5oCyRRwnIsICMagXYBQXjPwcEV+pYtXEEojDmuqtXqEFzBd8k0rjCETOMKAaHN5FVO7Q6Qhs3hX/DIwOa66e1ms/no0aN2uw01lRgw+gdwuOaL4fW4k5qzUqk8ePCACpMoofJH451OZ3V1Ff0EWOGCoWPQ5FT1aApPAdBqYiut0ckE7UA1mDAtixig8y3zdmHprK2t4VkwEkrbcRz0EJ3kqGn+gLDker1ef/jwIbqBn/BJHzx4QOOCcYNKpYJ3NZtN+OY0KhN2DQYOGwTQB3bL5TLxgUf4ODjVtDDFgwcPyuUy5YWyry5hFhCWfjpRdHBwBQpnC1eYC2OOq3K5PARXcL8yjSuI5kzjCkDaTF7l8O5Ezxrmc1GRUkk2Gg1QEDSqWzS2bo4bvgHmqtUqbRm6sVSMGDlB02g0aGfhd/QSF+hej5sn8KYfPHgA/AEWoA5sFseiwIAjutGy+CaGCVJynlDDw5lFV9lDvBF9q5uTSIShw/DQ4QgDrGgQo0NnwDmQF51B3BaAcMSjB7fA/oZFitEO3g7C4kvSx7EgAyeSIhJYRIPoCQmCx2mG4C2KGzjLNYsgY5Jw/hO7BwdXjLRkCFfULuOMK9UraVwhFJFpXEG7ZBpXsCw3k1c5DgwXlK1jcb3V1VW0iwnmWlgQpgq43rSoH20B/k5i1eNrbug3rABGHqBaMVSSjOQAHcE5jrllsVSwk+tjNQsjojXwCbxEa44FFvFfAhHh4Kqt4JEmDTHAYWIAakQ2AFqzyCnCr+whXgfHE6TA2x8+fAh4wXhEC5wzdVn2BAjYDU5R9J+zC0QmQcBEGl8wQPDgo0ePcAM7yWXDpiwhNi005Ji/T2sRdH7w4AHUNrhZs+vg4KphUekM4QosG3NcQd9shiuu6mcXV1g6yjSuVMen5VWusX2ftJHNWAdc6TGMdayurgIoxHTdgsJgASfzeMbQHj95uiuxjoziamxjaENwBXdzzHE1PIb2+MnTrOMKHmSmccV1l4HyKle3FS3qz4alWCS8MNd1Hz58CIrTI2u32wBlU2II7DdVNxBD6tMLxr8qlQpsH4KAjMQr9GYOFYPEG0ECjNOV3DtQjWqWnKb9RYsAcwnoB1bQAeT2ra6uOpZ6WDeDggOkWVSzjBfQkyYSUIKnYGqht8ScopyvJv1bttxKE6klOTk068gCIO/hw4ckBQiOIcCTrVsMwbGwQ9NyDV1LdEEMAW0SOiAauoTMHMzzuplFyqyDgKt2PJs2E7ii1TzOuGpJSkIaV5BrmcYVh5BdXMGD3Exe5aAny+Uyxobf4WGRWHWLGxKLNfNtyZhHjx7VLKeCPMaLCVCQw7HAKH5CdQNGzXg2XtViwXVLP4fOJy+JjIbFPdHPhw8fglgg4n/8x3+AEMp+2EQ0r1yLHiDLe3+8ioZFWsmVlkV7XdclfGmv4RcaO5jJmDBEM2Ymg90YFL+pScJiy3Lk8SBGjegtegh5QesSRk3dTDlMfhCWDjv/dXBw5VgQP0O4gh8/5rhimGggrqAgM40rxCczjStdbkjLq1zjwGwxQwAHDXY6HZpg5AFuW11dhbrmFCIjaWGtra2trq7iRQ27qpYpD2vCsVBp3WwxjJeeaaVSAd2au7fFrPY8ti4SYQdz6yKG8wy4+uVyqTRfKi3M3N93XEG7jDmuOkO3LjLhKru4goLcdVztp7zCEDaTVzk0iseg9gECWAT4hpxQQhNJSBJHCxgVjA7wsl6v48GG+Z418btvvFbMn72O79HOtbP9b1YuH88Xivo5Oxdht1arNRorl44WS5fvNMxxbrfbn146li9dWpatYQ3bOQxCAF5gOToGnlWrlTfeKL+4GGVQgKyIES/PVf63iTI+f7fUcV23XndfsG/4yU1UZm1vFLg8/d3yi4stRm/pL+NaXV1tmgPOacw/aX/VbJEQIK5b2oYrW58ajQYAgdnbtOU72B11S9tvt9sPHjzg8DF20AQ3N20Ru27pPQ3bv02jFbxGg5wkrqXE4M6mbcjaW1w5sxPzpdJ8qTQ/MVuJ4YreBnFFpx5vqZubT1EiuGpwpMRVzbZcxHF198pCqTRfKn36z5vjKhpXGlfzn0C7XPltp4M4PoDh2ipu3aLwbgxXUTRjJ7jCYuwz4mruNZ2Sr/wshqtPLx3jv0o/+KyPqxuvxyfy1rgiEwfiChvdd44r7fC5nw+UV3OvxKVQvlDMF17/YMe4IhdSuKrRVxuEq0/eKhVfeW8grm5dPFqcvBEFBjtJXH3yVqmYP/qD28TV9XPpcd3YDq6Y9jZQXuXatihHPa9qlpqT9gtvq1oiGtwrKk+qkJoE3B3ZYUR3u9VqXZ8s5s+9DxjhpXOTxfy5GxjY8tvH8sd+eIcZFLcvHykU80cvL0f+8spbpeKRS7f5ilardefy8Xzp4r1Oh54auteyvUt4EcHaarVUVby4GOURGilq33mjnJuo/FR26mIUmPNUnx++W8694S5GTG28aA2e+dBpSkoimkWgoBFfbGSbalB0bC8YjUfGbWGSQAQAhZyiNVm1wy/qzwLuruWKkN01c8aBY8YlWhbVZSM1yWNxbUGLRhP6vA+4undvohRpl9LEvc8UVzUL2hBXddt2B/Ji0rqSmQM5RcO8ZlvqHAtMV20tV3C1MnuzVJovlT6ZH4Sr/h7GViuBq3qt77tcubs5rrAyTGHRtAQnyvpnwxXmwrPh6vpk8eyc4Wr54pFC9Gen06nNncsXjl2+A1zNvVoovnotwtXcZPHsnOFq+WKpUJy8sQWuCJ6BuIJo3hmu7lw8WswXXnt/ZHmFNu/+4Hi+dGl5x7iCvTsIV9WWlRuI4+rGZF89J3A1x3+9es1pD5BXy2+XivlCMX/08l3i6vq5fOHcL3aAK3BhM3mVqz3X+PJ7Z4v5c+/XJQ743tli/rVfwFVc/G9H86VLy7E44PVXCsX82WuNRqPZvPN/HymWLt9tS9bKyuXj+aOXlwdlrcDEbm+ateK+MFE+82Esa+XDd8u5ifJPts6Gck9NlE//OpG1Un1hovzCwrCslVHiy+O/bgGEtfd73WL+H0y1lOZLpfnvzyfiy//6fflv6aU7KxBt5fvf0+9fvv8bzOpPV16S7/9+tgqX67MZeCefzEa/zJdK82/+0nEcx1QLPx//Ary7f/9l+X7iaqWfDfWb2L+gXa5+tttZdlviCtlKu4Krucli/tz7rVar2bxz6Wjxm28vE1fLF4/lj/1weRCu3n21mJ+cG46r5tB1C/guO8HVp5eO5Qvn3t32usX7ZwvF1z7YhSw7mmXO9rLsbpwtFM/ODcyye/flQvHs3AB5NTdZzE/O3XrraP7o5dvE1Y3X84XX53aAK+r4gfIq17AMbvplZKpjeR10werm98G6oXVMKdBqtRgkperDz6bFWPE7pNsH/7WYn5xrWXKI4zjXzhbzk3MPHjxwHOfTS8fyRy+vWBYH1Pu9H57IF/7r9VrNdT+5dLRY+uE9NStWLh+HQuKcpOFD34XBVtrC1Wq12ay9OFF+YSFKIW+1Wo1G7btvlP92rm/+AEZq+2NQs/9Uzn2n/IlFn9tRmkrjxYnyqX9+UDfjEYqdiCfmWlaNgwxGpjnZVjfrrGKbaRlM5xSitqBBt7a2hq42JE8RiK/ZVbfcdqaLwIxyLXgNwrqWXuJa1RAaLA3bFAbaNi1BaM9x9fs3S/Ol0vzLs7+P4mNv/r6Pq49WSqX5Uunm7KfA1W//4aW7d+r1+s9vRUsd92BV/Ov3J+7dd10XQaqXf/u7Wq3m/u4fS/Ol0vz/9at6vdW6b0pl4sqq6zjOB8tRy3dct1a7+474LsAVPJKJz+7WarXqb/8B2mi+0ahWq5GzMv/9+Uaj1WpFkbGbs7/ZBFfVahURpziuomzdneCKVSx3jKvbF48Wj1xageUHqdfH1Y3X84WzNwbgauXy0SjqMARXkMKb4QrTeQe4+uTi0WLp8t1tyatHjx7NTRbzR39wy+QVegV5VTNvSeXV2toatpJgInRsZ27NEq7ceASV8gpEGCSv5l4pFCdvNGkmmrxqNBrvTxaKkzeS8ur6ZDFfurSCtYajl5eJq7lzDIU9G64w9zeTVzmoWfxE+Tk8DMrim4atpEHjgUBNC+6jNx2r9QbaPXz4ECRzJZhI379u6Yk3XksHNIv5s9cB6OW3j0HTVi3VodVqrb77ar5w9NJKo9W6+1apeOTSCrQrELD89rF86eKyZWpDCTdtJZPKGf/tWFG5hw8fViqVFyfKp39dhSm0trZWqVT+bqJc/I6urDjvmB9QsySZzu/rfzNRPvNhFHwAv9vtdqfTeGGi/MJC30+ko1Cr1bhfl+R1XRfmOUaqvm3DlijZSM1WTZrNJneK0eir286smsXoRYn2i9NxII5l+JChaN+xTFPiqWLF8kBYUInh46blywMke4orCytdvcvFj+VfRriqzr48XyrNl/7xdy6NKcdx3NUr0EP/8NuIVhGuyldfni+V5v/+//09Sr3+M7yiN/+t7bp3Igdl+QOA2RTGxJV/d5rN+/bfX0WQ+PcfTcyXSvMvzzwArj78XvTGqr2l9NLKp5AdvzJFdd9CfzFcdTp1CWoJrqKF2Z3gigbBTnE1dy5fOPbWMnD1/iuF4qvXBVfXJvOFybk0rq5N5gvH31reAldc7hqIq8dPnu4MVx9MFoqlY7qyO/neVvKqdfcH3ywUX70ex5UF8UirmLxaXa1YCWH1BprNJpItq7YjMiGvGJFLyav3XisUX/lZBVE1lVedzgcvF4pn5/pRilqtdvvSsfzRy5/WatVq9falY/lj/3SbuJqLr7uce3+7uGK1t4HyKtfYQeizueOQ+vvnivnJubqE1Ocmi/mz10FlLNHfToQ+587lC8cv32277idvl4rffHu5LqHP5FKNhD4xozYPqTfOTJRfXNTQZ/3/nCj/zfWoZEW1Wv3p/yjnJpyfxkPqP/0f5dx3Kx/HQ+qO47TbjTMT5Rc+GhZS57vgUwMQDNw7trWY07UpKfbjs1TDyNjoSzU7xdWDGeiJic/utlqtlTsvRX6M065Wq44pgKvl+FJN5JS8NPMgHlKPx9B0LafZvG+q64MopG4q6h//pVavf/ajjyLtEuEqekW6qfvWq9Kbv49C6pGC/OhHvxl5qQaAcYYuAY6CK8Rkdoqre/90pFA8cnnFcHX9bKE4eUNwdeP1fOHcjQSuli/iqS1xVR+6BMi9+s+Kq+uvFiLpAVzNTRbzhXNzW8qro5dvb2dpubb5EiC0y/aXAH/+SqF47hcDl2o+OFsovno9klftdnvl8vF84fU5w9XtS8fyR3+wPBhXv3i1EEnj0XGF+ORm8irXfK55nAjaar4d4oPoz53Lx/NH/tu9eL7d8sVj+cK567Ua4rz5czc0327uXDF/9PLKoHw7qtnN8u1emCi/uBhVQ3JdF+rh75aiAKjrupU7lb+ZqEzfc6C3G41G83fu306UT/86sjsoHarVKhZyXlxs0fZsWLEjIBX+clOyWWrjdwRFc4Q8ThC2uY/5wffTqxfRIsr9ZrNpKysT77jxPM5Ii0zMVmN5nHc/m6DWUVt+bW1tdXX5x4tR7AscNO+k9L375VbLdM8n88CVJRq89KN/7+Oq4q6jjAAACjFJREFUYVE4/GvWaWOMzBn71PYk9nHVbDIWkcJVJKl3givItR3h6sbr+ULxyOUVwdUcwjJ9XL17Nl84977iau5cvlD85lsfj4IrDG0zXLGK5bPi6jqSDvq4uvODUuH4D+9vLq9uvYUUhs4u5QczuNfYXn7w3GSh+MrPDFd9edV23evnCv2csUqlsnzx2IDgUKF4dm4QruZeyxdev7YdXHHdZaC8ymHknedU5/n6ZJR/XDeHce5cMf/az/EirLsgf8513QcPHtRqc2cLxdLluxj5u68W8+feJ2sRS4XrA2whjgyIcK8+Olm1wjvwnZvN2gsT5dO/rtJsL5fL33mj/LdzUVPNZtO9V4V26XQ68MFnfljOfbe63Gika3dDu8B3aVjgsmVrCTQQqLrqWasfXpctx+gezd7W3tYPt5X2m7P3IljdiyJUN2dXqtV6+SoUwPf/tY+rRqPRqs7S7ajZKqXrug/+9f/hyg1GRBGvsS80og7Qw4f/wpyxCFcPZl6yVxuurLyj/et798sY+y9lCadh9TaAq4qdqzEIVzX+fGZcMWfsGXF1bTJfKE7eSOBq5eLR4pFLt4mrez88gfzXCFdz55DsNCKu2L2BuMJ03gGuPr50tHjk0u0+rm5fPlI4dvnOpvJqbrKIjCGVVw2LQdUt/aEek1eRB5PCVbLcQFpe0TVJyatr52xxBVqB8gqKB8FJtJDA1a23juZLl1Y2wdXtS8fyhXNz28EVdyMMlFc5ONq0DsgPMhjNPXjwALqLLpvKqZaUIqhZygHup/BiFkRN0jngqdTk2JyfvlLMvx7FuG9fOpYvXbxtpkFjJcpIvkNIrVwuFYrnft6GgeNcm8wXjl38NGIPGEnwsZQvrK2aLZRhdtXr7osT5dP/X7zq30I1N1H5zm8i6+B//vdy7g13hVX/7lX+dqLyxu82q/rnItTW2rzqH2dyxw66oHBvWpjYsaKkNQteqdomm3kbIYUJ0LAdDDVbXyGaGxZocl231WppngkddkbbXVs5RDuYJ6wEU5MgdUOS0PYEV+6PoQxe/s1vias7dxEce+lqud5oNH5lGxXvAFf/8o9/v7Lc6XQ+sNWaFfhwv39z4t79/v3zb/4yQsv8m/OlN/+tLdrll7Va7eHDD9+cj6Ugc2X+nuFKm3r48GG9/qs350vf+02lWl2JHJ2FmXuNRr1et05eud9sNne1muSWuOJe/WfA1e1Lx/KF45dWBuFq7rV84dilFeBq7tVCcfJGhCs89dbyNnBVlxImaVwBdTvC1XuRuMCzv3g9inp1Op3mjdfz5gRE8ur25SOF4xdv19krEHl1dRWBO9e25tQpr8zIVhUIj61pK8Fof6C8ci2ckJJX118rFM/ODaxS+v5Z+5c7qErpyuXj+aM/+NTIMneu+Op14mru1UKxdPnOtnCla65peZUbHhms7ebmgAFJ3DdeK+bP3WhJxHlusph/7efog250Yip3LRFx/uRSqX/DUYDeHbQ5QNVsS5K44bXovsjiu/39XM1Fp7+q/8NKrVZDukWz2fjOG+Xcf48YT5SXy2WE1LTBv7nWl/hNy+wELJq7tOmktscrZM3NNzOpdhkx4rwTXP36dj8tuI8rUzml5V+i5fuyGwaLKAg4fBb//qW7KwCJxcf4eWnWadfrnyXTjudLE/fuC67mv89/Lf8KuEqlHU9cWYVl+mm6tdLCzKcVxVWzZmv4KVy1FcANqYa7XVyxeM/2cXXv0tF0pOX4xdvRi5bf7s/ZI5dWDFfYWZL4HHtr+Vk2ydXM/doFXF2b7Pfn9Q/68urn0C6UV5+8XSrmz15r7+oKme7AS8ururibJq9+cTZOwyMXP6nX65VKpdX6efJfl25XUrhauXw8X7r4qeHqdlzAHrl0e7u4YvLhQHmVewaHgybArihwx9YPt6nA3e2Wr2egdoeGYW33yow/R4djuGHI/o9iGOr5dLUdOLJjiStzOJZ/tRmudsvh2E9csV74OOOqLlcaVxhCZnG1dfn6TOAKq/qbyascu86Me0fC8Vgig3LGDU3b1YUbKnbyAZlBuwBcrNvqHAkHt6ZhGXscAM0TLoRCByrXMbCW7YJEr1j/A5n42FpVt8LUGAJnFK0z13JpaCNUrZ5rywowVK1SBV5EBrRs3xOGRuOOkKrZ3q6Wpes4FkdGqqWaA+3xK4batKBt3SrKEJcYETFUt1X9lpxx1LZjlLKPq7vRGs/tX2+GK9eKBGcIV4+fPB1/XDmW3DgQVzxvO5u4qnEImcYVnODN5FWumZFCvJ0db2hnsUUSnYbD8yqYmt3TDwliiKqWXWokfi1w9dsolvXxLzbDFa5s4YqpPuOMq8bQwuH0mLOJq07L6upmGldQkJvJq9w4exu7q73pu+xEezfsoDpiy4lXUKhJyFInTN3qVTRsM+PYWoXb9TaAsLGyCvcTV7tiFe4zrli+fpxxVR/qbUBBZhpX3O+SXVyx2PZAeZXj3XUrdVm3vaagBQhBlcj34d24Bxttmlb0FGxomvdEzLlWr6ZhKXHUt3WJeyKTj1RzZSsGB1m3AHHFTpSjDYIHmX9NwwebeznSSqXCpHjwDIh0LU0e9NU+16zaj2NZ9nXbyovh435YN6APbZy2levBwB1L6pd9th0W3G7ZKhxhUd3x/m01Seqy2FuzOisd2QutU4VTuiN739qWJFqv1zFJ6pKjqSj82uOqXq9nDlf048cZV+zeQFxBQWYaV8ytyC6uGBUfKK9yzbHc/s0RdnYvaYpwdPerAnRtq6QpUsm1ZVXHskpqdhYs6dyQcmENW77jGJu2XwHGC+1KCo6qHR0IlrWlsjdnIAfoui5FEm5wNt/+TfulOfZlBfYCV7V9ryy+c1yxEsw446o1tFwFK/BnF1dMtswurlgaeKC8yjUsI6Jum+8qlQorszZsr2wrXsyn0+mwNjgeUS5y/I7ViWrYjtCmRQAZriV96+ZZ1+3S9SJkZFarVVgZwCLUL40O3E9YgyUtiyCzzlhTyszVzMF0bHNs1arC0YvEBeLSjIILjywXoAeN0EVVbtXlnKVmfHeSm/1QDNddHAtYAw8HBFecuhnCFQyCMceVa2tCA3GFIWQaVyxmk11cQcdvJq9y7vMojfzo0aO6uXu0PurPWmoU/Xe3KjUK7UKtXjM3OcEkJWttaGnk6g5K2DqS88fpl63SyEQhtqnSbKHBdUBw1R5ccnuscUXRPM64coeW3GZ1u+ziCpGxTONKK/Cn5VUOmpxc5AJdzQ6ZAE0JO6URqc9iCS0rZ4t3O+YGUrdTS7OjDTmLzbGYIBgPehH6rZ0dCUxCtMbj6NaqpcO3JNJas4ina6uXriXp08asifUE2JH9AEqj0aAZ6Ng+A/Szacepknf1aDdWC71CRLVqR0DijbReaVIR99QudfOIMZ0ODq4aY3Yk8Ci4QkBjzHFFsTgQVyxKm11ccX93dnHFU3YGyqvc4ydPDz+Hn8PP4efwc/jZ3c//Au+Lzt9AQQEpAAAAAElFTkSuQmCC" alt="" />
字典树法:
#include "cstdio"
#include "cstring"
#include "iostream"
#include "algorithm"
#include "cmath"
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x)) const int MX = 1e6 + 5; struct Trie{
int v;
Trie *next[11];
}root; void Build(char *s){
int len = strlen(s);
Trie *p=&root,*q;
for(int i=0;i<len;i++){
int num=s[i]-'0';
if(p->next[num]==NULL){
q=(Trie *)malloc(sizeof (root));
q->v=1;
for(int j=0;j<11;j++){
q->next[j]=NULL;
}
p->next[num]=q;
p=p->next[num];
}else {
p=p->next[num];
p->v++;
}
}
} int Query(char *s){
int len = strlen(s);
Trie *p=&root;
for(int i=0;i<len;i++){
int num=s[i]-'0';
if(p->next[num]==NULL){
return 0;
}
else{
p=p->next[num];
}
}
int v=p->v;
return v;
} char s[10005][20];
int n,T;
int main(){
cin>>T;
while(T--){
memset(s,0);
for(int i=0; i<11; i++)root.next[i]=NULL;
cin>>n;
int ans=0;
for(int i=0;i<n;i++){
cin>>s[i];
Build(s[i]);
}
for(int i=0;i<n;i++){
ans+=Query(s[i])-1;
}
if(ans>0)puts("NO");
else puts("YES");
}
return 0;
} /**********************************************************************
Problem: 1886
User: HDmaxfun
Language: C++
Result: AC
Time:304 ms
Memory:114092 kb
**********************************************************************/

  树状数组:

#include "cstdio"
#include "cstring"
#include "string"
#include "iostream"
#include "algorithm"
using namespace std; #define memset(x,y) memset(x,y,sizeof(x)) struct Trie {
int v;
int next[11];
void init() {
memset(next,-1);
v=1;
}
} dir[100005]; int tot;
void Build(char s[]) {
int len = strlen(s);
int now=0;
for(int i=0; i<len; i++) {
int num=s[i]-'0';
if(dir[now].next[num]==-1) {
tot++;
dir[tot].init();
dir[now].next[num]=tot;
now=dir[now].next[num];
} else {
now=dir[now].next[num];
dir[now].v++;
}
}
} int Query(char s[]) {
int len = strlen(s);
int now=0;
for(int i=0; i<len; i++) {
int num=s[i]-'0';
//cout <<num;
if(dir[now].next[num]==-1) return 0;
else now=dir[now].next[num];
}
return dir[now].v;
} char s[10005][20];
int n,T;
int main() {
cin>>T;
while(T--) {
memset(s,0);
memset(dir,0);
tot=0;
dir[0].init();
cin>>n;
int ans=0;
for(int i=0; i<n; i++) {
cin>>s[i];
Build(s[i]);
}
for(int i=0; i<n; i++) { ans+=Query(s[i])-1;
// puts("");
//cout <<s[i]<<" "<<ans<<endl;
}
if(ans>0)puts("NO");
else puts("YES");
}
return 0;
}

  set:

#include "cstdio"
#include "string"
#include "cstring"
#include "iostream"
#include "algorithm"
#include "cmath"
#include "set"
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x)) const int MX = 1e4 + 5; string a[MX]; set <string> st; int main() {
int T,n;
char s[15];
cin>>T;
while(T--) {
scanf("%d",&n);
st.clear();
int ans=true;
for(int i=0; i<n; i++)scanf("%s",s),a[i]=string(s);
sort(a,a+n);
for(int i=n-1; i>=0; i--) {
if(st.find(a[i])!=st.end()){
ans=false;
break;
}
string tem="";
int len=a[i].length();
for(int j=0;j<len;j++){
tem+=a[i][j]; //string 居然可以直接添加字符,涨知识了。网上查了一下,string是一种类对象,可以直接用 +"xxx"将xxx直接接在前一个对象尾部。
st.insert(tem);
}
}
puts(ans?"YES":"NO");
}
return 0;
} //我一开始一直在一个个字符的添加成串,再转到set里面,这种方法卡时间又卡这么厉害,之前没过也是必然了。。 /**********************************************************************
Problem: 1886
User: HDmaxfun
Language: C++
Result: AC
Time:972 ms
Memory:7460 kb
**********************************************************************/

  


Phone List 字典树 OR STL的更多相关文章

  1. HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树

    http://acm.hdu.edu.cn/showproblem.php?pid=1800 字典树 #include<iostream> #include<string.h> ...

  2. STL MAP及字典树在关键字统计中的性能分析

    转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...

  3. Organize Your Train part II 字典树(此题专卡STL)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8787   Acce ...

  4. stl应用(map)或字典树(有点东西)

    M - Violet Snow Gym - 101350M Every year, an elephant qualifies to the Arab Collegiate Programming C ...

  5. hdu 1251 字典树的应用

    这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...

  6. hdu2072 字典树

    这题印象深刻,我刚接触acm时,以为这题是水题(因为是中文,又短),一直没做出.现再想想也是.可能也是我以前字符串掌握不好: 这题其实也可以用stl里的map写.这里我用字典树写的.其实这题算简单题了 ...

  7. C++ TrieTree(字典树)容器的实现

    最近研究了一下C++线程池,在网上看了一下别人的代码,写的很不错,参见:http://www.cnblogs.com/lidabo/p/3328646.html 其中,他用了STL的set容器管理线程 ...

  8. 『字典树 trie』

    字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...

  9. Trie(字典树)解析及其在编程竞赛中的典型应用举例

    摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...

随机推荐

  1. Linux中的pipe(管道)与named pipe(FIFO 命名管道)

    catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常 ...

  2. MySQL5.7.23解压版安装教程

    每次找安装教程太麻烦,因此给自己备份一下步骤,方便以后查看.解压版下载地址https://dev.mysql.com/downloads/mysql/,详细图解如下: 1.根据自己需求,选择适合自己的 ...

  3. 第六节:WebApi的部署方式(自托管)

    一. 简单说明 开篇就介绍过WebApi和MVC相比,其中优势之一就是WebApi可以不依赖于IIS部署,可以自托管,当然这里指的是 .Net FrameWork 下的 WebApi 和 MVC 相比 ...

  4. ArcGis安装失败提示“需要Microsoft .NET Framework 3.5 sp1或等效环境”的解决方法

    这个问题一般出现在Win8或者Win10系统上,因为系统默认没有启用该.Net Framework. 下载Microsoft .NET Framework 3.5 sp1安装后再开始安装ArcGis. ...

  5. cookie小栗子-实现简单的身份验证

    关于Cookie Cookie是一种能够让网站Web服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术. 用来保存客户浏览器请求服务器页面的请求信息,可以在HTTP返回 ...

  6. 常见的游戏AI技术对比(FSM,HFSM,BT,GOAP,HTN,Utilitay,机器学习)

    最近研究的内容,比较懒还没写文章,先占个坑,过几天补

  7. 共通脚本utils

    /** * 模块名:共通脚本 * 程序名: 通用工具函数 **/ var utils = {}; /** * 格式化字符串 * 用法: .formatString("{0}-{1}" ...

  8. 迅为iTOP-4418开发板-Android5.1系统编译补充

    基于iTOP-4418开发板-Android5.1系统编译补充 5.6 编译-20181225 日期之后的源码 本文档补充介绍 4418 编译网盘目录 “J:\局域网共享_阮\iTOP4418 开发板 ...

  9. Map和Collection

    Map:key---Value(一对儿数据) HashMap:无序存放,key不允许重复 HashTable:无序存放,key不允许重复 key是set集合,value是collection集合 Co ...

  10. pythonのdjango连接MYSQL

    在py3.*中利用django使用mysql时,会出现一些问题.由于django默认的是 MySQLdb,但MySQLdb目前不支持py3.*所以我们要改用pymysql,首先要安装pymysql,命 ...