<?xml version="1.0" encoding="utf-8"?>
<search> 
  
  
    
    <entry>
      <title>Nginx总结</title>
      <link href="2021/07/25/nginx-knowledge/"/>
      <url>2021/07/25/nginx-knowledge/</url>
      
        <content type="html"><![CDATA[<h1 id="Nginx总结"><a href="#Nginx总结" class="headerlink" title="Nginx总结"></a>Nginx总结</h1><h1 id="1-前言"><a href="#1-前言" class="headerlink" title="-1.前言"></a>-1.前言</h1><p>之前一直咕掉了， 这次把许多优质内容总结下，许多来自其他大佬的文章，底部有文章链接。</p><ul><li>反向代理</li><li>负载均衡</li><li>动静分离</li></ul><h1 id="0-基本介绍"><a href="#0-基本介绍" class="headerlink" title="0.基本介绍"></a>0.基本介绍</h1><h2 id="1-Web-服务器"><a href="#1-Web-服务器" class="headerlink" title="1.Web 服务器:"></a>1.Web 服务器:</h2><p>相比 Apache，Nginx 使用更少的资源，支持更多的并发连接，体现更高的效率，这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应，感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.</p><h2 id="2-负载均衡服务器"><a href="#2-负载均衡服务器" class="headerlink" title="2.负载均衡服务器"></a>2.负载均衡服务器</h2><p>支持作为 HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。</p><h2 id="3-作为邮件代理服务器"><a href="#3-作为邮件代理服务器" class="headerlink" title="3.作为邮件代理服务器"></a>3.作为邮件代理服务器</h2><p>Nginx 同时也是一个非常优秀的邮件代理服务器（最早开发这个产品的目的之一也是作为邮件代理服务器），Last.fm 描述了成功并且美妙的使用经验.</p><h2 id="4-优势"><a href="#4-优势" class="headerlink" title="4.优势"></a>4.优势</h2><p>安装非常的简单，配置文件 非常简洁（还能够支持perl语法），Bugs非常少的服务器, Nginx 启动特别容易，并且几乎可以做到7*24不间断运行，即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。</p><h1 id="1-基础内容"><a href="#1-基础内容" class="headerlink" title="1.基础内容"></a>1.基础内容</h1><pre class=" language-shell"><code class="language-shell">nginx  #启动nginxnginx -s reload  #根据最新配置重启nginxnginx -s stop  #立即停止nginxnginx -s quit #安全退出nginx -c /特定目录/nginx.conf  #以指定配置启动nginxnginx -t #检查配置是否正确nginx -t -c /特定目录/nginx.conf  #检查特定配置是否正确nginx -v #查看版本信息</code></pre><p>Nginx默认的配置文件主要有 main、events、http、server、location 五个块组成。其中 http 、server、location 属于嵌套关系。</p><ul><li>main：主要控制Nginx子进程所属的用户和用户组、派生子进程数、错误日志位置与级别、pid位置、子进程优先级、进程对应cpu、进程能够打开的文件描述符数目等。</li><li>events：控制Nginx处理连接的方式。</li><li>http：Nginx处理http请求的主要配置块。</li><li>server：Nginx中主机配置块，可用于配置多个虚拟主机。</li><li>location：server中对应目录级别的控制块，可以有多个。</li></ul><h2 id="0-关于nginx配置的一些说明"><a href="#0-关于nginx配置的一些说明" class="headerlink" title="(0)关于nginx配置的一些说明"></a>(0)关于nginx配置的一些说明</h2><table><thead><tr><th>语句</th><th>说明</th></tr></thead><tbody><tr><td>user nginx nginx ;</td><td>Nginx用户及组：用户 组。window下不指定</td></tr><tr><td>worker_processes 8;</td><td>工作进程：数目。根据硬件调整，通常等于CPU数量或者2倍于CPU。</td></tr><tr><td>error_log logs/error.log;</td><td>错误日志：存放路径。</td></tr><tr><td>pid logs/nginx.pid;</td><td>pid（进程标识符）：存放路径。</td></tr><tr><td>worker_rlimit_nofile 204800;</td><td>指定进程可以打开的最大描述符：数目。现在在linux 2.6内核下开启文件打开数为65535，worker_rlimit_nofile就相应应该填写65535。</td></tr><tr><td>use epoll;</td><td>使用epoll的I/O 模型。linux建议epoll，FreeBSD建议采用kqueue，window下不指定。</td></tr><tr><td>worker_connections 204800;</td><td>没个工作进程的最大连接数量。根据硬件调整，和前面工作进程配合起来用，尽量大，但是别把cpu跑到100%就行。每个进程允许的最多连接数，理论上每台nginx服务器的最大连接数为。worker_processes*worker_connections</td></tr><tr><td>keepalive_timeout 60;</td><td>keepalive超时时间。</td></tr><tr><td>client_header_buffer_size 4k;</td><td>客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置，一般一个请求头的大小不会超过1k，不过由于一般系统分页都要大于1k，所以这里设置为分页大小。</td></tr><tr><td>include mime.types;</td><td>设定mime类型,类型由mime.type文件定义</td></tr></tbody></table><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/nginx-1.png" alt="错误日志"></p><p>​        通常web服务器放在反向代理的后面，这样就不能获取到客户的IP地址了，通过$remote_add$拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中，可以增加x_forwarded_for信息，用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。</p><pre class=" language-conf"><code class="language-conf">#运行用户user nobody;#工作进程数worker_processes  1;#全局错误日志及PID文件#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;#工作模式及连接数上限events {    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,    #仅用于linux2.6以上内核,可以大大提高nginx的性能    use   epoll;     #单个后台worker process进程的最大并发链接数        worker_connections  1024;}http {    #设定mime类型,类型由mime.type文件定义    include    mime.types;    default_type  application/octet-stream;    #设定日志输出模板    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  logs/access.log  main;    #sendfile 指令指定 nginx 是否调用 sendfile 函数（zero copy 方式）来输出文件，    #对于普通应用，必须设为 on,    #如果用来进行下载等应用磁盘IO重负载应用，可设置为 off，    #以平衡磁盘与网络I/O处理速度，降低系统的uptime.    sendfile     on;    #tcp_nopush     on;    #连接超时时间    #keepalive_timeout  0;    keepalive_timeout  65;    tcp_nodelay     on;    #开启gzip压缩    gzip  on;    gzip_disable "MSIE [1-6].";    #设定请求缓冲    client_header_buffer_size    128k;    large_client_header_buffers  4 128k;    #设定虚拟主机配置    server {        #侦听80端口        listen    80;        #定义使用 www.nginx.cn访问        server_name  www.nginx.cn;        #定义服务器的默认网站根目录位置        root html;        #设定本虚拟主机的访问日志        access_log  logs/nginx.access.log  main;        #默认请求        location / {            #定义首页索引文件的名称            index index.php index.html index.htm;           }        # 定义错误提示页面        error_page   500 502 503 504 /50x.html;        location = /50x.html {        }        #静态文件，nginx自己处理        location ~ ^/(images|javascript|js|css|flash|media|static)/ {            #过期30天，静态文件不怎么更新，过期可以设大一点，            #如果频繁更新，则可以设置得小一点。            expires 30d;        }        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.        location ~ .php$ {            fastcgi_pass 127.0.0.1:9000;            fastcgi_index index.php;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            include fastcgi_params;        }        #禁止访问 .htxxx 文件            location ~ /.ht {            deny all;        }    }}</code></pre><p>​            </p><h2 id="1-关于location"><a href="#1-关于location" class="headerlink" title="(1)关于location"></a>(1)关于location</h2><p>​            其中location根据不同前缀的使用方式，大致分为普通location和正则location。多个正则location之间会按照先后顺序进行匹配，匹配成功后，就不会继续匹配后面定义的location。多个普通location之间遵循“最大匹配原则”，匹配度最高的location将会被执行，同时也可以利用 =精准匹配和 ^<del>非正则匹配可以在正则匹配之前优先匹配，禁止执行原有的正则匹配。因此 当多种类型的 location 匹配同时出现时，最终执行结果为“= ”匹配优先于”^</del>“匹配，“^~”匹配优先于正则匹配，正则匹配优先于普通的最大前缀匹配 只要优先的location 匹配成功，就不会执行其他的location 。</p><p>​            location指令的作用是根据用户请求的URI来执行不同的应用，也就是根据用户请求的网站URL进行匹配，匹配成功即进行相关的操作。<br>即：此模块专门将请求导向其他服务。</p><h3 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h3><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/nginx-0.png" alt="location优先级"></p><h4 id="1-精确匹配"><a href="#1-精确匹配" class="headerlink" title="1.精确匹配"></a>1.精确匹配</h4><pre class=" language-conf"><code class="language-conf">location = / {   #精确匹配访问网站根目录}location = /login {   #精确匹配http://xxx.com/login}</code></pre><h4 id="2-表示以什么打头，关键在于正则的开头符"><a href="#2-表示以什么打头，关键在于正则的开头符" class="headerlink" title="2. ^~ 表示以什么打头，关键在于正则的开头符 ^"></a>2. ^~ 表示以什么打头，关键在于正则的开头符 ^</h4><pre class=" language-conf"><code class="language-conf">location ^~ /static/ {   #以/static打头，比如 http://xxx.com/static/jQuery.js}</code></pre><h4 id="3-正则匹配-区分大小写的正则，-不区分大小的正则"><a href="#3-正则匹配-区分大小写的正则，-不区分大小的正则" class="headerlink" title="3. 正则匹配(~ 区分大小写的正则， ~* 不区分大小的正则)"></a>3. 正则匹配(~ 区分大小写的正则， ~* 不区分大小的正则)</h4><pre class=" language-conf"><code class="language-conf">location ~ \.png {    #以png结尾，比如比如 http://xxx.com/img/a.png}location ~* \.png$ {    #以png或者PNG或者Png等等结尾，比如比如 http://xxx.com/img/a.pNg。如果是png结尾，会优先匹配上面一条。}</code></pre><h4 id="4-排除法的正则，同样区分大小写优先于不区分大小写"><a href="#4-排除法的正则，同样区分大小写优先于不区分大小写" class="headerlink" title="4.排除法的正则，同样区分大小写优先于不区分大小写"></a>4.排除法的正则，同样区分大小写优先于不区分大小写</h4><pre class=" language-conf"><code class="language-conf">location !~ \.png$ {   #匹配“以png结尾”失败，进入location，那就情况多了去了，只要不以png结尾就行}location !~* \.xhtml$ {   #匹配“以png或者PNG或者PnG等等”结尾失败，进入location，那情况也多了去了，只要不是PNG的各种大小写变体就行}</code></pre><h4 id="5-通用匹配"><a href="#5-通用匹配" class="headerlink" title="5. 通用匹配"></a>5. 通用匹配</h4><pre class=" language-conf"><code class="language-conf">location / {   #用来兜底的，当前面其他所有的规则都不满足条件，就归入这个通用的}</code></pre><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/nginx-2.png" alt="反向代理注意事项"></p><p>总结就是如果$proxy_pass$ 结尾加上$/$则是绝对根路径，不会把匹配的路径部分带走，否则会带走。</p><hr><h2 id="2-缓冲"><a href="#2-缓冲" class="headerlink" title="(2)缓冲"></a>(2)缓冲</h2><p>nginx也提供了缓冲的机制，用于提高性能。没有缓冲的情况下，数据直接从后端服务器发送给客户端。缓冲的作用是在nginx上临时存储来自后端服务器的处理结果，从而可以提早关闭nginx到后端的连接，减少IO的损耗。一般内容存放在内存当中，但当内容过多，造成的内存不够时，会把内容存放在临时文件目录下。</p><h2 id="3-nginx配置多个配置文件"><a href="#3-nginx配置多个配置文件" class="headerlink" title="(3)nginx配置多个配置文件"></a>(3)nginx配置多个配置文件</h2><p>​        需要在server中加：include config/*.conf;</p><h2 id="4-跨域"><a href="#4-跨域" class="headerlink" title="(4)跨域"></a>(4)跨域</h2><p>​        跨域请求就是指：当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念：我们认为若协议 + 域名 + 端口号均相同，那么就是同域。</p><h1 id="2-反向代理"><a href="#2-反向代理" class="headerlink" title="2.反向代理"></a>2.反向代理</h1><p>​                 对于一个大型网站来说，随着网站访问量的快速增长，单台服务器已经无法承担大量用户的并发访问，必须以增加服务器的方式，提高计算机系统的处理能力，计算速度，进而满足当前业务量的需求。那么如何实现服务器之间的协同功能呢？Nginx提供的<strong>反向代理</strong>和<strong>负载均衡</strong>功能是一个很好的解决方案。</p><p>​                nginx的代理过程，就是将请求发送给nginx，然后将请求转发给后端服务器，后端服务器处理完毕之后将结果再发给nginx，nginx再把结果发送给客户端。后端服务器可在远程也可在本地，也可以是nginx服务器内部定义的其他虚拟主机。这些接收nginx转发的服务器被称为上游(upstream)使用nginx做代理的目的之一是扩展基础架构的规模。nginx可以处理大量并发连接，请求到来后，nginx可将其转发给任意数量的后台服务器进行处理，这等于将负载均衡分散到整个集群。</p><p>在Nginx服务器中，反向代理的配置非常简单，最主要的指令就是“proxy_pass”，用于设置后端服务器的地址。</p><pre class=" language-conf"><code class="language-conf">server {        listen       80;       server_name  localhost;       location / {        proxy_pass http://localhost:9000;    }}</code></pre><h1 id="3-负载均衡"><a href="#3-负载均衡" class="headerlink" title="3.负载均衡"></a>3.负载均衡</h1><p> 负载均衡就是将负载分摊到多个操作单元上执行，从而提高服务的可用性和响应速度，带给用户更好的体验。</p><p> Nginx默认支持轮询、权重、ip Hash等多种负载均衡策略。</p><ul><li>轮询：默认设置方式，每个请求按时间顺序逐一分配到不同的后端服务器进行处理，可以自动剔除宕机服务器。</li><li>权重方式：利用weight指定轮询的权重比率，用于后端服务器性能不均的情况。</li><li>ip_hash方式：每个请求按照IP的hash结果分配，这样可以让每个访客每次请求都访问同一个后端服务器，可以解决session共享的问题。</li><li>第三方模块：fair或url_hash等策略，nginx本身不包含该实现，需要下载对应的软件包。</li></ul><p>客户端访问nginx的时候，只需要配置一个ip和一个端口，nginx帮助我们把请求转发不同的后台服务中。</p><p>如上配置 所有 <a href="http://localhost:80的请求都会被转发到http://localhost:9000。">http://localhost:80的请求都会被转发到http://localhost:9000。</a></p><p><img src="https://img-blog.csdnimg.cn/20190827182543795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FpbnFpbmRlMTIz,size_16,color_FFFFFF,t_70" alt="负载均衡"></p><hr><h3 id="轮询配置"><a href="#轮询配置" class="headerlink" title="轮询配置"></a>轮询配置</h3><pre class=" language-conf"><code class="language-conf">server {        listen       80;       server_name  localhost;       location / {        proxy_pass http://web_server;    }}#配置负载均衡服务器组 轮询方式upstream web_server{      server  192.168.78.128;      server   192.168.78.129;}</code></pre><h3 id="权重方式配置"><a href="#权重方式配置" class="headerlink" title="权重方式配置"></a>权重方式配置</h3><pre class=" language-conf"><code class="language-conf">upstream web_server1{      server  192.168.78.128 weight=1;      server   192.168.78.129 weight=3;}upstream web_server2{      server  192.168.78.128 weight=1 max_fails=1 fail_timeout=2;      server   192.168.78.129 weight=3;     server 192.168.78.130   backup;}</code></pre><p>按上图web_server1配置后，3/4的流量会转发到192.168.78.129的服务器上，1/4的流量会转发到192.168.78.128的服务器上,web_server2的配置表示 nginx在2s内发现后端服务异常达到max_fails次，就将该服务器标记为不可用。backup标记为预留的备份机器，当上面上个服务都宕机时，会将流量转发到备份机器。</p><h3 id="IP-Hash方式"><a href="#IP-Hash方式" class="headerlink" title="IP Hash方式"></a>IP Hash方式</h3><pre class=" language-conf"><code class="language-conf">upstream web_server1{      ip_hash;      server  192.168.78.128;      server   192.168.78.129;      server   192.168.78.130 down;}</code></pre><p>down参数可以将服务器标记为下线状态，在路由分配时，会忽略该服务器。</p><h1 id="参考文章"><a href="#参考文章" class="headerlink" title="参考文章"></a>参考文章</h1><p><a href="https://blog.csdn.net/qinqinde123/article/details/89448076">https://blog.csdn.net/qinqinde123/article/details/89448076</a></p><p><a href="https://blog.csdn.net/tjcyjd/article/details/50695922">https://blog.csdn.net/tjcyjd/article/details/50695922</a></p><p><a href="https://www.cnblogs.com/jasonbourne3/p/14099700.html">https://www.cnblogs.com/jasonbourne3/p/14099700.html</a></p><p><a href="https://www.cnblogs.com/jasonbourne3/p/14099717.html">https://www.cnblogs.com/jasonbourne3/p/14099717.html</a></p>]]></content>
      
      
      
        <tags>
            
            <tag> nginx </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>数论专题</title>
      <link href="2021/07/21/math-and-number-theory/"/>
      <url>2021/07/21/math-and-number-theory/</url>
      
        <content type="html"><![CDATA[<h1 id="数论专题"><a href="#数论专题" class="headerlink" title="数论专题"></a>数论专题</h1><h1 id="传送门"><a href="#传送门" class="headerlink" title="传送门"></a>传送门</h1><p><a href="https://codeforces.ml/problemset?order=BY_RATING_ASC&amp;tags=math,number+theory,1800-3000">https://codeforces.ml/problemset?order=BY_RATING_ASC&amp;tags=math%2Cnumber+theory%2C1800-3000</a></p><hr><h2 id="D-Dima-and-Lisa"><a href="#D-Dima-and-Lisa" class="headerlink" title="D. Dima and Lisa"></a>D. Dima and Lisa</h2><p><strong>哥德巴赫猜想习题</strong></p><p>判断奇数$n$是否能分解为至多$3$个素数之和。</p><p>1个素数的情况：本身为质数，$\sqrt{n}$特判。</p><p>2个素数的情况：奇=奇+偶，显然只需特判$2,n-2$是否为质数即可。</p><p>3个素数的情况：根据弱哥德巴赫猜想：大于$7$的奇数可分解为$3$个质数之和。</p><p>我们就先找到小于$n$的最大质数，然后减去它，这样$n$就很小且$n$为偶数。</p><p>根据强哥德巴赫猜想：大于$2$的偶数可分解两个质数之和。然后暴力找就可以了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">bool</span> <span class="token function">ck</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> mx<span class="token operator">=</span><span class="token function">sqrt</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>mx<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> n<span class="token punctuation">;</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">ck</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"1\n%d\n"</span><span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">ck</span><span class="token punctuation">(</span>n<span class="token number">-2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"2\n2 %d\n"</span><span class="token punctuation">,</span>n<span class="token number">-2</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token number">-2</span><span class="token punctuation">;</span>i<span class="token operator">>=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">-</span><span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">ck</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> x<span class="token operator">=</span>n<span class="token operator">-</span>i<span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>x<span class="token number">-2</span><span class="token punctuation">;</span>j<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">--</span><span class="token punctuation">)</span>                <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">ck</span><span class="token punctuation">(</span>j<span class="token punctuation">)</span><span class="token operator">&amp;&amp;</span><span class="token function">ck</span><span class="token punctuation">(</span>x<span class="token operator">-</span>j<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"3\n%d %d %d\n"</span><span class="token punctuation">,</span>i<span class="token punctuation">,</span>j<span class="token punctuation">,</span>x<span class="token operator">-</span>j<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="D-Same-GCDs"><a href="#D-Same-GCDs" class="headerlink" title="D. Same GCDs"></a>D. Same GCDs</h2><p>$gcd$和欧拉函数定义。</p><p>$gcd(a,m)=g=gcd(gk_1,gk_2)=g$</p><p>$gcd(k_1,k_2)=1$</p><p>$gcd(a+x,m)=gcd((a+x)\pmod{m},m)=g$</p><p>$x’=(a+x)\bmod m \in[0,m-1]$</p><p>$gcd(a+x,m)=gcd(x’,m)=g$</p><p>$x’=x’’g,m=m’g$</p><p>$gcd(x’’,m’)=1$</p><p>$0\le x’&lt;m\Rightarrow 0\le x’’&lt;m’$</p><p>即：$ans=\varphi(m’)$</p><p>$\sqrt{n}$求$\varphi(m’)$即可。</p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">phi</span><span class="token punctuation">(</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll s<span class="token operator">=</span>m<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span>ll i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">*</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>m<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            s<span class="token operator">-</span><span class="token operator">=</span>s<span class="token operator">/</span>i<span class="token punctuation">;</span>            <span class="token keyword">while</span><span class="token punctuation">(</span>m<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> m<span class="token operator">/</span><span class="token operator">=</span>i<span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>m<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">-</span><span class="token operator">=</span>s<span class="token operator">/</span>m<span class="token punctuation">;</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>t<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">while</span><span class="token punctuation">(</span>t<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>        ll g<span class="token operator">=</span><span class="token function">__gcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>m<span class="token operator">/</span><span class="token operator">=</span>g<span class="token punctuation">;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span><span class="token function">phi</span><span class="token punctuation">(</span>m<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span></code></pre><h2 id="C-Neko-does-Maths"><a href="#C-Neko-does-Maths" class="headerlink" title="C. Neko does Maths"></a>C. Neko does Maths</h2><p>$lcm(a+k,b+k)$ 最小，且$k$尽可能小。</p><p>令$g=gcd(a+k,b+k)$</p><p>令$ans=lcm(a+k,b+k)=\dfrac{(a+k)(b+k)}{g}$</p><p>$g=gcd(b-a,a+k)$</p><p>枚举$g|(b-a)$，只用在$(b-a)$的因子枚举，然后找到满足$g|(a+k)$的最小$k$，每次比较$lcm$，更新答案$k$。</p><p>复杂度：$O(\sqrt{b-a})$</p><pre class=" language-cpp"><code class="language-cpp">ll a<span class="token punctuation">,</span>b<span class="token punctuation">;</span>ll ans<span class="token operator">=</span><span class="token number">1e18</span><span class="token punctuation">,</span>k<span class="token punctuation">,</span>d<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">f</span><span class="token punctuation">(</span>ll x<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll y<span class="token operator">=</span><span class="token punctuation">(</span>a<span class="token operator">+</span>x<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">/</span>x<span class="token operator">*</span>x<span class="token punctuation">;</span>    ll lcm<span class="token operator">=</span>y<span class="token operator">/</span>x<span class="token operator">*</span><span class="token punctuation">(</span>y<span class="token operator">+</span>d<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>lcm<span class="token operator">&lt;=</span>ans<span class="token punctuation">)</span> ans<span class="token operator">=</span>lcm<span class="token punctuation">,</span>k<span class="token operator">=</span>y<span class="token operator">-</span>a<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token operator">></span>b<span class="token punctuation">)</span> <span class="token function">swap</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>  d<span class="token operator">=</span>b<span class="token operator">-</span>a<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span>ll i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">*</span>i<span class="token operator">&lt;=</span>d<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>d<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token function">f</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">f</span><span class="token punctuation">(</span>d<span class="token operator">/</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><hr><h2 id="1225D-Power-Products"><a href="#1225D-Power-Products" class="headerlink" title="1225D. Power Products"></a>1225D. Power Products</h2><p>$\large ab=x^k,k\ge 2$</p><p>$\large a=x^{p_1},b=x^{p_2},p_1+p_2=k,(p_1,p_2\ge 0)$</p><p>对其进行质因数分解，并对指数$\pmod{k}$，则只需寻找质因数指数之和为$k$的数即可，这样我们可以用一个数组储存当前出现过的数，每次需要的数个数就是答案。</p><p>$a=p_1^{k_1}p_2^{k_2}\dots  p_m^{k_m},b=p_1^{g_1}p_2^{g_2}\dots p_m^{g_m}$</p><p>则$k_i+g_i=k$</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> n<span class="token punctuation">,</span>k<span class="token punctuation">;</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>ll now<span class="token punctuation">,</span>need<span class="token punctuation">;</span>ll ans<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span><span class="token keyword">int</span> c<span class="token punctuation">)</span><span class="token punctuation">{</span>    c<span class="token operator">%</span><span class="token operator">=</span>k<span class="token punctuation">;</span>    <span class="token keyword">int</span> u<span class="token operator">=</span>c<span class="token punctuation">,</span>v<span class="token operator">=</span><span class="token punctuation">(</span>k<span class="token operator">-</span>c<span class="token punctuation">)</span><span class="token operator">%</span>k<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>now<span class="token operator">&amp;&amp;</span>u<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        now<span class="token operator">*</span><span class="token operator">=</span>x<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>now<span class="token operator">></span>N<span class="token punctuation">)</span> now<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>need<span class="token operator">&amp;&amp;</span>v<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        need<span class="token operator">*</span><span class="token operator">=</span>x<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>need<span class="token operator">></span>N<span class="token punctuation">)</span> need<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        now<span class="token operator">=</span>need<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> x<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> mx<span class="token operator">=</span><span class="token function">sqrt</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>mx<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">int</span> c<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>                <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> c<span class="token operator">++</span><span class="token punctuation">,</span>x<span class="token operator">/</span><span class="token operator">=</span>i<span class="token punctuation">;</span>                <span class="token function">f</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>c<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">f</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        ans<span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>need<span class="token punctuation">]</span><span class="token punctuation">;</span>        a<span class="token punctuation">[</span>now<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>时间复杂度：$O(n\sqrt{n})$</p><h2 id="A-Nezzar-and-Board"><a href="#A-Nezzar-and-Board" class="headerlink" title="A. Nezzar and Board"></a>A. Nezzar and Board</h2><p>裴蜀定理</p><p><a href="https://harris.blog.csdn.net/article/details/113389644">https://harris.blog.csdn.net/article/details/113389644</a></p><h2 id="B-Remainders-Game"><a href="#B-Remainders-Game" class="headerlink" title="B. Remainders Game"></a>B. Remainders Game</h2><p>$x_1\equiv x_2\bmod c_i$</p><p>则$x_1-x_2\equiv 0\bmod {c_i}$</p><p>则$lcm(c_1,c_2\dots,c_n) | (x_1-x_2)$</p><p>而$(x_1-x_2)\pmod {k}\ne 0$</p><p>所以$lcm(c_1,c_2\dots,c_n)\pmod{k}\ne 0$</p><p>同时也是充要条件，构造$x=lcm(c_2,c_2\dots,c_n),y=2lcm(c_1,c_2\dots,c_n)$</p><p>为了防止$lcm$爆$long \ long$，可以一边$lcm$一边和$k$取$gcd$。最后看答案是否为$k$即可。</p><p>或者线筛一波，找到每个数的最大质因数，预处理出$lcm$的质因数分解。然后判断减掉$k$的所有质因数后是否还有多余的质因数。</p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">gcd</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll b<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> <span class="token operator">!</span>b<span class="token operator">?</span>a<span class="token operator">:</span><span class="token function">gcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>a<span class="token operator">%</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span>ll <span class="token function">lcm</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll b<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> a<span class="token operator">/</span><span class="token function">gcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token operator">*</span>b<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> n<span class="token punctuation">,</span>k<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll s<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        ll x<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        s<span class="token operator">=</span><span class="token function">gcd</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span><span class="token function">lcm</span><span class="token punctuation">(</span>s<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">puts</span><span class="token punctuation">(</span>s<span class="token operator">==</span>k<span class="token operator">?</span><span class="token string">"Yes"</span><span class="token operator">:</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="894B-Ralph-And-His-Magic-Field"><a href="#894B-Ralph-And-His-Magic-Field" class="headerlink" title="894B. Ralph And His Magic Field"></a>894B. Ralph And His Magic Field</h2><p>当$n,m$奇偶性不同且$k=-1$无解，因为所有数的乘积按照行和列分别算是不同的。</p><p>否则，考虑填完前$n-1$行和前$m-1$列，一共有：$2^{(m-1)(n-1)}$种方案。</p><p>最后一行和最后一列是确定的。</p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">ksm</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll n<span class="token punctuation">,</span>ll m<span class="token operator">=</span>mod<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll s<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">=</span>s<span class="token operator">*</span>a<span class="token operator">%</span>m<span class="token punctuation">;</span>        a<span class="token operator">=</span>a<span class="token operator">*</span>a<span class="token operator">%</span>m<span class="token punctuation">;</span>        n<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>ll n<span class="token punctuation">,</span>m<span class="token punctuation">,</span>k<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld%lld%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">(</span>n<span class="token operator">+</span>m<span class="token punctuation">)</span><span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">&amp;&amp;</span>k<span class="token operator">==</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"0"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">else</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span><span class="token function">ksm</span><span class="token punctuation">(</span><span class="token function">ksm</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span>n<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>m<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="B1-Send-Boxes-to-Alice-Easy-Version"><a href="#B1-Send-Boxes-to-Alice-Easy-Version" class="headerlink" title="B1. Send Boxes to Alice (Easy Version)"></a>B1. Send Boxes to Alice (Easy Version)</h2><p>枚举$k$ ，必然是$cnt_1$的因数较小的部分，然后分段模拟，每取移到一段的终点是最优的，最后取最小值即可。</p><p><strong>code</strong></p><pre class=" language-cpp"><code class="language-cpp">vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>v<span class="token punctuation">;</span>ll ans<span class="token operator">=</span><span class="token number">2e18</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">int</span> mx<span class="token operator">=</span><span class="token function">SZ</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>mx<span class="token punctuation">;</span>i<span class="token operator">+</span><span class="token operator">=</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> p<span class="token operator">=</span>v<span class="token punctuation">[</span><span class="token punctuation">(</span>i<span class="token operator">+</span>i<span class="token operator">+</span>x<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token punctuation">;</span>j<span class="token operator">&lt;</span>i<span class="token operator">+</span>x<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>            s<span class="token operator">+</span><span class="token operator">=</span><span class="token function">abs</span><span class="token punctuation">(</span>p<span class="token operator">-</span>v<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    ans<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> x<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> v<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    sz<span class="token operator">=</span><span class="token function">SZ</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>sz<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"-1"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">*</span>i<span class="token operator">&lt;=</span>sz<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>sz<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">f</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">while</span><span class="token punctuation">(</span>sz<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> sz<span class="token operator">/</span><span class="token operator">=</span>i<span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>sz<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">f</span><span class="token punctuation">(</span>sz<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="C-Line"><a href="#C-Line" class="headerlink" title="C. Line"></a>C. Line</h2><p>$ax+by+c=0$，求$x,y$整数解。这不扩欧$sb$题吗。一开始居然没看出来</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">exgcd</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll b<span class="token punctuation">,</span>ll <span class="token operator">&amp;</span>x<span class="token punctuation">,</span>ll <span class="token operator">&amp;</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>b<span class="token punctuation">)</span> <span class="token punctuation">{</span>x<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>y<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">return</span><span class="token punctuation">;</span><span class="token punctuation">}</span>    <span class="token function">exgcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>a<span class="token operator">%</span>b<span class="token punctuation">,</span>y<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    y<span class="token operator">-</span><span class="token operator">=</span>a<span class="token operator">/</span>b<span class="token operator">*</span>x<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld%lld%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">,</span><span class="token operator">&amp;</span>c<span class="token punctuation">)</span><span class="token punctuation">;</span>    c<span class="token operator">=</span><span class="token operator">-</span>c<span class="token punctuation">;</span>    ll g<span class="token operator">=</span><span class="token function">__gcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>c<span class="token operator">%</span>g<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"-1"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    ll t<span class="token operator">=</span>c<span class="token operator">/</span>g<span class="token punctuation">;</span>    ll x<span class="token punctuation">,</span>y<span class="token punctuation">;</span>    <span class="token function">exgcd</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">,</span>x<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    x<span class="token operator">*</span><span class="token operator">=</span>t<span class="token punctuation">,</span>y<span class="token operator">*</span><span class="token operator">=</span>t<span class="token punctuation">;</span>    ll b1<span class="token operator">=</span>b<span class="token operator">/</span>g<span class="token operator">*</span>t<span class="token punctuation">,</span>a1<span class="token operator">=</span>a<span class="token operator">/</span>g<span class="token operator">*</span>t<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">&lt;</span><span class="token operator">-</span><span class="token number">5e18</span><span class="token operator">&amp;&amp;</span>b1<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment" spellcheck="true">//这一步还可以优化</span>        x<span class="token operator">+</span><span class="token operator">=</span>b1<span class="token punctuation">;</span>        y<span class="token operator">-</span><span class="token operator">=</span>a1<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">&lt;</span><span class="token operator">-</span><span class="token number">5e18</span><span class="token operator">||</span>y<span class="token operator">></span><span class="token number">5e18</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"-1"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld %lld\n"</span><span class="token punctuation">,</span>x<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="963A-Alternating-Sum"><a href="#963A-Alternating-Sum" class="headerlink" title="963A. Alternating Sum"></a>963A. Alternating Sum</h2><p>给了前$k$项，发现递推关系是$\large A_i=A_{i-k}(\dfrac{b}{a})^k$</p><p>  $\large A_i=s_ia^{n-i}b^i,A_{i-k}=s_{i-k}a^{n-i+k}b^{i-k}$</p><p>$\large A_i=A_{i-k}(\dfrac{b}{a})^k$</p><p>显然可预处理$[A_0,A_{k-1}]$和他们的和。</p><p>$s=\sum\limits_{0}^{k-1} A_i$</p><p>$\sum\limits_{i=k}^{2k-1}=s\times (\dfrac{b}{a})^k$</p><p>是一个等比数列，令$q=(\dfrac{b}{a})^k$。</p><p>$cnt=\dfrac{n+1}{k}$</p><p>$sum=\dfrac{s(1-q^{cnt})}{1-q}$</p><p>余项暴力求。$q=1$ 需特判，因为此时分母为$0$了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld%lld%lld%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll inv<span class="token operator">=</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>mod<span class="token number">-2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    ll q<span class="token operator">=</span><span class="token function">ksm</span><span class="token punctuation">(</span>b<span class="token operator">*</span>inv<span class="token operator">%</span>mod<span class="token punctuation">,</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%s"</span><span class="token punctuation">,</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>k<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>s<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">==</span><span class="token string">'+'</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            sum<span class="token operator">=</span><span class="token punctuation">(</span>sum<span class="token operator">+</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token operator">-</span>i<span class="token punctuation">)</span><span class="token operator">*</span><span class="token function">ksm</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token punctuation">{</span>            sum<span class="token operator">=</span><span class="token punctuation">(</span>sum<span class="token operator">-</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token operator">-</span>i<span class="token punctuation">)</span><span class="token operator">*</span><span class="token function">ksm</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    sum<span class="token operator">=</span>sum<span class="token operator">&lt;</span>mod<span class="token operator">?</span>sum<span class="token operator">+</span>mod<span class="token operator">:</span>sum<span class="token punctuation">;</span>    ll cnt<span class="token operator">=</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span>k<span class="token punctuation">;</span>    ll tot<span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>q<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        tot<span class="token operator">=</span>sum<span class="token operator">*</span>cnt<span class="token operator">%</span>mod<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">else</span> tot<span class="token operator">=</span>sum<span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span><span class="token function">ksm</span><span class="token punctuation">(</span>q<span class="token punctuation">,</span>cnt<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token operator">*</span><span class="token function">ksm</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">-</span>q<span class="token punctuation">,</span>mod<span class="token number">-2</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>    ll rest<span class="token operator">=</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">%</span>k<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token operator">-</span>rest<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> j<span class="token operator">=</span>i<span class="token operator">%</span>k<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>s<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">==</span><span class="token string">'+'</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            tot<span class="token operator">=</span><span class="token punctuation">(</span>tot<span class="token operator">+</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token operator">-</span>i<span class="token punctuation">)</span><span class="token operator">*</span><span class="token function">ksm</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> tot<span class="token operator">=</span><span class="token punctuation">(</span>tot<span class="token operator">-</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>n<span class="token operator">-</span>i<span class="token punctuation">)</span><span class="token operator">*</span><span class="token function">ksm</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>tot<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="359C-Prime-Number"><a href="#359C-Prime-Number" class="headerlink" title="359C. Prime Number"></a>359C. Prime Number</h2><p>$p$为质数，答案为$p^k$</p><p>对每个分子$v_i=sum-a_i$排序，从大到小，然后每次从后往前把相同的小的取出来，看个数是否$\pmod {x}=0$，如果不满足答案就是$p^{w}$。</p><p>否则合并一下，丢$\dfrac{cnt}{x}$个 $w+1$进去。</p><pre class=" language-cpp"><code class="language-cpp">    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        v<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>sum<span class="token operator">-</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">sort</span><span class="token punctuation">(</span>v<span class="token punctuation">.</span><span class="token function">rbegin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>v<span class="token punctuation">.</span><span class="token function">rend</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        ll w<span class="token operator">=</span>v<span class="token punctuation">.</span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        ll cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>v<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">&amp;&amp;</span>v<span class="token punctuation">.</span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">==</span>w<span class="token punctuation">)</span><span class="token punctuation">{</span>            cnt<span class="token operator">++</span><span class="token punctuation">;</span>v<span class="token punctuation">.</span><span class="token function">pop_back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>cnt<span class="token operator">%</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>            w<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>w<span class="token punctuation">,</span>sum<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span><span class="token function">ksm</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>w<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token punctuation">{</span>            cnt<span class="token operator">/</span><span class="token operator">=</span>x<span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>                v<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>w<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> math </tag>
            
            <tag> number theory </tag>
            
            <tag> coderforces </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Codeforces Global Round 14</title>
      <link href="2021/05/03/codeforces-global-round-14/"/>
      <url>2021/05/03/codeforces-global-round-14/</url>
      
        <content type="html"><![CDATA[<h1 id="Codeforces-Global-Round-14"><a href="#Codeforces-Global-Round-14" class="headerlink" title="Codeforces Global Round 14"></a>Codeforces Global Round 14</h1><h3 id="A-构造"><a href="#A-构造" class="headerlink" title="A 构造"></a>A 构造</h3><p>显然当$tot=x$时无解。</p><p>当$tot\ne x$时肯定有解，考虑当$prefix(i)=x$时，因为题目限制$a_i$各不相同，所以我们交换$a_i,a_{i+1}$，注意到因为$a_n\ne x$，所以$i&lt;n,i+1$存在。</p><h3 id="B-数学"><a href="#B-数学" class="headerlink" title="B 数学"></a>B 数学</h3><p>考虑面积的合法性：设用了$n$个三角形，边长为：$a+\sqrt{2}b$，因为只有这两种长度。</p><p>$n\times \dfrac{1}{2}=(a+\sqrt{2}b)^2=a^2+2b^2+\sqrt{2}ab$。</p><p>显然$\sqrt{2}ab=0$，且$n$为偶数才成立。</p><p>所以要么$a=0$，要么$b=0$。</p><p>当$b=0$，</p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/square.png" alt="边长为1的正方形"></p><p>由若干个$1\times 1$的正方形拼成，即答案为$2x$，$x$是平方数。</p><p>同理：当$a=0$时，答案是$4x$。</p><h3 id="C-贪心"><a href="#C-贪心" class="headerlink" title="C 贪心"></a>C 贪心</h3><p>依题意，必定有解，可用反证法证，然后贪心每次选当前最小的加。</p><h3 id="D-贪心"><a href="#D-贪心" class="headerlink" title="D 贪心"></a>D 贪心</h3><p>先把已经匹配的丢掉，然后不妨设剩下的$l\ge r$，因为等价，然后在维持$l\ge r$下，每次计算把相同颜色对数折半贡献。这样的正确性是如果不维持$l\ge r$，就会导致多算一段贡献，因为最后还是要把剩下的$l,r$相等。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> lc<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> rc<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> cin<span class="token operator">>></span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> l <span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> lc<span class="token punctuation">[</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> l<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">&lt;=</span> n <span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> rc<span class="token punctuation">[</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        ll ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span> <span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> mn<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>lc<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>rc<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            lc<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span><span class="token operator">=</span>mn<span class="token punctuation">,</span>rc<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span><span class="token operator">=</span>mn<span class="token punctuation">;</span>            l<span class="token operator">-</span><span class="token operator">=</span>mn<span class="token punctuation">,</span>r<span class="token operator">-</span><span class="token operator">=</span>mn<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>l<span class="token operator">&lt;</span>r<span class="token punctuation">)</span> <span class="token function">swap</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span>r<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">swap</span><span class="token punctuation">(</span>lc<span class="token punctuation">,</span>rc<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span> <span class="token punctuation">;</span>i <span class="token operator">&lt;=</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> cha <span class="token operator">=</span> l <span class="token operator">-</span> r<span class="token punctuation">;</span>            <span class="token keyword">int</span> ke <span class="token operator">=</span> lc<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">>></span> <span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">int</span> mn <span class="token operator">=</span> <span class="token function">min</span><span class="token punctuation">(</span>cha <span class="token punctuation">,</span> ke <span class="token operator">&lt;&lt;</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            ans <span class="token operator">+</span><span class="token operator">=</span> mn<span class="token operator">>></span><span class="token number">1</span><span class="token punctuation">,</span>l <span class="token operator">-</span><span class="token operator">=</span> mn<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        ans<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span>l<span class="token operator">-</span>r<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token operator">+</span><span class="token punctuation">(</span>l<span class="token operator">+</span>r<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">;</span>        cout<span class="token operator">&lt;&lt;</span>ans<span class="token operator">&lt;&lt;</span><span class="token string">'\n'</span><span class="token punctuation">;</span></code></pre><hr><p>好菜呀。qwq</p>]]></content>
      
      
      
        <tags>
            
            <tag> codeforces </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>奥卡姆剃刀原理</title>
      <link href="2021/04/28/ao-ka-mu-ti-dao/"/>
      <url>2021/04/28/ao-ka-mu-ti-dao/</url>
      
        <content type="html"><![CDATA[<h1 id="奥卡姆剃刀原理"><a href="#奥卡姆剃刀原理" class="headerlink" title="奥卡姆剃刀原理"></a>奥卡姆剃刀原理</h1><p>​            这个<a href="https://baike.baidu.com/item/%E5%8E%9F%E7%90%86/85014">原理</a>称为“<strong>如无必要，勿增实体</strong>”，即“<strong>简单有效原理</strong>”。正如他在《箴言书注》2卷15题说“切勿浪费较多东西去做，用较少的东西，同样可以做好的事情。”</p><ul><li><p>在生活中，尽量用较少的假设和条件解决问题。</p></li><li><p>在编程中，尽量用更简洁，直接的代码逻辑解决问题。</p></li><li><p>但是注意能随便剔除条件，也不能剔除必要条件。</p></li></ul><hr><p>学习博客：</p><p><a href="https://blog.csdn.net/bjweimengshu/article/details/116141374?utm_source=app&amp;app_version=4.5.8">https://blog.csdn.net/bjweimengshu/article/details/116141374?utm_source=app&amp;app_version=4.5.8</a></p>]]></content>
      
      
      
        <tags>
            
            <tag> 知识分享 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>摘抄1</title>
      <link href="2021/04/25/2021-04-25-zhaichao/"/>
      <url>2021/04/25/2021-04-25-zhaichao/</url>
      
        <content type="html"><![CDATA[<h1 id="摘抄1"><a href="#摘抄1" class="headerlink" title="摘抄1"></a>摘抄1</h1><p>​          古希腊则学家爱比克泰德曾经说过的一句著名的话：”我们登上并非我们所选择的舞台，演出并非我们所选择的剧本”。在座的有哪个同学是自愿来到这个世界上的，其实没有。“我们登上并非我们所选择的舞台”，在座的有谁的剧本是你自己设定的，其实不是的。仔细想一想，我们这一生中其实自己能决定的东西很少，我们可能只能决定5%的东西，但有95%的东西是我们决定不了的，我们决定不了我们的出身，我们决定不了我们的智商，我们更决定不了我们这一生的贵人相助。很多时候我们经常会羡慕别人的剧本，我自己有时候也非常羡慕别人的剧本，但是（其实）没有谁的剧本值得羡慕，你只能把你自己的剧本演好。如果在你的一生中真的遭遇到这些挫折，那对不起，这就是你的剧本。有两种选择，一种选择是弃演，一种选择是把既定的剧本给演好。所以希望大家能够演好自己的剧本。</p>]]></content>
      
      
      
        <tags>
            
            <tag> 摘抄 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>关于blog的图片的保存</title>
      <link href="2021/04/19/blog-save-image/"/>
      <url>2021/04/19/blog-save-image/</url>
      
        <content type="html"><![CDATA[<h1 id="关于blog的图片的保存"><a href="#关于blog的图片的保存" class="headerlink" title="关于blog的图片的保存"></a>关于blog的图片的保存</h1><p>经过测试，保存hexo-asset-image 配合 上传到服务器上的图片的加载速度，没有github+cdn加速块。</p><p>所以最终我还是决定用github+cdn加速，然后服务器和github双线部署。</p><p>利用github+cdn加速的方法。</p><p>首先：在对应主题下的_config 文件下开启cdn加速</p><pre class=" language-yml"><code class="language-yml">jsDelivr:  url: 对应的仓库http: url  #　我的　https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io</code></pre><p>然后在本地的hexo目录建一个专门用来储存的文件夹</p><p>我的是:</p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/image-path.png" alt="image-20210419141432753"></p><p>然后每次要上传图片时,就先本地保存到这个目录下,然后引用时候的url 前缀就是cdn加速后的地址:</p><p>我的是:</p><pre class=" language-text"><code class="language-text">https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/文件名</code></pre><p>然后deploy以后,就可以看到自己的图片了.</p><p>关于利用插件+服务器上传图片的我有一篇文章有介绍.</p><p><a href="https://he-hao.top/2021/04/15/upload-picture-to-server/">https://he-hao.top/2021/04/15/upload-picture-to-server/</a></p>]]></content>
      
      
      
        <tags>
            
            <tag> hexo </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>关于hexo上传图片到云服务器(无需图床)</title>
      <link href="2021/04/15/upload-picture-to-server/"/>
      <url>2021/04/15/upload-picture-to-server/</url>
      
        <content type="html"><![CDATA[<h1 id="关于hexo上传图片到云服务器-无需图床"><a href="#关于hexo上传图片到云服务器-无需图床" class="headerlink" title="关于hexo上传图片到云服务器(无需图床)"></a>关于hexo上传图片到云服务器(无需图床)</h1><p>我终于解决了使用hexo-asset-image 上传图片的问题</p><p>1.安装hexo-asset-image </p><pre class=" language-shell"><code class="language-shell">npm install hexo-asset-image --save</code></pre><p>2.将hexo本地根目录下的_config.yml 修改</p><pre class=" language-yml"><code class="language-yml">post_asset_folder: true</code></pre><p>3.修改该插件目录下的index.js文件</p><pre class=" language-js"><code class="language-js"><span class="token string">'use strict'</span><span class="token punctuation">;</span><span class="token keyword">var</span> cheerio <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'cheerio'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">// http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string</span><span class="token keyword">function</span> <span class="token function">getPosition</span><span class="token punctuation">(</span>str<span class="token punctuation">,</span> m<span class="token punctuation">,</span> i<span class="token punctuation">)</span> <span class="token punctuation">{</span>  <span class="token keyword">return</span> str<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span>m<span class="token punctuation">,</span> i<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>m<span class="token punctuation">)</span><span class="token punctuation">.</span>length<span class="token punctuation">;</span><span class="token punctuation">}</span>hexo<span class="token punctuation">.</span>extend<span class="token punctuation">.</span>filter<span class="token punctuation">.</span><span class="token function">register</span><span class="token punctuation">(</span><span class="token string">'after_post_render'</span><span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">{</span>  <span class="token keyword">var</span> config <span class="token operator">=</span> hexo<span class="token punctuation">.</span>config<span class="token punctuation">;</span>  <span class="token keyword">if</span><span class="token punctuation">(</span>config<span class="token punctuation">.</span>post_asset_folder<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">var</span> link <span class="token operator">=</span> data<span class="token punctuation">.</span>permalink<span class="token punctuation">;</span>    <span class="token keyword">var</span> beginPos <span class="token operator">=</span> <span class="token function">getPosition</span><span class="token punctuation">(</span>link<span class="token punctuation">,</span> <span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">var</span> appendLink <span class="token operator">=</span> <span class="token string">''</span><span class="token punctuation">;</span>    <span class="token comment" spellcheck="true">// In hexo 3.1.1, the permalink of "about" page is like ".../about/index.html".</span>    <span class="token comment" spellcheck="true">// if not with index.html endpos = link.lastIndexOf('.') + 1 support hexo-abbrlink</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token regex">/.*\/index\.html$/</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span>link<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>      <span class="token comment" spellcheck="true">// when permalink is end with index.html, for example 2019/02/20/xxtitle/index.html</span>      <span class="token comment" spellcheck="true">// image in xxtitle/ will go to xxtitle/index/</span>      appendLink <span class="token operator">=</span> <span class="token string">'index/'</span><span class="token punctuation">;</span>      <span class="token keyword">var</span> endPos <span class="token operator">=</span> link<span class="token punctuation">.</span><span class="token function">lastIndexOf</span><span class="token punctuation">(</span><span class="token string">'.'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">else</span> <span class="token punctuation">{</span>      <span class="token keyword">var</span> endPos <span class="token operator">=</span> link<span class="token punctuation">.</span><span class="token function">lastIndexOf</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    link <span class="token operator">=</span> link<span class="token punctuation">.</span><span class="token function">substring</span><span class="token punctuation">(</span>beginPos<span class="token punctuation">,</span> endPos<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">'/'</span> <span class="token operator">+</span> appendLink<span class="token punctuation">;</span>    <span class="token keyword">var</span> toprocess <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'excerpt'</span><span class="token punctuation">,</span> <span class="token string">'more'</span><span class="token punctuation">,</span> <span class="token string">'content'</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> toprocess<span class="token punctuation">.</span>length<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>      <span class="token keyword">var</span> key <span class="token operator">=</span> toprocess<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>      <span class="token keyword">var</span> $ <span class="token operator">=</span> cheerio<span class="token punctuation">.</span><span class="token function">load</span><span class="token punctuation">(</span>data<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>        ignoreWhitespace<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>        xmlMode<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>        lowerCaseTags<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>        decodeEntities<span class="token punctuation">:</span> <span class="token boolean">false</span>      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'img'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">each</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">attr</span><span class="token punctuation">(</span><span class="token string">'src'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>          <span class="token comment" spellcheck="true">// For windows style path, we replace '\' to '/'.</span>          <span class="token keyword">var</span> src <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">attr</span><span class="token punctuation">(</span><span class="token string">'src'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">'\\'</span><span class="token punctuation">,</span> <span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>          <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token punctuation">(</span><span class="token regex">/http[s]*.*|\/\/.*/</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span>            <span class="token operator">||</span> <span class="token regex">/^\s+\//</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span>            <span class="token operator">||</span> <span class="token regex">/^\s*\/uploads|images\//</span><span class="token punctuation">.</span><span class="token function">test</span><span class="token punctuation">(</span>src<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>            <span class="token comment" spellcheck="true">// For "about" page, the first part of "src" can't be removed.</span>            <span class="token comment" spellcheck="true">// In addition, to support multi-level local directory.</span>            <span class="token keyword">var</span> linkArray <span class="token operator">=</span> link<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>elem<span class="token punctuation">)</span><span class="token punctuation">{</span>              <span class="token keyword">return</span> elem <span class="token operator">!=</span> <span class="token string">''</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">var</span> srcArray <span class="token operator">=</span> src<span class="token punctuation">.</span><span class="token function">split</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>elem<span class="token punctuation">)</span><span class="token punctuation">{</span>              <span class="token keyword">return</span> elem <span class="token operator">!=</span> <span class="token string">''</span> <span class="token operator">&amp;&amp;</span> elem <span class="token operator">!=</span> <span class="token string">'.'</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>srcArray<span class="token punctuation">.</span>length <span class="token operator">></span> <span class="token number">1</span><span class="token punctuation">)</span>            srcArray<span class="token punctuation">.</span><span class="token function">shift</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            src <span class="token operator">=</span> srcArray<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">attr</span><span class="token punctuation">(</span><span class="token string">'src'</span><span class="token punctuation">,</span> config<span class="token punctuation">.</span>root <span class="token operator">+</span> link <span class="token operator">+</span> src<span class="token punctuation">)</span><span class="token punctuation">;</span>            console<span class="token punctuation">.</span>info<span class="token operator">&amp;&amp;</span>console<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"update link as:-->"</span><span class="token operator">+</span>config<span class="token punctuation">.</span>root <span class="token operator">+</span> link <span class="token operator">+</span> src<span class="token punctuation">)</span><span class="token punctuation">;</span>          <span class="token punctuation">}</span>        <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>          console<span class="token punctuation">.</span>info<span class="token operator">&amp;&amp;</span>console<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"no src attr, skipped..."</span><span class="token punctuation">)</span><span class="token punctuation">;</span>          console<span class="token punctuation">.</span>info<span class="token operator">&amp;&amp;</span>console<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>      data<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">=</span> $<span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>  <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>4.以后每次可以hexo n “文章名”  ，会在_posts下自动生成一个同名文件夹用来放图片。</p><p>5.图片的markdown 格式为:</p><p><img src="/2021/04/15/upload-picture-to-server/test.png" alt="服务器和插件配合的图片"></p><p>6.测试</p><p>上传到服务器F12看url</p><p>7.本文的图片就是通过该方式上传的。</p><p>更新一下，我的github+cdn加速好了，貌似这更快一点。</p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/test.png" alt="cdn加速的图片"></p>]]></content>
      
      
      
        <tags>
            
            <tag> hexo </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Strange Sentences</title>
      <link href="2021/04/04/sentences/"/>
      <url>2021/04/04/sentences/</url>
      
        <content type="html"><![CDATA[<div id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."><div class="hbe-input-container"><input type="password" id="hbePass" placeholder="您好, 这里需要密码." /><label>您好, 这里需要密码.</label><div class="bottom-line"></div></div><script id="hbeData" type="hbeData" data-hmacdigest="96c52f2a6aaf05f62e02361e00188295cad7fa28f33c1528bd1c9ba903d5931f">9ae1bfd0aa355163a717ec23fe971116a99c9b664dc44282d1aec5cfb5d85ed937dbb32534b315e0840ecb3a7ad3d89dfb3206e3459102ce717ada54501ca519c800a8374c1a87f23b1bb0047da7c078cde663458430a1684455d66445a301e259ddd8602eaa410464aada1c7e5e6aefe4c958d6679b02067b68876abc5b0a99aa8af8938b1bc7720b148cec4e109ca76d8d4a030bbffa196023df78dfce4dadd6306dc18b3af037ec87a18da7c03ea29431197283ec1a7690cf5a7f92873db1c0168629673687848f826ec099300cfb8e0378b576ad608722a68e1ac5582b8675c4a84bb0825efe8413c12302617428d29a066f302bb9071fe7aa23daa90919ec1820d6e9f5ac04eee266dca24f9f2033420f1d63a2d8a051f6ca62c12a1b412394f4e5266bc619a3ad2228b163bbc72bb3e0bdd46c4657a9ee44794ce1a33cad32c0d5085917d6b6dd18302af92e6c4dbada3aeeaf200fb0429e4291e2bee6271ca2287cd8bbd3b4fe362a95ead0ec0dec79a086890e07f33aac73120c47dce69c005abb2ee66e103a8164644499ab03d424883351304933764d47c00e4303735b1fcbc13082ded5ddda9b115d1ca98c3b8d2abd889679e8feb42d49ff4d42408480ee9466d994cb12f79b8d83018722bda3662460da2896c660cdc8b4728c9e1d62af355d8d5c1698eedb4346ac6f172270496f4378016214323445d5f83a8cf07877b331ed818e1fd4e1422db2208af73384a70435f3329deac33358fe54b9c1be99e0b73dbe5d40bfedc43370b65b5405c0320e4e351568bf0cf6a687643f8d1a4ec66c199588eb6a0b906d4e8c1c34426686c6214ac40d5036ce148cb5</script></div><script src="/lib/blog-encrypt.js"></script><link href="/css/blog-encrypt.css" rel="stylesheet" type="text/css">]]></content>
      
      
      
        <tags>
            
            <tag> emotion </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>遇到的问题</title>
      <link href="2021/04/04/some-questions/"/>
      <url>2021/04/04/some-questions/</url>
      
        <content type="html"><![CDATA[<h1 id="遇到的问题"><a href="#遇到的问题" class="headerlink" title="遇到的问题"></a>遇到的问题</h1><p>结构体LIS的问题</p><p><strong>已解决</strong></p><p>对于$n^2$可以解决的$LIS$问题，可以记录答案数组。</p><p>结构体LIS问题，利用二维偏序即可。</p><p>记忆化搜索实现起来更加方便，复杂度可能偏大，(递归)。</p><p>$O(nlogn+n)$实现LIS加上输出对应答案数组，注意LIS的d[]数组储存的是对应LIS长度的最小末尾元素，要输出答案数组还需要记录每个元素对应的LIS长度。</p><p><a href="https://harris.blog.csdn.net/article/details/106444512">https://harris.blog.csdn.net/article/details/106444512</a></p><hr><p>$dp$的常见范围  $n^2  (5\times 10^3,10^3)$</p><p><a href="https://codeforces.ml/problemset/page/21?tags=dp,1500-2000">https://codeforces.ml/problemset/page/21?tags=dp,1500-2000</a> </p><hr><p><strong>子串问题</strong></p><p>$n(10^6)$</p><p>$O(n)$的递推问题，可能需要用到辅助数组，栈来递推。</p><p>如括号匹配的dp问题。</p><p>子串的dp问题，往往是类似区间合并，利用辅助数组来合并状态。</p><p>C. Looking for Order</p><p>状压的好题，跟顺序没有关系，所以可以直接剪枝跑。</p><hr><p>给定一棵二叉搜索树的形态和序列，对应的填数是唯一确定的。</p><p>D. How many trees? 本题由上述知识可知，题意转化为求$n$个结点组成高度$\ge h$的二叉树形态个数。</p><p>树形dp问题：求不相交两个路径最大乘积。</p><p>枚举割边，分成两个连通块，然后dfs求两个连通块的直径乘积。</p><p>维护一个最大和次大子结点路径。</p><p>sum表示该子树的直径：分情况讨论，经过该结点，不过经过该节点。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> dp<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>mx1<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>mx2<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">==</span>fa<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        sum<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>sum<span class="token punctuation">,</span><span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//不经过该结点.</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>dp<span class="token operator">+</span><span class="token number">1</span><span class="token operator">></span>mx1<span class="token punctuation">)</span> mx2<span class="token operator">=</span>mx1<span class="token punctuation">,</span>mx1<span class="token operator">=</span>dp<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>dp<span class="token operator">+</span><span class="token number">1</span><span class="token operator">></span>mx2<span class="token punctuation">)</span> mx2<span class="token operator">=</span>dp<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span>    sum<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>sum<span class="token punctuation">,</span>mx1<span class="token operator">+</span>mx2<span class="token punctuation">)</span><span class="token punctuation">,</span>dp<span class="token operator">=</span>mx1<span class="token punctuation">;</span>    <span class="token keyword">return</span> sum<span class="token punctuation">;</span><span class="token punctuation">}</span> </code></pre><hr><p><a href="https://codeforces.ml/problemset/problem/14/E">https://codeforces.ml/problemset/problem/14/E</a></p><p>多维dp问题。</p><p>波峰，波谷，需要维护最后两个变量来递推。</p><hr><p><a href="https://codeforces.ml/contest/16/problem/E">https://codeforces.ml/contest/16/problem/E</a></p><p>状压dp解决概率问题的好题。</p><p>貌似还有一个递推求二进制1的方法。</p><p><a href="https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode/">https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode/</a></p><p>复习一波：</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> x<span class="token operator">&amp;</span><span class="token operator">=</span>x<span class="token number">-1</span><span class="token punctuation">,</span>cnt<span class="token operator">++</span><span class="token punctuation">;</span><span class="token keyword">return</span> cnt<span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>    <span class="token comment" spellcheck="true">//O(n)</span>    bit<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>b<span class="token punctuation">[</span>i<span class="token operator">>></span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token punctuation">(</span>i<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>    <span class="token comment" spellcheck="true">//O(n)解决.</span>    bit<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>bit<span class="token punctuation">[</span>i<span class="token operator">&amp;</span><span class="token punctuation">(</span>i<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span></code></pre><hr><p>贪心+高精度</p><p><a href="https://codeforces.ml/contest/18/problem/D">https://codeforces.ml/contest/18/problem/D</a></p><p>遇到贡献为2^x 的最值问题，考虑贪心。因为$2^x&gt;2^{x-1}+2^{x-2}\dots 2^2+2^1+2^0$.</p><p>此题给贡献从大到小排序，然后贪心地选择，每选择一就将该区间标记。</p><p>然后高精度加法预处理 $2^x=2^{x-1}+2^{x-1}$。</p><hr><p><a href="https://codeforces.ml/contest/18/problem/E">https://codeforces.ml/contest/18/problem/E</a></p><p>dp的好题，按行dp，因为每行必须两种颜色，$dp[i][x][y]$</p><hr><p>尺取，队列维护区间的答案。</p><p><a href="https://ac.nowcoder.com/acm/contest/9983/B">https://ac.nowcoder.com/acm/contest/9983/B</a></p><hr><p>//V&gt;=n下的最小价值,一个限制条件+物品选不选的问题(01背包) </p><hr><p>把一个序列切一刀分成两个和相等的子数组，枚举切的位置即可。</p><p>把一个序列切两刀分成三个和相等的子数组的方案数：因为子数组的和是可以确定的：$\dfrac{sum}{3}$，然后求可以预处理出前后缀和，后缀和等于$\dfrac{sum}{3}$的个数，枚举对于每个前缀和$=\dfrac{sum}{3}$的位置$i$，有多少个$suf[j]=\dfrac{sum}{3},j\ge i+2$。</p><hr><p>==Hint：把一个序列分成两个不相交且非空的和相等子数组的方案数？==</p><p>一个暴力的想法，枚举所有区间，然后找另外相等区间与其相等的个数。</p><p>复杂度大约在：$O(n^4)$。。。。</p><hr><p>求最大零矩阵周长。</p><p>暴力$O(nm)^3$，考虑类似二维前缀和$dp$优化。</p><p>确定起始点$(i,j)$，终点$(x,y)$成立的条件是$a[x][y]=0$且$dp[x-1][y]$成立且$dp[x][y-1]$成立。</p><p>时间复杂度：$O(nm)^2$。</p><hr><p><a href="https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/">https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/</a></p><p>滑动窗口经典题，维护定长区间的和，找到最值。</p><hr><p><a href="https://www.luogu.com.cn/problem/U148619?contestId=40088">https://www.luogu.com.cn/problem/U148619?contestId=40088</a></p><p>断环成链，ST表预处理出区间最值，然后二分找到len.  [x-len,x+len]，注意因为i!=j,所以是找[i-len,i-1],[i+1,i+len]的区间最值。</p><p>ST表习题待练习。</p><hr><p>分块(暴力大法好！)待学。</p><p><a href="https://www.luogu.com.cn/blog/cyffff/ti-xie-t2-diao-da-post">https://www.luogu.com.cn/blog/cyffff/ti-xie-t2-diao-da-post</a></p><hr><p><a href="https://atcoder.jp/contests/abc191/tasks/abc191_c">https://atcoder.jp/contests/abc191/tasks/abc191_c</a></p><p>这是什么神仙思维题？？</p><hr><p>并查集重新建图跑dfs，注意标记边剪枝叶。</p><p>计算sz的时候可以不用再合并的时候算，而是类似桶把s[i]扫一遍。</p><hr><p>spfa 可求最长路判正环，求最短路判负环。</p><hr><p>背包问题，不能按$\dfrac{value}{weight}$的比值排序贪心做。</p><p>只有两种$weight$的背包问题，只需要分组，然后按$value$从大到小排序，然后第一组的个数，确定第二组的个数，取最值即可。</p><hr><p>最小有向边生成树，很简单，除了根之外其他每个结点有且仅有一个父亲，所以存一下每个结点的最小边权父亲，然后除了根之外求和。</p><hr><p>神奇构造题，用$1\times 2,2\times 1,2\times 2$填矩阵$n\times m$。</p><p>1.矩阵面积得为奇数。</p><p>2.$n,m$若存在奇数：</p><p>$n$为奇数，至少要$a-=\dfrac{m}{2}$</p><p>$m$为奇数，至少$b-=\dfrac{n}{2}$。</p><p>然后先假设都用$c$涂，一个小$tips$，$4$个$4$个的涂，且相连小正方形不同色，这样便于后面$a,b$来覆盖。</p><hr><p>类似归并排序的模拟 比赛排名题，不是很熟。</p><p>每轮相邻的人比赛，最开始$(1,2)(3,4)(5,6)\dots$，胜者相邻后的继续比。</p><p>则第$k$轮可能比赛的人是$[(x-1)2^k+1,x2^k]$。</p><p>都减$1$,$[(x-1)2^k,x2^k-1]$</p><p>如何确定两个人是否能在第$k$轮遇到$:\dfrac{a-1}{2^k},\dfrac{b-1}{2^k}$。</p><hr><p>构造题杀我。</p><p>傻逼树上博弈杀我。</p><p>思维杀我。</p><p>傻逼数学。</p><p>暴力dp是啥玩意，数据结构玩不动。</p><hr><p><a href="https://baike.baidu.com/item/%E7%93%B6%E9%A2%88%E7%94%9F%E6%88%90%E6%A0%91/2397900">https://baike.baidu.com/item/%E7%93%B6%E9%A2%88%E7%94%9F%E6%88%90%E6%A0%91/2397900</a></p><p>最小生成树一定是瓶颈生成树。</p><p>BZOJ2429</p><p>最小支撑树？</p><hr><p><img src="https://i.loli.net/2021/04/04/pg8rlFsAvcOJjXT.png" alt="image-20210216214054423"></p><p><a href="https://blog.csdn.net/twtsa/article/details/8120269">https://blog.csdn.net/twtsa/article/details/8120269</a></p><p>极大化子矩形 论文。</p><p>悬线法  $O(nm)$</p><p>求最大不含障碍的子矩形。</p><p>枚举每个点向上扩展的最大高度(矩形的宽)$up[i][j]$，这个递推即可。</p><p>然后该悬线能向两边扩展的最大长度(矩形的长)。</p><p>递推$l[i][j]=l[i][j-1],r[i][j]=r[i][j+1]$。</p><p>$ans=max(ans,up[i][j]\times (r[i][j]-l[i][j]+1))$。</p><p><a href="https://www.cnblogs.com/zhenglw/p/10102833.html">https://www.cnblogs.com/zhenglw/p/10102833.html</a></p><p>单调栈也可解决，还是需要预处理$up[i][j]$，</p><p>一行一行的维护，维护一个单调递增栈，当前待处理的矩形高如果$\le$栈顶就更新答案，然后弹出。</p><hr><p>基环树，省选-黑题难度，待学。</p><p><a href="https://www.luogu.com.cn/blog/ShadderLeave/ji-huan-shu-bi-ji">https://www.luogu.com.cn/blog/ShadderLeave/ji-huan-shu-bi-ji</a></p><hr><p><a href="https://www.luogu.com.cn/blog/xww666/post-tuan-dui-t167649-qu-ti-xie">https://www.luogu.com.cn/blog/xww666/post-tuan-dui-t167649-qu-ti-xie</a></p><p>期望dp，树上高斯消元。</p><hr><p>树形dp，好难写。</p><hr><p>费用流问题</p><p><img src="https://i.loli.net/2021/04/04/Wz6ArIywmRiMFBU.png" alt="image-20210217171818968"></p><p>取反边的费用还有讲究吗？</p><hr><p>神仙路径统计问题</p><p><a href="https://www.luogu.com.cn/blog/wolfind/yi-suo-ge-lu-jing-ji-shuo-wen-ti">https://www.luogu.com.cn/blog/wolfind/yi-suo-ge-lu-jing-ji-shuo-wen-ti</a></p><hr><p><a href="https://leetcode-cn.com/problems/longest-repeating-character-replacement/">https://leetcode-cn.com/problems/longest-repeating-character-replacement/</a></p><p>滑窗</p><hr><p>Hash需要练习</p><hr><p>求两点斜率的更好写法。！</p><p>会不会有精度误差。</p><hr><p>类似线段树的区间修改 lzay tag一样。</p><p>树也可以实现  lazy 标记子树操作加。</p><hr><p><img src="https://i.loli.net/2021/04/04/zdanbcpMfEUytjO.png" alt="image-20210221122126105"></p><p>要初始化才能用。—-</p><hr><p>leetcode 的isalpha 大小写都只会返回1024  醉了。</p><hr><p>multiset 能logn 维护区间的最大，最小值。</p><p>两个单调队列能O(1) 维护最大，最小值。</p><hr><p>单调队列能解决的问题：</p><p>区间最值。</p><p>dp优化：转移时：$dp[i]=max(dp[j])+a[i] ,j\in[l,r]$</p><hr><p>区间平均值最大的区间长度 。</p><p>假了：肯定是最大那一个数，长度为1是最优的。</p><p>定区间 最大值最小。</p><p>​            最小值最大。</p><hr><p>常数优化：连续访问内存</p><p>$a[20][N]$优于$a[N][20]$。</p><hr><p>网络流解决区间差分问题。</p><hr><p>关于max,min 的宏定义问题</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">define</span> Max(a,b) a>b?a:b</span><span class="token macro property">#<span class="token directive keyword">define</span> Min(a,b) a&lt;b?a:bd</span></code></pre><p>一般变量，宏定义较快，若参数为函数，因为宏定义在比较时会计算一次，返回计算值时也会计算一次，所以函数会执行两次，若为递归函数，则时间非常可怕。</p><p>所以一般还是用自带的比较函数。</p><hr><p>lucas定理。</p><p>分形递归题。</p><hr><p>二维矩形并，交，周长，面积，重合问题。</p><hr><p>扩欧复杂度 ？ log(a+b)</p><hr><p>EK  EK EK  EK  写板子</p><p>Dinic Dinic Dinic Dinic </p><hr><p>用了IOS 之后不能用puts 了，不然会出错。</p><p>用若干变量初始化  vector</p><pre class=" language-cpp"><code class="language-cpp">vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>v<span class="token operator">=</span><span class="token punctuation">{</span>a<span class="token punctuation">,</span>b<span class="token punctuation">,</span>c<span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><p>表达式排序</p><pre class=" language-cpp"><code class="language-cpp"><span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>a<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">auto</span> <span class="token operator">&amp;</span>b<span class="token punctuation">,</span><span class="token keyword">const</span> <span class="token keyword">auto</span> <span class="token operator">&amp;</span>c<span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">return</span> b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">==</span>c<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">?</span>b<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">></span>c<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">:</span>b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">&lt;</span>c<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>CDQ CDQ CDQ CDQ 分治</p><hr><p>有向图求入度为0的点的个数，可以用floyd或者tarjan</p><p>并查集可用于无向图判环(因为并查集能维护双向关系)，但是不能判自环，因为初始赋值就是。</p><p>种类并查集 可以维护 敌对关系，朋友关系，单向关系。</p><hr><p>两个栈实现 队列，一个栈为输入栈，另一个栈为输出栈，当输出栈不为空时 pop,peek操作直接取输出栈的栈顶，否则把输入栈的元素都丢入输出栈。</p><p>质因数分解求所有质因数复杂度最坏是$\sqrt{n}$的，如$n$为质数。</p><p>用埃氏筛可以$O(nloglogn)$预处理出每个数的所有质因数。</p><hr><p>循环数组 仍然可以用单调栈求向左/右 第一个比它大/小的元素 ，只需要断环成链即可。</p><hr><p>==期望dp==</p><p>一般是倒着。</p><p>==区间 MEX==</p><p>Treap(待复习)</p><p><a href="https://www.luogu.com.cn/record/list?user=257206&amp;language=&amp;orderBy=0&amp;page=6">https://www.luogu.com.cn/record/list?user=257206&amp;language=&amp;orderBy=0&amp;page=6</a></p><hr><p>除0错误 也会导致RE</p><hr><p>组合数+周期+取模 等问题！</p><hr><p>生成函数—–</p><p>$n$个结点的二叉树个数$C_n$卡特兰数，$n$个结点所有不同二叉树的叶子总数$nC_{n-1}$</p>]]></content>
      
      
      <categories>
          
          <category> 杂烩 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 杂烩 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>ARC 115</title>
      <link href="2021/03/25/arc-115/"/>
      <url>2021/03/25/arc-115/</url>
      
        <content type="html"><![CDATA[<h1 id="ARC-115"><a href="#ARC-115" class="headerlink" title="ARC 115"></a>ARC 115</h1><p><strong>A</strong></p><p>考虑两个人，显然选择相同不会影响，只考虑选择不同的题目个数$cnt$，注意到cnt为奇数才不可能分数相同，考虑他们选择$1$的奇偶性，相同不会影响奇偶性，不同必然会使一个人选择$1$的奇偶性发生变化，当$cnt$为奇数时，最后两个人选择1的奇偶性必然是不同的，所以把所有人按照选择$1$的奇偶性分成两个集合，然后相乘即为答案。</p><p>时间复杂度：$O(nm)$</p><h5 id="hint"><a href="#hint" class="headerlink" title="hint"></a><strong>hint</strong></h5><p>考虑对称问题：满足学生答案可能相同的对数。</p><p>$cnt$为偶数才成立，而且他们选择$1$的奇偶性最后是相同的，所以答案是：</p><p>$C_{cnt_0}^2+C_{cnt_1}^2$</p><p><strong>code</strong></p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%s"</span><span class="token punctuation">,</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> x<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>            x<span class="token operator">+</span><span class="token operator">=</span>s<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">==</span><span class="token string">'1'</span><span class="token punctuation">;</span>        a<span class="token punctuation">[</span>x<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span><span class="token number">1LL</span><span class="token operator">*</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">*</span>a<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><hr><p><strong>B</strong></p><p>考虑若$a,b$答案存在，则$a$同时减小一个数$m$，$b$同时增大一个数$m$是不影响答案的，所以$a$的最小值可以为$0$，此时我们可以令$b_1$为第一列最小的数，这样就能构造出$a$的最小值为$0$，然后暴力特判即可。</p><p>时间复杂度：$O(n^2)$</p><p><strong>code</strong></p><pre class=" language-cpp"><code class="language-cpp">b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span>c<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">-</span>b<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>c<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">+</span>b<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">!=</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Yes"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><hr><p><strong>C</strong></p><p>质因数分解，按照质因数的个数来赋值,因为倍数关系的质因数肯定不同，然后设$a_1=1$即可满足最小。</p><p><strong>code</strong></p><pre class=" language-cpp"><code class="language-cpp">bitset<span class="token operator">&lt;</span>N<span class="token operator">></span>vis<span class="token punctuation">;</span><span class="token keyword">int</span> p<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>cnt<span class="token punctuation">,</span>a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">ss</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span><span class="token punctuation">{</span>    vis<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span>vis<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    a<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> p<span class="token punctuation">[</span><span class="token operator">++</span>cnt<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">,</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>cnt<span class="token operator">&amp;&amp;</span>i<span class="token operator">*</span>p<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            vis<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>            a<span class="token punctuation">[</span>i<span class="token operator">*</span>p<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">%</span>p<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> ARC </category>
          
      </categories>
      
      
        <tags>
            
            <tag> ARC </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>认识实习资料</title>
      <link href="2021/03/17/ren-shi-shi-xi/"/>
      <url>2021/03/17/ren-shi-shi-xi/</url>
      
        <content type="html"><![CDATA[<h1 id="认识实习资料"><a href="#认识实习资料" class="headerlink" title="认识实习资料"></a>认识实习资料</h1><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/rssx.png" alt="图1"></p><p><a href="https://github.com/Harris-H/Examination">https://github.com/Harris-H/Examination</a></p><p>已上传至GitHub。</p>]]></content>
      
      
      <categories>
          
          <category> study </category>
          
      </categories>
      
      
        <tags>
            
            <tag> study </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>lc230 c&amp;d</title>
      <link href="2021/02/28/lc230-c-and-d/"/>
      <url>2021/02/28/lc230-c-and-d/</url>
      
        <content type="html"><![CDATA[<h4 id="5691-通过最少操作次数使数组的和相等"><a href="#5691-通过最少操作次数使数组的和相等" class="headerlink" title="5691. 通过最少操作次数使数组的和相等"></a><a href="https://leetcode-cn.com/problems/equal-sum-arrays-with-minimum-number-of-operations/">5691. 通过最少操作次数使数组的和相等</a></h4><p>​        $10^5$，考虑$O(n),O(nlogn)$</p><p>因为没有单调性，考虑贪心$O(n)$</p><p>枚举答案。</p><p>如果$sum&gt;ans$  考虑用$6,5,4\dots ,2$ 按顺序减差值。</p><p>否则用$1,2,3,4,5$逆序减差值。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span>     <span class="token keyword">int</span> <span class="token function">fun</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&amp;</span>h<span class="token punctuation">,</span><span class="token keyword">int</span> s<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">7</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> sum<span class="token operator">+</span><span class="token operator">=</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">*</span>i<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>sum<span class="token operator">></span>s<span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> x<span class="token operator">=</span>sum<span class="token operator">-</span>s<span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">6</span><span class="token punctuation">;</span>i<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">int</span> t<span class="token operator">=</span>i<span class="token number">-1</span><span class="token punctuation">;</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>t<span class="token operator">*</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">>=</span>x<span class="token punctuation">)</span> <span class="token keyword">return</span> ans<span class="token operator">+</span><span class="token punctuation">(</span>x<span class="token operator">+</span>t<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">/</span>t<span class="token punctuation">;</span>                x<span class="token operator">-</span><span class="token operator">=</span>t<span class="token operator">*</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>                ans<span class="token operator">+</span><span class="token operator">=</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>             <span class="token punctuation">}</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token punctuation">{</span>            <span class="token keyword">int</span> x<span class="token operator">=</span>s<span class="token operator">-</span>sum<span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">6</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">int</span> t<span class="token operator">=</span><span class="token number">6</span><span class="token operator">-</span>i<span class="token punctuation">;</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>t<span class="token operator">*</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">>=</span>x<span class="token punctuation">)</span> <span class="token keyword">return</span> ans<span class="token operator">+</span><span class="token punctuation">(</span>x<span class="token operator">+</span>t<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">/</span>t<span class="token punctuation">;</span>                x<span class="token operator">-</span><span class="token operator">=</span>t<span class="token operator">*</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>                ans<span class="token operator">+</span><span class="token operator">=</span>h<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>        <span class="token keyword">return</span> ans<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> <span class="token function">minOperations</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&amp;</span> a<span class="token punctuation">,</span> vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&amp;</span> b<span class="token punctuation">)</span> <span class="token punctuation">{</span>        <span class="token keyword">int</span> n<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>m<span class="token operator">=</span>b<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">></span>m<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">minOperations</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token operator">*</span>n<span class="token operator">&lt;</span>m<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>        vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token function">c</span><span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">d</span><span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> ans<span class="token operator">=</span><span class="token number">1e9</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> i<span class="token operator">:</span>a<span class="token punctuation">)</span> c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> i<span class="token operator">:</span>b<span class="token punctuation">)</span> d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>m<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span><span class="token number">6</span><span class="token operator">*</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            ans<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span><span class="token function">fun</span><span class="token punctuation">(</span>c<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token operator">+</span><span class="token function">fun</span><span class="token punctuation">(</span>d<span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">return</span> ans<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre><hr><h4 id="5692-车队-II"><a href="#5692-车队-II" class="headerlink" title="5692. 车队 II"></a><a href="https://leetcode-cn.com/problems/car-fleet-ii/">5692. 车队 II</a></h4><p>凸包维护。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span>    <span class="token keyword">struct</span> node<span class="token punctuation">{</span>        <span class="token keyword">double</span> x<span class="token punctuation">,</span>y<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">;</span>    <span class="token keyword">double</span> <span class="token function">cross</span><span class="token punctuation">(</span>node <span class="token operator">&amp;</span>a<span class="token punctuation">,</span>node <span class="token operator">&amp;</span>b<span class="token punctuation">,</span>node<span class="token operator">&amp;</span>c<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">return</span> <span class="token punctuation">(</span>b<span class="token punctuation">.</span>x<span class="token operator">-</span>a<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>y<span class="token operator">-</span>a<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token operator">-</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>x<span class="token operator">-</span>a<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>y<span class="token operator">-</span>a<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    vector<span class="token operator">&lt;</span><span class="token keyword">double</span><span class="token operator">></span> <span class="token function">getCollisionTimes</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">>></span><span class="token operator">&amp;</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span>        <span class="token keyword">int</span> n<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        vector<span class="token operator">&lt;</span>node<span class="token operator">></span><span class="token function">s</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>         vector<span class="token operator">&lt;</span><span class="token keyword">double</span><span class="token operator">></span> <span class="token function">ans</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> top<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token number">-1</span><span class="token punctuation">;</span><span class="token operator">~</span>i<span class="token punctuation">;</span>i<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            node c<span class="token operator">=</span><span class="token punctuation">{</span><span class="token number">1.0</span><span class="token operator">*</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">1.0</span><span class="token operator">*</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">;</span>            <span class="token keyword">while</span><span class="token punctuation">(</span>top<span class="token operator">>=</span><span class="token number">2</span><span class="token operator">&amp;&amp;</span><span class="token function">cross</span><span class="token punctuation">(</span>c<span class="token punctuation">,</span>s<span class="token punctuation">[</span>top<span class="token punctuation">]</span><span class="token punctuation">,</span>s<span class="token punctuation">[</span>top<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">&lt;=</span><span class="token number">0</span><span class="token punctuation">)</span> top<span class="token operator">--</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>top<span class="token punctuation">)</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">else</span> <span class="token punctuation">{</span>                <span class="token keyword">auto</span> <span class="token operator">&amp;</span>d<span class="token operator">=</span>s<span class="token punctuation">[</span>top<span class="token punctuation">]</span><span class="token punctuation">;</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>y<span class="token operator">&lt;=</span>d<span class="token punctuation">.</span>y<span class="token punctuation">)</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>                <span class="token keyword">else</span> <span class="token punctuation">{</span>                    ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">(</span>d<span class="token punctuation">.</span>x<span class="token operator">-</span>c<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token operator">/</span><span class="token punctuation">(</span>c<span class="token punctuation">.</span>y<span class="token operator">-</span>d<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>            <span class="token punctuation">}</span>            s<span class="token punctuation">[</span><span class="token operator">++</span>top<span class="token punctuation">]</span><span class="token operator">=</span>c<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">return</span> ans<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> leetcode </category>
          
      </categories>
      
      
        <tags>
            
            <tag> leetcode </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>ABC 184(C-F)</title>
      <link href="2021/02/27/abc-184/"/>
      <url>2021/02/27/abc-184/</url>
      
        <content type="html"><![CDATA[<h1 id="ABC-184"><a href="#ABC-184" class="headerlink" title="ABC 184"></a>ABC 184</h1><h3 id="C-构造"><a href="#C-构造" class="headerlink" title="C.构造"></a>C.构造</h3><h3 id="D-期望"><a href="#D-期望" class="headerlink" title="D.期望"></a>D.期望</h3><p>期望dp一般倒序转移！！！！！</p><h3 id="E-bfs"><a href="#E-bfs" class="headerlink" title="E.bfs"></a>E.bfs</h3><p>剪纸bfs，跑一次瞬移后应清空。</p><h3 id="F-背包"><a href="#F-背包" class="headerlink" title="F.背包"></a>F.背包</h3><p>二分+暴力</p>]]></content>
      
      
      <categories>
          
          <category> atcoder </category>
          
      </categories>
      
      
        <tags>
            
            <tag> atcoder </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>1492E - Almost Fault-Tolerant Database(暴力&amp;特判)</title>
      <link href="2021/02/23/almost-fault-tolerant-database/"/>
      <url>2021/02/23/almost-fault-tolerant-database/</url>
      
        <content type="html"><![CDATA[<h1 id="1492E-Almost-Fault-Tolerant-Database"><a href="#1492E-Almost-Fault-Tolerant-Database" class="headerlink" title="1492E - Almost Fault-Tolerant Database"></a>1492E - Almost Fault-Tolerant Database</h1><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>​      对第一个数组进行操作，特判修改$0$次和修改$1$次，若都不成立，则特判修改两次，当前数组若与$a[0]$有超过$4$个不一样则无解，小于$3$个不管，否则若有解，必定要修改不同的两个，然后特判。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token comment" spellcheck="true">// Problem: E. Almost Fault-Tolerant Database</span><span class="token comment" spellcheck="true">// Contest: Codeforces - Codeforces Round #704 (Div. 2)</span><span class="token comment" spellcheck="true">// URL: https://codeforces.com/contest/1492/problem/E</span><span class="token comment" spellcheck="true">// Memory Limit: 512 MB</span><span class="token comment" spellcheck="true">// Time Limit: 2000 ms</span><span class="token comment" spellcheck="true">// Date: 2021-02-23 17:05:42</span><span class="token comment" spellcheck="true">// --------by Herio--------</span><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">unsigned</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ull<span class="token punctuation">;</span> <span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb emplace_back </span><span class="token keyword">void</span> <span class="token function">Print</span><span class="token punctuation">(</span><span class="token keyword">int</span> <span class="token operator">*</span>a<span class="token punctuation">,</span><span class="token keyword">int</span> n<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d "</span><span class="token punctuation">,</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>a<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">;</span>vector<span class="token operator">&lt;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token operator">></span>a<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">check</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>ans<span class="token punctuation">,</span><span class="token keyword">bool</span> f<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> c<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>ans<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">!=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> c<span class="token operator">++</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>c<span class="token operator">></span><span class="token number">3</span><span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token comment" spellcheck="true">//超过修改一次.</span>        <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>c<span class="token operator">></span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//需要修改一次.</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token comment" spellcheck="true">//如果修改过一次后还需要修改 说明该情况要修改两次.</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>ans<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">!=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                    vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>tmp<span class="token operator">=</span>ans<span class="token punctuation">;</span>                    tmp<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span>                    <span class="token function">check</span><span class="token punctuation">(</span>tmp<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>            <span class="token punctuation">}</span>            <span class="token keyword">return</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Yes"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d "</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">exit</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>    a<span class="token punctuation">.</span><span class="token function">resize</span><span class="token punctuation">(</span>n<span class="token punctuation">,</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token punctuation">(</span>m<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">check</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//特判a[0] 一次都不用修改和只修改一次两种情况.</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>dif<span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">!=</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span> dif<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>j<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> sz<span class="token operator">=</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>dif<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>sz<span class="token operator">></span><span class="token number">4</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//超过4不成立.</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>sz<span class="token operator">&lt;=</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//小于3不用管.</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token operator">:</span>dif<span class="token punctuation">)</span>    <span class="token comment" spellcheck="true">//否则修改两个位置.</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> y<span class="token operator">:</span>dif<span class="token punctuation">)</span><span class="token punctuation">{</span>                vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>tmp<span class="token operator">=</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>                tmp<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">,</span>tmp<span class="token punctuation">[</span>y<span class="token punctuation">]</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span><span class="token punctuation">;</span>                <span class="token function">check</span><span class="token punctuation">(</span>tmp<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token keyword">break</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> codeforces </category>
          
      </categories>
      
      
        <tags>
            
            <tag> codeforces </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Good Bye 2020</title>
      <link href="2020/12/31/good-bye-2020/"/>
      <url>2020/12/31/good-bye-2020/</url>
      
        <content type="html"><![CDATA[<h1 id="Good-Bye-2020"><a href="#Good-Bye-2020" class="headerlink" title="Good Bye 2020"></a>Good Bye 2020</h1><hr><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>​            虽然小号上分了，但我很伤心，因为……..</p><p>​            我放假能不能上紫呢！？</p><hr><h2 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h2><hr><h2 id="A-Bovine-Dilemma"><a href="#A-Bovine-Dilemma" class="headerlink" title="A. Bovine Dilemma"></a>A. Bovine Dilemma</h2><p>​        暴力枚举水题。</p><h2 id="B-Last-minute-enhancements"><a href="#B-Last-minute-enhancements" class="headerlink" title="B. Last minute enhancements"></a>B. Last minute enhancements</h2><p>​        贪心水题。</p><h2 id="C-Canine-poetry"><a href="#C-Canine-poetry" class="headerlink" title="C. Canine poetry"></a>C. Canine poetry</h2><p>​        考虑长度为2，3的回文串，然后用一个数组维护字符是否被修改过。</p><pre class=" language-cpp"><code class="language-cpp">        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%s"</span><span class="token punctuation">,</span>s<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> n<span class="token operator">=</span><span class="token function">strlen</span><span class="token punctuation">(</span>s<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token function">mst</span><span class="token punctuation">(</span>vis<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>s<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">==</span>s<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">>=</span><span class="token number">2</span><span class="token operator">&amp;&amp;</span>s<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">==</span>s<span class="token punctuation">[</span>i<span class="token number">-2</span><span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>i<span class="token number">-2</span><span class="token punctuation">]</span><span class="token punctuation">)</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>            ans<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre><h2 id="D-13th-Labour-of-Heracles"><a href="#D-13th-Labour-of-Heracles" class="headerlink" title="D. 13th Labour of Heracles"></a>D. 13th Labour of Heracles</h2><p>​         贪心，用优先队列维护度数大于1的，权越大在前面，权相同按度数排。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">;</span>ll a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> deg<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    ll x<span class="token punctuation">,</span>y<span class="token punctuation">;</span>    <span class="token keyword">bool</span> <span class="token keyword">operator</span><span class="token operator">&lt;</span><span class="token punctuation">(</span><span class="token keyword">const</span> node<span class="token operator">&amp;</span>no<span class="token punctuation">)</span><span class="token keyword">const</span><span class="token punctuation">{</span>        <span class="token keyword">return</span> x<span class="token operator">==</span>no<span class="token punctuation">.</span>x<span class="token operator">?</span>y<span class="token operator">&lt;</span>no<span class="token punctuation">.</span>y<span class="token operator">:</span>x<span class="token operator">&lt;</span>no<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> t<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>t<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>t<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">mst</span><span class="token punctuation">(</span>deg<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        priority_queue<span class="token operator">&lt;</span>node<span class="token operator">></span>q<span class="token punctuation">;</span>        ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span>  i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>s<span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span>  i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> u<span class="token punctuation">,</span>v<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>            deg<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">,</span>deg<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>deg<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token punctuation">(</span>ll<span class="token punctuation">)</span>deg<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">int</span> cnt<span class="token operator">=</span>n<span class="token number">-2</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld"</span><span class="token punctuation">,</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span>cnt<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            node u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            s<span class="token operator">+</span><span class="token operator">=</span>u<span class="token punctuation">.</span>x<span class="token punctuation">;</span>            <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %lld"</span><span class="token punctuation">,</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>u<span class="token punctuation">.</span>y<span class="token operator">==</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>            <span class="token keyword">else</span> <span class="token punctuation">{</span>                q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>u<span class="token punctuation">.</span>x<span class="token punctuation">,</span>u<span class="token punctuation">.</span>y<span class="token number">-1</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>         <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="E-Apollo-versus-Pan"><a href="#E-Apollo-versus-Pan" class="headerlink" title="E. Apollo versus Pan"></a>E. Apollo versus Pan</h2><p>​        按位计算贡献，题解说的很明白了。</p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/bye2020E.png" alt="image-20201231102001534"></p><hr><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">5e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">60</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> t<span class="token punctuation">,</span>n<span class="token punctuation">;</span>ll a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>w<span class="token punctuation">[</span><span class="token number">65</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>t<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>t<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">60</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> w<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>M<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span> w<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">>></span>j<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        ll ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            ll Xor<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>And<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>M<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">>></span>j<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                    And<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">&lt;&lt;</span>j<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token operator">*</span>w<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span>                    Xor<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">&lt;&lt;</span>j<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token operator">*</span>n<span class="token punctuation">;</span>                    And<span class="token operator">%</span><span class="token operator">=</span>mod<span class="token punctuation">,</span>Xor<span class="token operator">%</span><span class="token operator">=</span>mod<span class="token punctuation">;</span>                 <span class="token punctuation">}</span><span class="token keyword">else</span> Xor<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">&lt;&lt;</span>j<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token operator">*</span>w<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span>Xor<span class="token operator">%</span><span class="token operator">=</span>mod<span class="token punctuation">;</span>            <span class="token punctuation">}</span>            ans<span class="token operator">=</span><span class="token punctuation">(</span>ans<span class="token operator">+</span>Xor<span class="token operator">*</span>And<span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="F-Euclid’s-nightmare"><a href="#F-Euclid’s-nightmare" class="headerlink" title="F. Euclid’s nightmare"></a>F. Euclid’s nightmare</h2><p>题意：给定$n$个$m$维向量，每个向量最多两维是$1$，其他都是0，问最多能生成多少个不同的$m$维向量，和最小生成这么多个向量的子集。</p><p>思路：并查集，每个向量看成一条边，然后连通分量的大小就是第二个答案，然后最大生成的向量个数就是$2^{size}$个，从小到大加入子集就满足字典序了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">5e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">,</span>s<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">find</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> x<span class="token operator">==</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">?</span>x<span class="token operator">:</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> s<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>ans<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> k<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> u<span class="token punctuation">,</span>v<span class="token operator">=</span>m<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>k<span class="token operator">==</span><span class="token number">2</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>        u<span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">,</span>v<span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>u<span class="token operator">!=</span>v<span class="token punctuation">)</span><span class="token punctuation">{</span>            s<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>v<span class="token punctuation">;</span>            ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    ll t<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>sz<span class="token operator">=</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>ans<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>sz<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> t<span class="token operator">=</span><span class="token punctuation">(</span>t<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld %d\n"</span><span class="token punctuation">,</span>t<span class="token punctuation">,</span>sz<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">:</span>ans<span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d "</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> codeforces </category>
          
      </categories>
      
      
        <tags>
            
            <tag> codeforces </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Internet技术与应用基础复习</title>
      <link href="2020/12/28/internet-review/"/>
      <url>2020/12/28/internet-review/</url>
      
        <content type="html"><![CDATA[<h1 id="Internet技术与应用基础复习"><a href="#Internet技术与应用基础复习" class="headerlink" title="Internet技术与应用基础复习"></a>Internet技术与应用基础复习</h1><hr><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>自己$blog$的$md$炸掉了，我太惨了，反复折磨自己。</p><p><strong>下面的每个知识点最后的页码对应PPT的页码。</strong></p><hr><h2 id="正文"><a href="#正文" class="headerlink" title="正文"></a>正文</h2><p><code>1.计算机网络的组成 </code></p><p><code>3.计算机网络的硬件组成</code></p><p><strong>硬件</strong></p><p>服务器 工作站 网络接口卡 通信介质</p><p><strong>软件</strong></p><p>网络操作系统 网络协议软件</p><p>-第一章p23-p34</p><hr><p><code>2.计算机网络的功能</code></p><p>资源共享，均衡负载及分布处理，信息快速传递和集中处理，综合信息服务，提高系统性价比，维护方便，扩展灵活。[资源+均负载分处理,两个信息，提高性价比…]</p><p>-第一章p21-p22</p><hr><p><code>4.光纤的优缺点</code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw1.png" alt="光纤的优缺点"></p><p>高带宽，低衰减，不易干扰，腐蚀，细小而轻，便宜，安全性高。</p><p>缺点：操作技能要求高，易弯曲折，接口成本高。</p><p>-第一章p30-p30</p><hr><p><code>5.网络协议 </code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw2.png" alt="网络协议"></p><p>-第一章p34</p><hr><p><code>6.网络的拓扑结构</code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw3.png" alt="网络的拓扑结构"></p><p>-第一章p35-p40</p><hr><p><code>7.网络的分类</code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw4.png" alt="网络的分类"></p><p>-第一章p41-p49</p><p><code>8.广播和点对点网络特性</code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw5.png" alt="广播和点对点网络特性"></p><p>-第一章p42</p><hr><p><code>9.三种网络交换方式</code></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw6.png" alt="电路交换"></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw7.png" alt="报文交换"></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw8.png" alt="分组交换"></p><p>-第一章p47-49</p><hr><p><code>10.网络分层结构 [大题]</code></p><p>分层是构建复杂系统的主要方法。</p><p>计算机系统采用分层结构，每一层在其下一层提供的功能基础上，实现为上一层提供的功能。</p><p>因此，越是底层，功能越弱；越是高层，功能越强。每一层的用户可以使用该层提供的功能。</p><p>计算机网络同样采用分层结构。</p><p>2.分层的优点</p><p>(1)　各层之间是独立的。</p><p>(2)　灵活性好。</p><p>(3)　结构上可分割开。</p><p>(4)　易于实现和维护。</p><p>(5)　能促进标准化工作。</p><p>•OSI参考模型</p><p>•TCP/IP体系结构</p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/hlw9.png" alt="OSI和TCP/IP"></p><p>-第一章p50-60</p><hr><p><code>11.TCP/IP 和 OSI 模型的优缺点</code></p><p>-第一章p59-65</p><p><code>12.局域网的特点</code></p><p>-第一章p71</p><p><code>13.IP 地址和 MAC 地址 </code></p><p>-第一章p83-90</p><p><code>14.保留地址功能</code></p><p>-第一章p89</p><p><code>15.默认子网掩码 [大题]</code></p><p> -第一章p91-99</p><p><code>16.网关地址功能</code></p><p> -第一章p100-102</p><p><code>17.万维网和因特网是不是网络</code></p><p> -第一章p20 [未说] </p><p><code>18.WWW 的组成部分</code></p><p> -第一章p113-118, 2.1 P6-11 [未说]</p><p><code>19.电子邮件工作模式</code></p><p> -第一章p119-125 2.2 P6-11 </p><p><code>20.PageRank 算法</code></p><p> -第一章p127-128</p><p><code>21.CSS 语法 </code></p><p> -第三章p35-45</p><p><code>22.JavaScript 的作用和功能</code></p><p> -第三章p46-55</p><p><code>23.CMS [内容管理系统] </code></p><p> -第三章p59-62</p><p><code>24.无线电频谱的特点</code></p><p> -第五章p37</p><p><code>25.微波通信的特点</code></p><p> -第五章p43-45</p><p><code>26.卫星微波通信的特点</code></p><p> -第五章p46-47</p><p><code>27.近场通信 [NFC]</code></p><p>-第五章p51</p><p><code>28无线信号的损耗原因 [大题]</code> </p><p>-第五章p52-54</p><p><code>29.信号调制</code></p><p>-第五章p55</p><p><code>30.信号复用的基本思想</code></p><p>-第五章 没找到</p><p><code>31.复用和多址</code></p><p>-第五章p57</p><p><code>32.WLAN 的组成</code></p><p>-第五章p71-79</p><p><code>33.WLAN 基础架构集中式拓扑的特点</code></p><p>-第五章p80-83</p><p><code>34.无线传感器网络的节点</code></p><p>-第五章p127-130</p><p><code>35.凯撒密码</code></p><p>-第六章p28</p><p><code>36.非对称密钥算法</code></p><p>-第六章p46-55</p><p><code>37.数字签名</code></p><p>-第六章p65</p><p><code>38.IPSec</code></p><p>-第六章p72-75</p><p><code>39.防火墙的作用</code></p><p>-第六章p76-80</p><p><code>40.防火墙的组成</code></p><p>-第六章p76-80</p>]]></content>
      
      
      <categories>
          
          <category> notes </category>
          
      </categories>
      
      
        <tags>
            
            <tag> notes </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Strange Sentences</title>
      <link href="2020/12/18/emo1/"/>
      <url>2020/12/18/emo1/</url>
      
        <content type="html"><![CDATA[<div id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试." data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容."><div class="hbe-input-container"><input type="password" id="hbePass" placeholder="您好, 这里需要密码." /><label>您好, 这里需要密码.</label><div class="bottom-line"></div></div><script id="hbeData" type="hbeData" data-hmacdigest="1764a87ed78f1db5b3cf8abd6dbe078924e1230b8efa0350919caf957fd59be9">9ae1bfd0aa355163a717ec23fe971116924d06070acad2a01edf113cfd5210699a46e598a5ecc58c4ae88874da9338d4c377f02d168132e5ae8eae6875391ed1b8fd2b15ed69f475c2a9b0b647ebe353111f74c4cb6879e12d72d8edb0c0d6160c60719f88f9eafd1f4a1bb0ad2fe611cac542b4a67e4d4888ac02fcabd34e1d0000d3ded2a629ba77486184d7fb2c654e227ebb7c48e9241fdf367c20a4c7bb6b87a8292dea9333906cc04eae2c914016100973029dc57d4bdad9198e2c40dec70acb5d72f4a89064f6c04e40a7f7678ed0664b8f5dec744d80831e66109acd0ac55f2790d90188a6dfadfa3f65ded7b4deae6f0681ca2466a4c4f9f1cadcb3d3e896db24d0ca176b08d2108c9fb3fa05ae64de85bf3b587802e79082c5625f310294b6583b7bf5a055164dcb3114c5</script></div><script src="/lib/blog-encrypt.js"></script><link href="/css/blog-encrypt.css" rel="stylesheet" type="text/css">]]></content>
      
      
      
        <tags>
            
            <tag> emotion </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>2020 ICPC ShangHai Regional 总结</title>
      <link href="2020/12/15/2020-icpc-shanghai-regional/"/>
      <url>2020/12/15/2020-icpc-shanghai-regional/</url>
      
        <content type="html"><![CDATA[<h1 id="2020-ICPC-ShangHai-Regional-总结"><a href="#2020-ICPC-ShangHai-Regional-总结" class="headerlink" title="2020 ICPC ShangHai Regional 总结"></a>2020 ICPC ShangHai Regional 总结</h1><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>咕咕了两天，觉得有必要写一下。</p><p>$Just\ Record\ it,and\ leave\ a\ memory$。</p><hr><h2 id="闲扯-amp-热身赛"><a href="#闲扯-amp-热身赛" class="headerlink" title="闲扯&amp;热身赛"></a>闲扯&amp;热身赛</h2><p>​           从热身赛前一天讲起吧，因为热身赛与四级在同一天，而且热身赛在上午，所以考前一天，一直在 <del>复习英语</del>  [抱佛脚]，果然，有一大事，晚上就失眠了，早上5点就醒了，上午考完四级，听力懵逼过去了，中午提议和$wyy$一起去吃顿好的，结果就去了$kfc$，我请客吃了个大餐，[说好的AA呢?]，下午没事做跟上个星期天打比赛的主办方对线 [后来复审还是挺好的，进决赛了]  。然后随时间的推移来到了晚上的热身赛，晚上热身赛有点意思，热身赛一共有三个题，刚开题，$ycs$看到概率就丢了，我们直接快进到第二题，找了半天规律，乱搞了一个奇偶性的规律，后来发现有特例过不去，就又丢了，快进到第三题，发现跟之前在知乎上面看到的一个数学题有点像，下意识猜了个结论就是排序取中点，可惜的是没想到转换思想，$zyj$造数据给我整懵了，我也不知道这个题目坐标系是咋建的。哦豁，最后热身赛结束直接爆零了。后来看别人的$AC$代码，发现第一个题是概率问题，用组合数学化简一下然后暴力就可以了，我和$ycs$一直以为是概率$dp$，这题还可以用欧拉函数加速一波，估计是我们被上次的那个概率$dp$整怕了，哈哈。热身赛结束，我一看这一波爆零了，有点慌呀，平时我们训练的时候没爆零过呀，根据$zyj$的建议，我回去整理了一波模板，[后来这一堆模板成为了场外人员观战]。整理模板的时候，我发现我的博客都写的啥啊，全是我看不懂的，可能是我记忆力太差了，或是我太菜了，每一个模板都简单的回忆了亿下。噢，12点了该睡觉了。</p><hr><h2 id="正赛"><a href="#正赛" class="headerlink" title="正赛"></a>正赛</h2><p>​        按照约定好的，$ycs$主写代码，我和$zyj$辅助，<del>我划水</del>。比赛开始了，刷新了一波界面，发现有人过$G$题了，集体懵逼。上来我好像看了个$E$题，发现是个环题，丢了，很快我们便找到了签到的$G$，很快$ycs$就$A$掉了，虽然后来我也不知道咋做的，没仔细看那个题。于是开始读其他的题，发现$B,D,M$过的人比较多，我读完了$D$发现这个题是可做的，然后建议一起搞$D$，结果发现要讨论好多情况，我们直接取了几种情况乱搞了下，交了一发，恩，$WA$掉，发现这题有点复杂，就先丢了。然后看$B,M$，读完$B$题，我的第一眼发现题目明显的提示，不是直接签到题吗，然后细心的$zyj$告诉我这题不是这个意思，噢，我人傻了，发现没有啥思路，就丢了。最后决定先搞$M$，发现是个树题，有点类似今年$PAT$甲级那道文件目录？我的第一个直觉是$map$搞，发现没有什么比较好的方法写出来，后来在$zyj$的帮助下，发现只需要$dfs+$贪心的遍历就好了，最后就只剩下建图了，$ycs$决定用字典树建图，我好久没用字典树，自然有点懵逼，好在$ycs$巨巨临危不乱，历经两个小时，成功建树一发$AC$了，$tql$了。我要好好学字典树了。然后我准备想$B$，发现这个题这么多人过，必然是签到啊，最终发现了结论，冲了一波，噢，就是这么简单。$A$掉$B$后，我让$zyj$看$I$题，我和$ycs$看$c$，讨论一会儿，只推出来了个最高位，但是不知道怎么统计每位的贡献，事后发现这个题是个裸的数位$dp$，然后$zyj$读完题目了，给我们讲了一波，我发现要一层一层的算，但是具体怎么算没想出来，然后$zyj$给出最短距离的计算方式，此时$ycs$好像有思路准备写这题的代码了，此时比赛还剩$1h$，我问了下$ycs$，一个小时能不能做出来这个题，搞不出来就丢了，去做人过得比较多的$D$，$ycs$自信的告诉我可以，然后开始搞$I$了，因为我没有啥实现的思路，我在看一些其他的题，最后$ycs$写了个代码，发现过不了样例，然后我和$zyj$一直在帮忙找错，最后我发现这同一层贡献肯定是$2\pi r$的倍数啊，怎么里面没有$r$，然后告诉了$ycs$，果然就出错在这里了，然后还是我们还是不敢交，准备用$zyj$构造的样例再测下，然后发现有点不对？实际上写的是对的，$ycs$交了下就过了。过了$4$题还剩下$20$分钟，我提议最后在$D$上挣扎下，恩，就是挣扎下而已，事后发现有的情况不需要讨论，此题的正解是特判两种，然后二分下第三种情况。比赛结束了，看了眼排名，不算打星的队伍的话，发现有机会拿铜。恩，最后拿了块铜牌，还是挺好的。</p><hr><h2 id="赛后"><a href="#赛后" class="headerlink" title="赛后"></a>赛后</h2><p>把冷了的炸鸡带回去之后，上食堂热了一波，吃的我拉肚子$\dots\dots$</p><p>然后看了下别人的过题代码，学习了一波。然后复习了之前丢了的数位$dp$。</p><p>整到12点，可以缓缓了。</p><p>$over$</p><hr><p>上海站结束了，感谢两位队友带我拿牌牌，太开心啦😊。<del>我躺的很舒服。</del></p>]]></content>
      
      
      <categories>
          
          <category> ICPC </category>
          
      </categories>
      
      
        <tags>
            
            <tag> ICPC </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Why Did the Cow Cross the Road (P)</title>
      <link href="2020/12/08/why-did-the-cow-cross-the-road/"/>
      <url>2020/12/08/why-did-the-cow-cross-the-road/</url>
      
        <content type="html"><![CDATA[<h2 id="Why-Did-the-Cow-Cross-the-Road-P"><a href="#Why-Did-the-Cow-Cross-the-Road-P" class="headerlink" title="Why Did the Cow Cross the Road (P)"></a>Why Did the Cow Cross the Road (P)</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>映射$+$逆序对</p><p>考虑用先映射，然后用$BIT$一次求出逆序对数，然后模拟移动最后一个的变化。</p><p>注意左右不等价，都要移动$n$次。</p><p>时间复杂度：$O(nlogn)$</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token macro property">#<span class="token directive keyword">define</span> lowbit(x) x&amp;(-x)</span><span class="token keyword">int</span> mp<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>ll tr<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> n<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">upd</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span>ll k<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">&lt;=</span>n<span class="token punctuation">)</span><span class="token punctuation">{</span>        tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>k<span class="token punctuation">;</span>        x<span class="token operator">+</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span>ll <span class="token function">que</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span>ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        s<span class="token operator">+</span><span class="token operator">=</span>tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">;</span>        x<span class="token operator">-</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>ll ans<span class="token operator">=</span><span class="token number">1e18</span><span class="token punctuation">;</span><span class="token keyword">int</span> c<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>d<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">solve</span><span class="token punctuation">(</span><span class="token keyword">int</span> <span class="token operator">*</span>a<span class="token punctuation">,</span><span class="token keyword">int</span> <span class="token operator">*</span>b<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">mst</span><span class="token punctuation">(</span>tr<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">memcpy</span><span class="token punctuation">(</span>c<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>a<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">memcpy</span><span class="token punctuation">(</span>d<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>b<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    ll res<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> mp<span class="token punctuation">[</span>c<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>mp<span class="token punctuation">[</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">;</span>        res<span class="token operator">+</span><span class="token operator">=</span><span class="token function">que</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token operator">-</span><span class="token function">que</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token function">upd</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">1LL</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    ll tmp<span class="token operator">=</span>res<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token punctuation">;</span>i<span class="token operator">>=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token comment" spellcheck="true">//printf("res=%lld\n",res);</span>        res<span class="token operator">+</span><span class="token operator">=</span><span class="token number">2</span><span class="token operator">*</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span>n<span class="token number">-1</span><span class="token punctuation">;</span>        tmp<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>tmp<span class="token punctuation">,</span>res<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    ans<span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>tmp<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> x<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">solve</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">solve</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>a<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
    </entry>
    
    
    
    <entry>
      <title>I.营养需求</title>
      <link href="2020/12/08/i-nutritional-needs/"/>
      <url>2020/12/08/i-nutritional-needs/</url>
      
        <content type="html"><![CDATA[<h2 id="I-营养需求"><a href="#I-营养需求" class="headerlink" title="I.营养需求"></a>I.营养需求</h2><h2 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h2><p>给定$n$块地，$m$头牛，每头牛有两个喜爱的地，要给$m$块地染色$col\in[1,4]$，每头牛喜爱的两块地颜色要求不同，输出字典序最小的染色方案。</p><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>贪心$+$暴力</p><p>从第一块地开始贪心地染色，然后暴力从小到大枚举染的颜色，特判$m$头牛是否满足条件，特判时只要判较小的那块地，后面未染色的地可以不用管。</p><p>时间复杂度：$O(4nm)$</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">200</span><span class="token punctuation">;</span><span class="token keyword">typedef</span> pair<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">></span> PII<span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span>PII a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> ans<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>n<span class="token punctuation">,</span>m<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token operator">></span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token punctuation">)</span> <span class="token function">swap</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token punctuation">,</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> f<span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span><span class="token number">4</span><span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>             f<span class="token operator">=</span>j<span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> k<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>k<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>k<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token operator">==</span>i<span class="token operator">&amp;&amp;</span>ans<span class="token punctuation">[</span>a<span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token punctuation">]</span><span class="token operator">==</span>j<span class="token punctuation">)</span><span class="token punctuation">{</span>                    f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>            <span class="token punctuation">}</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token keyword">break</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>f<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> 贪心 </tag>
            
            <tag> 暴力 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>PAT 甲级 1120-1123</title>
      <link href="2020/12/04/pat-jia-1120-1123/"/>
      <url>2020/12/04/pat-jia-1120-1123/</url>
      
        <content type="html"><![CDATA[<h2 id="1120-Friend-Numbers-20分"><a href="#1120-Friend-Numbers-20分" class="headerlink" title="1120 Friend Numbers (20分)"></a>1120 Friend Numbers (20分)</h2><p>随便搞下就行了。</p><h2 id="1121-Damn-Single-25分"><a href="#1121-Damn-Single-25分" class="headerlink" title="1121 Damn Single (25分)"></a>1121 Damn Single (25分)</h2><p>需要注意以下细节的水题。</p><h2 id="1122-Hamiltonian-Cycle-25分"><a href="#1122-Hamiltonian-Cycle-25分" class="headerlink" title="1122 Hamiltonian Cycle (25分)"></a>1122 Hamiltonian Cycle (25分)</h2><p>哈密顿回路，暴力特判即可。</p><h2 id="1123-Is-It-a-Complete-AVL-Tree-30分"><a href="#1123-Is-It-a-Complete-AVL-Tree-30分" class="headerlink" title="1123 Is It a Complete AVL Tree (30分)"></a>1123 Is It a Complete AVL Tree (30分)</h2><p>$AVL$树的建立。</p><p>判断一个树是否为$CBT$，只需判断在一个节点没有子结点后，还会不会出现子结点，如果又出现了，则不是$CBT$。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    <span class="token keyword">int</span> val<span class="token punctuation">;</span>    node <span class="token operator">*</span>l<span class="token punctuation">,</span><span class="token operator">*</span>r<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">;</span>node<span class="token operator">*</span> <span class="token function">ro_L</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//左旋操作 </span>    node<span class="token operator">*</span> t<span class="token operator">=</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">;</span>    rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span>t<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">;</span>    t<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span>rt<span class="token punctuation">;</span>    <span class="token keyword">return</span> t<span class="token punctuation">;</span><span class="token punctuation">}</span>  node<span class="token operator">*</span> <span class="token function">ro_R</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//右旋操作 </span>    node <span class="token operator">*</span> t<span class="token operator">=</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">;</span>    rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span>t<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">;</span>    t<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span>rt<span class="token punctuation">;</span>    <span class="token keyword">return</span> t<span class="token punctuation">;</span><span class="token punctuation">}</span>node<span class="token operator">*</span> <span class="token function">ro_LR</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//左旋后右旋操作 </span>    rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span><span class="token function">ro_L</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token function">ro_R</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span>node<span class="token operator">*</span> <span class="token function">ro_RL</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//右旋后左旋操作 </span>    rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span><span class="token function">ro_R</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token function">ro_L</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">getht</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span> <span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>rt<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token function">max</span><span class="token punctuation">(</span><span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token punctuation">}</span>node <span class="token operator">*</span><span class="token function">insert</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">,</span> <span class="token keyword">int</span> val<span class="token punctuation">)</span> <span class="token punctuation">{</span>        <span class="token comment" spellcheck="true">//AVL 插入结点 </span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>rt<span class="token punctuation">)</span> <span class="token punctuation">{</span>        rt <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">node</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        rt<span class="token operator">-</span><span class="token operator">></span>val <span class="token operator">=</span> val<span class="token punctuation">;</span>        rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span><span class="token constant">NULL</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>val <span class="token operator">&lt;</span> rt<span class="token operator">-</span><span class="token operator">></span>val<span class="token punctuation">)</span> <span class="token punctuation">{</span>        rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span><span class="token function">insert</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">,</span> val<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span><span class="token operator">-</span><span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">2</span><span class="token punctuation">)</span>            rt<span class="token operator">=</span>val<span class="token operator">&lt;</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">-</span><span class="token operator">></span>val <span class="token operator">?</span> <span class="token function">ro_R</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span> <span class="token operator">:</span><span class="token function">ro_LR</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token comment" spellcheck="true">//LL:LR</span>    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>        rt<span class="token operator">-</span><span class="token operator">></span>r <span class="token operator">=</span> <span class="token function">insert</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">,</span> val<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token function">getht</span><span class="token punctuation">(</span>rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">)</span>            rt <span class="token operator">=</span> val <span class="token operator">></span> rt<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">-</span><span class="token operator">></span>val <span class="token operator">?</span><span class="token function">ro_L</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span> <span class="token operator">:</span><span class="token function">ro_RL</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token comment" spellcheck="true">//RR:RL</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> rt<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">bool</span> ok<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>jg<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">lev</span><span class="token punctuation">(</span>node <span class="token operator">*</span>rt<span class="token punctuation">)</span><span class="token punctuation">{</span>    queue<span class="token operator">&lt;</span>node<span class="token operator">*</span><span class="token operator">></span>q<span class="token punctuation">;</span>    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        node <span class="token operator">*</span> u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>f<span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>u<span class="token operator">-</span><span class="token operator">></span>val<span class="token punctuation">)</span><span class="token punctuation">,</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %d"</span><span class="token punctuation">,</span>u<span class="token operator">-</span><span class="token operator">></span>val<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>u<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>jg<span class="token punctuation">)</span> ok<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>             q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> jg<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>u<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span> <span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>jg<span class="token punctuation">)</span> ok<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span> <span class="token keyword">else</span> jg<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> n<span class="token punctuation">;</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    node<span class="token operator">*</span> rt<span class="token operator">=</span><span class="token constant">NULL</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        rt<span class="token operator">=</span><span class="token function">insert</span><span class="token punctuation">(</span>rt<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token comment" spellcheck="true">//printf("%d\n",rt->val);</span>    <span class="token function">lev</span><span class="token punctuation">(</span>rt<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token function">puts</span><span class="token punctuation">(</span>ok<span class="token operator">?</span><span class="token string">"YES"</span><span class="token operator">:</span><span class="token string">"NO"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>PAT 甲级 1116-1119</title>
      <link href="2020/12/04/pat-jia-1116-to-1119/"/>
      <url>2020/12/04/pat-jia-1116-to-1119/</url>
      
        <content type="html"><![CDATA[<h2 id="1116-Come-on-Let’s-C-20分"><a href="#1116-Come-on-Let’s-C-20分" class="headerlink" title="1116 Come on! Let’s C (20分)"></a>1116 Come on! Let’s C (20分)</h2><p>简单特判</p><h2 id="1117-Eddington-Number-25分"><a href="#1117-Eddington-Number-25分" class="headerlink" title="1117 Eddington Number (25分)"></a>1117 Eddington Number (25分)</h2><p>题意有误，应该是大于等于$E$天，排序二分即可。</p><h2 id="1118-Birds-in-Forest-25分"><a href="#1118-Birds-in-Forest-25分" class="headerlink" title="1118 Birds in Forest (25分)"></a>1118 Birds in Forest (25分)</h2><p>并查集大水题，注意查询时用$find()$不要用$s[]$数组。</p><h2 id="1119-Pre-and-Post-order-Traversals-30分"><a href="#1119-Pre-and-Post-order-Traversals-30分" class="headerlink" title="1119 Pre- and Post-order Traversals (30分)"></a>1119 Pre- and Post-order Traversals (30分)</h2><p>已知前序，后序求中序，不唯一的情况就是一个结点只有一个子树。</p><p>因此可以每次在前序中查找后序的倒数第二个结点，该结点就是子树的根，如果根只有该一个子树的话，可以默认为是右子树进行递归。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>pre<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>post<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>in<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>id<span class="token punctuation">;</span><span class="token keyword">bool</span> f<span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">inorder</span><span class="token punctuation">(</span><span class="token keyword">int</span> l1<span class="token punctuation">,</span><span class="token keyword">int</span> r1<span class="token punctuation">,</span><span class="token keyword">int</span> l2<span class="token punctuation">,</span><span class="token keyword">int</span> r2<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>l1<span class="token operator">==</span>r1<span class="token punctuation">)</span><span class="token punctuation">{</span>        in<span class="token punctuation">[</span><span class="token operator">++</span>id<span class="token punctuation">]</span><span class="token operator">=</span>pre<span class="token punctuation">[</span>l1<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>pre<span class="token punctuation">[</span>l1<span class="token punctuation">]</span><span class="token operator">==</span>post<span class="token punctuation">[</span>r2<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> i<span class="token operator">=</span>l1<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span>i<span class="token operator">&lt;=</span>r1<span class="token operator">&amp;&amp;</span>pre<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">!=</span>post<span class="token punctuation">[</span>r2<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> i<span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">-</span>l1<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">inorder</span><span class="token punctuation">(</span>l1<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>i<span class="token number">-1</span><span class="token punctuation">,</span>l2<span class="token punctuation">,</span>l2<span class="token operator">+</span>i<span class="token operator">-</span>l1<span class="token number">-2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> f<span class="token operator">=</span><span class="token boolean">false</span><span class="token punctuation">;</span>        in<span class="token punctuation">[</span><span class="token operator">++</span>id<span class="token punctuation">]</span><span class="token operator">=</span>post<span class="token punctuation">[</span>r2<span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token function">inorder</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>r1<span class="token punctuation">,</span>l2<span class="token operator">+</span>i<span class="token operator">-</span>l1<span class="token number">-1</span><span class="token punctuation">,</span>r2<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>pre<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>post<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">inorder</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span>n<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">puts</span><span class="token punctuation">(</span>f<span class="token operator">?</span><span class="token string">"Yes"</span><span class="token operator">:</span><span class="token string">"No"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>in<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %d"</span><span class="token punctuation">,</span>in<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>PAT 甲级 1112-1115</title>
      <link href="2020/12/03/pat-jia-1112-to-1115/"/>
      <url>2020/12/03/pat-jia-1112-to-1115/</url>
      
        <content type="html"><![CDATA[<h2 id="1112-Stucked-Keyboard-20分"><a href="#1112-Stucked-Keyboard-20分" class="headerlink" title="1112 Stucked Keyboard (20分)"></a>1112 Stucked Keyboard (20分)</h2><p>简单模拟。</p><h2 id="1113-Integer-Set-Partition-25分"><a href="#1113-Integer-Set-Partition-25分" class="headerlink" title="1113 Integer Set Partition (25分)"></a>1113 Integer Set Partition (25分)</h2><p>贪心选即可。</p><h2 id="1114-Family-Property-25分"><a href="#1114-Family-Property-25分" class="headerlink" title="1114 Family Property (25分)"></a>1114 Family Property (25分)</h2><p>并查集的水题，有些细节需要注意。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>s<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>sz<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    <span class="token keyword">int</span> id<span class="token punctuation">,</span>s<span class="token punctuation">,</span>x<span class="token punctuation">,</span>y<span class="token punctuation">,</span>f<span class="token punctuation">;</span><span class="token punctuation">}</span>ans<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">find</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> x<span class="token operator">==</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">?</span>x<span class="token operator">:</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>s<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">bool</span> <span class="token function">cmp</span><span class="token punctuation">(</span>node u<span class="token punctuation">,</span>node v<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> u<span class="token punctuation">.</span>y<span class="token operator">*</span>v<span class="token punctuation">.</span>s<span class="token operator">==</span>v<span class="token punctuation">.</span>y<span class="token operator">*</span>u<span class="token punctuation">.</span>s<span class="token operator">?</span>u<span class="token punctuation">.</span>id<span class="token operator">&lt;</span>v<span class="token punctuation">.</span>id<span class="token operator">:</span>u<span class="token punctuation">.</span>y<span class="token operator">*</span>v<span class="token punctuation">.</span>s<span class="token operator">></span>v<span class="token punctuation">.</span>y<span class="token operator">*</span>u<span class="token punctuation">.</span>s<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">Union</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> v<span class="token punctuation">)</span><span class="token punctuation">{</span>    u<span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">,</span>v<span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">!=</span>u<span class="token punctuation">)</span><span class="token punctuation">{</span>        u<span class="token operator">&lt;</span>v<span class="token operator">?</span>s<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>u<span class="token operator">:</span>s<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>v<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> tot<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">1e5</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> s<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> id<span class="token punctuation">,</span>f1<span class="token punctuation">,</span>f2<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>id<span class="token punctuation">,</span><span class="token operator">&amp;</span>f1<span class="token punctuation">,</span><span class="token operator">&amp;</span>f2<span class="token punctuation">)</span><span class="token punctuation">;</span>vis<span class="token punctuation">[</span>id<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">~</span>f1<span class="token punctuation">)</span> <span class="token function">Union</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span>f1<span class="token punctuation">)</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>f1<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">~</span>f2<span class="token punctuation">)</span> <span class="token function">Union</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span>f2<span class="token punctuation">)</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>f2<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> k<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>j<span class="token operator">&lt;</span>k<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">Union</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span>vis<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>id<span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">[</span>id<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">1e5</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> x<span class="token operator">=</span><span class="token function">find</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>            ans<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">.</span>id<span class="token operator">=</span>x<span class="token punctuation">;</span>            ans<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">.</span>s<span class="token operator">++</span><span class="token punctuation">;</span>            ans<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">.</span>x<span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>            ans<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">.</span>y<span class="token operator">+</span><span class="token operator">=</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>            ans<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>vector<span class="token operator">&lt;</span>node<span class="token operator">></span>res<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">1e5</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>     <span class="token keyword">if</span><span class="token punctuation">(</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>f<span class="token punctuation">)</span> res<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token function">sort</span><span class="token punctuation">(</span>res<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>res<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>cmp<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>res<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>res<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%04d %d %.3f %.3f\n"</span><span class="token punctuation">,</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>id<span class="token punctuation">,</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>s<span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token keyword">double</span><span class="token punctuation">)</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>x<span class="token operator">/</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>s<span class="token punctuation">,</span><span class="token punctuation">(</span><span class="token keyword">double</span><span class="token punctuation">)</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>y<span class="token operator">/</span>res<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="1115-Counting-Nodes-in-a-BST-30分"><a href="#1115-Counting-Nodes-in-a-BST-30分" class="headerlink" title="1115 Counting Nodes in a BST (30分)"></a>1115 Counting Nodes in a BST (30分)</h2><p>考察了$BST$的建立，学到了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    <span class="token keyword">int</span> v<span class="token punctuation">;</span>    node <span class="token operator">*</span>l<span class="token punctuation">,</span><span class="token operator">*</span>r<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">;</span>node<span class="token operator">*</span> <span class="token function">build</span><span class="token punctuation">(</span>node <span class="token operator">*</span>x<span class="token punctuation">,</span><span class="token keyword">int</span> v<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        x<span class="token operator">=</span><span class="token keyword">new</span> <span class="token function">node</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        x<span class="token operator">-</span><span class="token operator">></span>v<span class="token operator">=</span>v<span class="token punctuation">;</span>        x<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span>x<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span><span class="token constant">NULL</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">&lt;=</span>x<span class="token operator">-</span><span class="token operator">></span>v<span class="token punctuation">)</span> x<span class="token operator">-</span><span class="token operator">></span>l<span class="token operator">=</span><span class="token function">build</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">,</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">else</span> x<span class="token operator">-</span><span class="token operator">></span>r<span class="token operator">=</span><span class="token function">build</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">,</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> x<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> mx<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>cnt<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span>node <span class="token operator">*</span>x<span class="token punctuation">,</span><span class="token keyword">int</span> d<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        mx<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>mx<span class="token punctuation">,</span>d<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    cnt<span class="token punctuation">[</span>d<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token function">dfs</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token operator">></span>l<span class="token punctuation">,</span>d<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">dfs</span><span class="token punctuation">(</span>x<span class="token operator">-</span><span class="token operator">></span>r<span class="token punctuation">,</span>d<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    node<span class="token operator">*</span> rt<span class="token operator">=</span><span class="token constant">NULL</span><span class="token punctuation">;</span>    <span class="token keyword">int</span> n<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span>rt<span class="token operator">=</span><span class="token function">build</span><span class="token punctuation">(</span>rt<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">dfs</span><span class="token punctuation">(</span>rt<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d + %d = %d\n"</span><span class="token punctuation">,</span>cnt<span class="token punctuation">[</span>mx<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>cnt<span class="token punctuation">[</span>mx<span class="token number">-2</span><span class="token punctuation">]</span><span class="token punctuation">,</span>cnt<span class="token punctuation">[</span>mx<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">+</span>cnt<span class="token punctuation">[</span>mx<span class="token number">-2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>PAT-甲级-1088-to-1091</title>
      <link href="2020/12/01/pat-jia-1088-to-1091/"/>
      <url>2020/12/01/pat-jia-1088-to-1091/</url>
      
        <content type="html"><![CDATA[<h2 id="1088-Rational-Arithmetic"><a href="#1088-Rational-Arithmetic" class="headerlink" title="1088 Rational Arithmetic"></a>1088 Rational Arithmetic</h2><p>四则运算模拟题，代码太丑了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>        ll x<span class="token punctuation">,</span>y<span class="token punctuation">;</span>    <span class="token keyword">int</span> f<span class="token punctuation">;</span><span class="token punctuation">}</span>a<span class="token punctuation">,</span>b<span class="token punctuation">;</span> ll <span class="token function">gcd</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll b<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> <span class="token operator">!</span>b<span class="token operator">?</span>a<span class="token operator">:</span><span class="token function">gcd</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span>a<span class="token operator">%</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">show</span><span class="token punctuation">(</span>ll x<span class="token punctuation">,</span>ll y<span class="token punctuation">,</span><span class="token keyword">int</span> op<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"Inf"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>op<span class="token operator">==</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"(-"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">%</span>y<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld"</span><span class="token punctuation">,</span>x<span class="token operator">/</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">else</span> <span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">/</span>y<span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld "</span><span class="token punctuation">,</span>x<span class="token operator">/</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld/%lld"</span><span class="token punctuation">,</span>x<span class="token operator">-</span>x<span class="token operator">/</span>y<span class="token operator">*</span>y<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>op<span class="token operator">==</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">")"</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">hj</span><span class="token punctuation">(</span>ll <span class="token operator">&amp;</span>x<span class="token punctuation">,</span>ll <span class="token operator">&amp;</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll g<span class="token operator">=</span><span class="token function">gcd</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    x<span class="token operator">/</span><span class="token operator">=</span>g<span class="token punctuation">,</span>y<span class="token operator">/</span><span class="token operator">=</span>g<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">Print</span><span class="token punctuation">(</span><span class="token keyword">char</span> op<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">show</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>x<span class="token punctuation">,</span>a<span class="token punctuation">.</span>y<span class="token punctuation">,</span>a<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %c "</span><span class="token punctuation">,</span>op<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">show</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>x<span class="token punctuation">,</span>b<span class="token punctuation">.</span>y<span class="token punctuation">,</span>b<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" = "</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%lld/%lld %lld/%lld"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">.</span>x<span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">.</span>y<span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">.</span>x<span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> a<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>a<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token operator">-</span>a<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">else</span> a<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> b<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>b<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token operator">-</span>b<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">else</span> b<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token function">hj</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>x<span class="token punctuation">,</span>a<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">hj</span><span class="token punctuation">(</span>b<span class="token punctuation">.</span>x<span class="token punctuation">,</span>b<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">Print</span><span class="token punctuation">(</span><span class="token string">'+'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    ll lcm<span class="token operator">=</span>a<span class="token punctuation">.</span>y<span class="token operator">/</span><span class="token function">gcd</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span>y<span class="token punctuation">,</span>b<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token operator">*</span>b<span class="token punctuation">.</span>y<span class="token punctuation">;</span>    node z<span class="token punctuation">;</span>    z<span class="token punctuation">.</span>x<span class="token operator">=</span>a<span class="token punctuation">.</span>f<span class="token operator">*</span>lcm<span class="token operator">/</span>a<span class="token punctuation">.</span>y<span class="token operator">*</span>a<span class="token punctuation">.</span>x<span class="token operator">+</span>b<span class="token punctuation">.</span>f<span class="token operator">*</span>lcm<span class="token operator">/</span>b<span class="token punctuation">.</span>y<span class="token operator">*</span>b<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>z<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token operator">-</span>z<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">else</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    z<span class="token punctuation">.</span>y<span class="token operator">=</span>lcm<span class="token punctuation">;</span><span class="token function">hj</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">show</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">,</span>z<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">Print</span><span class="token punctuation">(</span><span class="token string">'-'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    z<span class="token punctuation">.</span>x<span class="token operator">=</span>a<span class="token punctuation">.</span>f<span class="token operator">*</span>lcm<span class="token operator">/</span>a<span class="token punctuation">.</span>y<span class="token operator">*</span>a<span class="token punctuation">.</span>x<span class="token operator">-</span>b<span class="token punctuation">.</span>f<span class="token operator">*</span>lcm<span class="token operator">/</span>b<span class="token punctuation">.</span>y<span class="token operator">*</span>b<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>z<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token operator">-</span>z<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">else</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    z<span class="token punctuation">.</span>y<span class="token operator">=</span>lcm<span class="token punctuation">;</span><span class="token function">hj</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">show</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">,</span>z<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">Print</span><span class="token punctuation">(</span><span class="token string">'*'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    z<span class="token punctuation">.</span>x<span class="token operator">=</span>a<span class="token punctuation">.</span>f<span class="token operator">*</span>a<span class="token punctuation">.</span>x<span class="token operator">*</span>b<span class="token punctuation">.</span>x<span class="token operator">*</span>b<span class="token punctuation">.</span>f<span class="token punctuation">;</span>    z<span class="token punctuation">.</span>y<span class="token operator">=</span>a<span class="token punctuation">.</span>y<span class="token operator">*</span>b<span class="token punctuation">.</span>y<span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span>z<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token operator">-</span>z<span class="token punctuation">.</span>x<span class="token punctuation">;</span>    <span class="token keyword">else</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token function">hj</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">show</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">,</span>z<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">Print</span><span class="token punctuation">(</span><span class="token string">'/'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    z<span class="token punctuation">.</span>x<span class="token operator">=</span>a<span class="token punctuation">.</span>f<span class="token operator">*</span>a<span class="token punctuation">.</span>x<span class="token operator">*</span>b<span class="token punctuation">.</span>y<span class="token punctuation">;</span>    z<span class="token punctuation">.</span>y<span class="token operator">=</span>a<span class="token punctuation">.</span>y<span class="token operator">*</span>b<span class="token punctuation">.</span>x<span class="token operator">*</span>b<span class="token punctuation">.</span>f<span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token operator">&lt;</span><span class="token number">0</span><span class="token operator">&amp;&amp;</span>z<span class="token punctuation">.</span>y<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span><span class="token operator">||</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token operator">></span><span class="token number">0</span><span class="token operator">&amp;&amp;</span>z<span class="token punctuation">.</span>y<span class="token operator">&lt;</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        z<span class="token punctuation">.</span>x<span class="token operator">=</span><span class="token function">abs</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">)</span><span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token operator">=</span><span class="token function">abs</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>        z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>     <span class="token keyword">else</span> z<span class="token punctuation">.</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token function">hj</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">show</span><span class="token punctuation">(</span>z<span class="token punctuation">.</span>x<span class="token punctuation">,</span>z<span class="token punctuation">.</span>y<span class="token punctuation">,</span>z<span class="token punctuation">.</span>f<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="1089-Insert-or-Merge"><a href="#1089-Insert-or-Merge" class="headerlink" title="1089 Insert or Merge"></a>1089 Insert or Merge</h2><p>插入排序，每次排好第$i$个位置，后面位置保持原序。</p><p>归并排序，分区间合并，类似倍增。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> lx x&lt;&lt;1</span><span class="token macro property">#<span class="token directive keyword">define</span> rx x&lt;&lt;1|1</span><span class="token macro property">#<span class="token directive keyword">define</span> reg register</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token macro property">#<span class="token directive keyword">define</span> il inline</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>n<span class="token punctuation">;</span> <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">int</span> p<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>p1<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>p<span class="token operator">&lt;</span>n<span class="token operator">&amp;&amp;</span>b<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token operator">&lt;=</span>b<span class="token punctuation">[</span>p<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span> p<span class="token operator">++</span><span class="token punctuation">;</span>    p1<span class="token operator">=</span><span class="token operator">++</span>p<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>p<span class="token operator">&lt;=</span>n<span class="token operator">&amp;&amp;</span>a<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token operator">==</span>b<span class="token punctuation">[</span>p<span class="token punctuation">]</span><span class="token punctuation">)</span> p<span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>p<span class="token operator">==</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Insertion Sort"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token function">sort</span><span class="token punctuation">(</span>b<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>b<span class="token operator">+</span>p1<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %d"</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">else</span> <span class="token punctuation">{</span>        <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"Merge Sort"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span><span class="token punctuation">{</span>            f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>                <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">!=</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>                    f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>            x<span class="token operator">&lt;&lt;=</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token operator">/</span>x<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>                <span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token operator">+</span><span class="token punctuation">(</span>i<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">*</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>a<span class="token operator">+</span>i<span class="token operator">*</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token operator">+</span><span class="token punctuation">(</span>n<span class="token operator">/</span>x<span class="token punctuation">)</span><span class="token operator">*</span>x<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>a<span class="token operator">+</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>a<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" %d"</span><span class="token punctuation">,</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="1090-Highest-Price-in-Supply-Chain"><a href="#1090-Highest-Price-in-Supply-Chain" class="headerlink" title="1090 Highest Price in Supply Chain"></a>1090 Highest Price in Supply Chain</h2><p>$bfs,dfs$求深度的题，随便搞都行。</p><h2 id="1091-Acute-Stroke"><a href="#1091-Acute-Stroke" class="headerlink" title="1091 Acute Stroke"></a>1091 Acute Stroke</h2><p>求所有连通块大小，$bfs,dfs$都可，但本题因为递归深度较大，貌似一般机器最大递归深度是$1000$，因为因为一维的深度大于$1000$了，所以跑$dfs$会导致最后两个点段错误，所以老老实实跑$bfs$就好了。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1305</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> m<span class="token punctuation">,</span>n<span class="token punctuation">,</span>l<span class="token punctuation">,</span>t<span class="token punctuation">;</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">130</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">65</span><span class="token punctuation">]</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">130</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">65</span><span class="token punctuation">]</span><span class="token punctuation">,</span>cnt<span class="token punctuation">,</span>ans<span class="token punctuation">;</span><span class="token keyword">int</span> d<span class="token punctuation">[</span><span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    <span class="token keyword">int</span> x<span class="token punctuation">,</span>y<span class="token punctuation">,</span>z<span class="token punctuation">;</span><span class="token punctuation">}</span>u<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">bfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span><span class="token keyword">int</span> y<span class="token punctuation">,</span><span class="token keyword">int</span> z<span class="token punctuation">)</span><span class="token punctuation">{</span>    u<span class="token operator">=</span><span class="token punctuation">{</span>x<span class="token punctuation">,</span>y<span class="token punctuation">,</span>z<span class="token punctuation">}</span><span class="token punctuation">;</span>    queue<span class="token operator">&lt;</span>node<span class="token operator">></span>q<span class="token punctuation">;</span>    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>vis<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">[</span>y<span class="token punctuation">]</span><span class="token punctuation">[</span>z<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        cnt<span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">6</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> nx<span class="token operator">=</span>u<span class="token punctuation">.</span>x<span class="token operator">+</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>ny<span class="token operator">=</span>u<span class="token punctuation">.</span>y<span class="token operator">+</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>nz<span class="token operator">=</span>u<span class="token punctuation">.</span>z<span class="token operator">+</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>nx<span class="token operator">>=</span><span class="token number">1</span><span class="token operator">&amp;&amp;</span>nx<span class="token operator">&lt;=</span>m<span class="token operator">&amp;&amp;</span>ny<span class="token operator">>=</span><span class="token number">1</span><span class="token operator">&amp;&amp;</span>ny<span class="token operator">&lt;=</span>n<span class="token operator">&amp;&amp;</span>nz<span class="token operator">>=</span><span class="token number">1</span><span class="token operator">&amp;&amp;</span>nz<span class="token operator">&lt;=</span>l<span class="token operator">&amp;&amp;</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>nx<span class="token punctuation">]</span><span class="token punctuation">[</span>ny<span class="token punctuation">]</span><span class="token punctuation">[</span>nz<span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span>a<span class="token punctuation">[</span>nx<span class="token punctuation">]</span><span class="token punctuation">[</span>ny<span class="token punctuation">]</span><span class="token punctuation">[</span>nz<span class="token punctuation">]</span><span class="token punctuation">)</span>                vis<span class="token punctuation">[</span>nx<span class="token punctuation">]</span><span class="token punctuation">[</span>ny<span class="token punctuation">]</span><span class="token punctuation">[</span>nz<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>nx<span class="token punctuation">,</span>ny<span class="token punctuation">,</span>nz<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    ans<span class="token operator">+</span><span class="token operator">=</span><span class="token punctuation">(</span>cnt<span class="token operator">>=</span>t<span class="token punctuation">)</span><span class="token operator">*</span>cnt<span class="token punctuation">;</span>cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>l<span class="token punctuation">,</span><span class="token operator">&amp;</span>t<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> k<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>k<span class="token operator">&lt;=</span>l<span class="token punctuation">;</span>k<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>                    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> k<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>k<span class="token operator">&lt;=</span>l<span class="token punctuation">;</span>k<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>                <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">[</span>k<span class="token punctuation">]</span><span class="token punctuation">)</span>                    <span class="token function">bfs</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>j<span class="token punctuation">,</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>PAT-甲级-1084-to-1087</title>
      <link href="2020/12/01/pat-jia-1084-to-1087/"/>
      <url>2020/12/01/pat-jia-1084-to-1087/</url>
      
        <content type="html"><![CDATA[<h2 id="1084-Broken-Keyboard-20分"><a href="#1084-Broken-Keyboard-20分" class="headerlink" title="1084 Broken Keyboard (20分)"></a>1084 Broken Keyboard (20分)</h2><p>遇到的坑：</p><p>$tolower(),toupper()$默认返回的$int$所以不能直接当成字符。</p><h2 id="1085-Perfect-Sequence-25分"><a href="#1085-Perfect-Sequence-25分" class="headerlink" title="1085 Perfect Sequence (25分)"></a>1085 Perfect Sequence (25分)</h2><p>枚举每个点，然后二分取最值，一发过了。</p><h2 id="1086-Tree-Traversals-Again-25分"><a href="#1086-Tree-Traversals-Again-25分" class="headerlink" title="1086 Tree Traversals Again (25分)"></a>1086 Tree Traversals Again (25分)</h2><p>二叉树遍历的题目我好弱。非递归的中序遍历的栈实现，入栈序列就是先序遍历，出栈序列就是中序遍历，一直先序和中序，然后就可以递归找后序了。</p><h2 id="1087-All-Roads-Lead-to-Rome-30分"><a href="#1087-All-Roads-Lead-to-Rome-30分" class="headerlink" title="1087 All Roads Lead to Rome (30分)"></a>1087 All Roads Lead to Rome (30分)</h2><p>最短路的经典题目，输出顺序看错了，我$debug$了一个小时，呜呜呜。</p><p>就是需要多维护几个东西，输出路径就利用$pre[]$数字和栈就行了，具体看代码。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>k<span class="token punctuation">,</span>st<span class="token punctuation">,</span>ed<span class="token punctuation">,</span>cnt<span class="token punctuation">,</span>h<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> num<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>sum<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>d<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>hp<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>pre<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>pcnt<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> edge<span class="token punctuation">{</span>    <span class="token keyword">int</span> to<span class="token punctuation">,</span>nt<span class="token punctuation">,</span>w<span class="token punctuation">;</span><span class="token punctuation">}</span>e<span class="token punctuation">[</span>M<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> v<span class="token punctuation">,</span><span class="token keyword">int</span> w<span class="token punctuation">)</span><span class="token punctuation">{</span>    e<span class="token punctuation">[</span><span class="token operator">++</span>cnt<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">{</span>v<span class="token punctuation">,</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>w<span class="token punctuation">}</span><span class="token punctuation">,</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>cnt<span class="token punctuation">;</span>    e<span class="token punctuation">[</span><span class="token operator">++</span>cnt<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">{</span>u<span class="token punctuation">,</span>h<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">,</span>w<span class="token punctuation">}</span><span class="token punctuation">,</span>h<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>cnt<span class="token punctuation">;</span><span class="token punctuation">}</span>unordered_map<span class="token operator">&lt;</span>string<span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">></span>mp<span class="token punctuation">;</span>string name<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> id<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">fun</span><span class="token punctuation">(</span>string a<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>mp<span class="token punctuation">[</span>a<span class="token punctuation">]</span><span class="token punctuation">)</span>  mp<span class="token punctuation">[</span>a<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">,</span>name<span class="token punctuation">[</span>id<span class="token punctuation">]</span><span class="token operator">=</span>a<span class="token punctuation">;</span>      <span class="token keyword">return</span> mp<span class="token punctuation">[</span>a<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">void</span> <span class="token function">dij</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">mst</span><span class="token punctuation">(</span>d<span class="token punctuation">,</span><span class="token number">0x3f</span><span class="token punctuation">)</span><span class="token punctuation">;</span>d<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>num<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>sum<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token operator">=</span>hp<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token punctuation">;</span>    priority_queue<span class="token operator">&lt;</span>PII<span class="token operator">></span>q<span class="token punctuation">;</span>    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>d<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token punctuation">,</span>st<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        PII now<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> u<span class="token operator">=</span>now<span class="token punctuation">.</span>se<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>i<span class="token punctuation">;</span>i<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nt<span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> v<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>to<span class="token punctuation">,</span>w<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>w<span class="token punctuation">;</span>                <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span>d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">></span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>w<span class="token punctuation">)</span><span class="token punctuation">{</span>                    d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>w<span class="token punctuation">;</span>                    sum<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>sum<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>hp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">;</span>                    num<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>num<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>pre<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>u<span class="token punctuation">;</span>                    pcnt<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>pcnt<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>                    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token operator">-</span>d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">,</span>v<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>                <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">==</span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>w<span class="token punctuation">)</span><span class="token punctuation">{</span>                    num<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>num<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>                    <span class="token keyword">if</span><span class="token punctuation">(</span>sum<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">&lt;</span>sum<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>hp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                        sum<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>sum<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>hp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">;</span>                        pre<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>u<span class="token punctuation">;</span>                        pcnt<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>pcnt<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>                    <span class="token punctuation">}</span>                    <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>sum<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">==</span>sum<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>hp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span>pcnt<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">></span>pcnt<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                        pcnt<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>pcnt<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>                        pre<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>u<span class="token punctuation">;</span>                    <span class="token punctuation">}</span>                <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>stack<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>ans<span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d %d %d %d\n"</span><span class="token punctuation">,</span>num<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token punctuation">,</span>d<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token punctuation">,</span>sum<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token punctuation">,</span>sum<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token operator">/</span>pcnt<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>ed<span class="token operator">!=</span>st<span class="token punctuation">)</span><span class="token punctuation">{</span>        ans<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>ed<span class="token punctuation">)</span><span class="token punctuation">;</span>        ed<span class="token operator">=</span>pre<span class="token punctuation">[</span>ed<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>ans<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>st<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">int</span> ok<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>ans<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>ok<span class="token punctuation">)</span> cout<span class="token operator">&lt;&lt;</span>name<span class="token punctuation">[</span>ans<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span>ok<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> cout<span class="token operator">&lt;&lt;</span><span class="token string">"->"</span><span class="token operator">&lt;&lt;</span>name<span class="token punctuation">[</span>ans<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span>ans<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>string s<span class="token punctuation">;</span>cin<span class="token operator">>></span>s<span class="token punctuation">;</span>st<span class="token operator">=</span><span class="token function">fun</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token number">-1</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        cin<span class="token operator">>></span>s<span class="token operator">>></span>x<span class="token punctuation">;</span>        <span class="token keyword">int</span> y<span class="token operator">=</span><span class="token function">fun</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">;</span>hp<span class="token punctuation">[</span>y<span class="token punctuation">]</span><span class="token operator">=</span>x<span class="token punctuation">;</span>    <span class="token punctuation">}</span>ed<span class="token operator">=</span>mp<span class="token punctuation">[</span><span class="token string">"ROM"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>w<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>k<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        string u<span class="token punctuation">,</span>v<span class="token punctuation">;</span>cin<span class="token operator">>></span>u<span class="token operator">>></span>v<span class="token operator">>></span>w<span class="token punctuation">;</span>        <span class="token keyword">int</span> x<span class="token operator">=</span>mp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>y<span class="token operator">=</span>mp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token function">add</span><span class="token punctuation">(</span>x<span class="token punctuation">,</span>y<span class="token punctuation">,</span>w<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token function">dij</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>1082 Read Number in Chinese</title>
      <link href="2020/12/01/pat-jia-1082/"/>
      <url>2020/12/01/pat-jia-1082/</url>
      
        <content type="html"><![CDATA[<h2 id="1082-Read-Number-in-Chinese"><a href="#1082-Read-Number-in-Chinese" class="headerlink" title="1082 Read Number in Chinese"></a>1082 Read Number in Chinese</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>对于每个零，标记一下，然后如果后面出现非0的数字就先$push$零，然后再输出对应的数字，单位。需要注意的是如果万位出现的是$0$，则需要$push$万。</p><p>还需要特判一下只有一个零的情况。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span>string a<span class="token punctuation">;</span><span class="token keyword">int</span> n<span class="token punctuation">;</span>string b<span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">""</span><span class="token punctuation">,</span><span class="token string">"Shi"</span><span class="token punctuation">,</span><span class="token string">"Bai"</span><span class="token punctuation">,</span><span class="token string">"Qian"</span><span class="token punctuation">,</span><span class="token string">"Wan"</span><span class="token punctuation">,</span><span class="token string">"Shi"</span><span class="token punctuation">,</span><span class="token string">"Bai"</span><span class="token punctuation">,</span><span class="token string">"Qian"</span><span class="token punctuation">,</span><span class="token string">"Yi"</span><span class="token punctuation">}</span><span class="token punctuation">;</span>string num<span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">{</span><span class="token string">"ling"</span><span class="token punctuation">,</span><span class="token string">"yi"</span><span class="token punctuation">,</span><span class="token string">"er"</span><span class="token punctuation">,</span><span class="token string">"san"</span><span class="token punctuation">,</span><span class="token string">"si"</span><span class="token punctuation">,</span><span class="token string">"wu"</span><span class="token punctuation">,</span><span class="token string">"liu"</span><span class="token punctuation">,</span><span class="token string">"qi"</span><span class="token punctuation">,</span><span class="token string">"ba"</span><span class="token punctuation">,</span><span class="token string">"jiu"</span><span class="token punctuation">}</span><span class="token punctuation">;</span> vector<span class="token operator">&lt;</span>string<span class="token operator">></span>ans<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    cin<span class="token operator">>></span>a<span class="token punctuation">;</span><span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token operator">==</span><span class="token string">"0"</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">puts</span><span class="token punctuation">(</span><span class="token string">"ling"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">==</span><span class="token string">'-'</span><span class="token punctuation">)</span> ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span><span class="token string">"Fu"</span><span class="token punctuation">)</span><span class="token punctuation">,</span>a<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">bool</span> f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    n<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> x<span class="token operator">=</span>n<span class="token operator">-</span>i<span class="token number">-1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">==</span><span class="token string">'0'</span><span class="token punctuation">)</span><span class="token punctuation">{</span>f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">==</span><span class="token number">4</span><span class="token punctuation">)</span> ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>num<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span>f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>num<span class="token punctuation">[</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">-</span><span class="token string">'0'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>x<span class="token operator">></span><span class="token number">0</span><span class="token punctuation">)</span> ans<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>     <span class="token punctuation">}</span>cout<span class="token operator">&lt;&lt;</span>ans<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>ans<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> cout<span class="token operator">&lt;&lt;</span><span class="token string">" "</span><span class="token operator">&lt;&lt;</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> PAT </category>
          
      </categories>
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>基于二分查找的其他查找算法</title>
      <link href="2020/11/30/other-search/"/>
      <url>2020/11/30/other-search/</url>
      
        <content type="html"><![CDATA[<h1 id="基于二分查找的其他查找算法"><a href="#基于二分查找的其他查找算法" class="headerlink" title="基于二分查找的其他查找算法"></a>基于二分查找的其他查找算法</h1><h2 id="1-fibonacci​查找。"><a href="#1-fibonacci​查找。" class="headerlink" title="1.fibonacci​查找。"></a>1.fibonacci​查找。</h2><p>每次将区间$[l,r]$分为两部分，$fib[idx-1],fib[idx-2]$。</p><p>每次令$mid=l+fib[idx-1]-1$，也即$fib[idx-1]$的右端点，特判。</p><p>如果$a[mid]==val$ 直接返回对应位置的值即可。</p><p>否则如果$a[mid]&gt;val$，则继续对区间左端查找$idx–,r=mid-1$。</p><p>否则对区间右端进行查找，$idx-=2,l=mid+1$。</p><p>因为二分查找需要进行除法运算，而$fibonacci$查找只需用到加减法，所以在数据量较大时，$fibnacci$查找更优的。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"> <span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span>ll f<span class="token punctuation">[</span><span class="token number">105</span><span class="token punctuation">]</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>a<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">pre</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">)</span><span class="token punctuation">{</span>    f<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span>f<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>f<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">+</span>f<span class="token punctuation">[</span>i<span class="token number">-2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span> <span class="token keyword">int</span>  <span class="token function">fib_search</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>a<span class="token punctuation">,</span><span class="token keyword">int</span> val<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> idx<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>m<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">pre</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>f<span class="token punctuation">[</span>idx<span class="token punctuation">]</span><span class="token operator">&lt;</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        idx<span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>f<span class="token punctuation">[</span>idx<span class="token punctuation">]</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        a<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>     <span class="token keyword">int</span> l<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>r<span class="token operator">=</span>a<span class="token punctuation">[</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>l<span class="token operator">&lt;=</span>r<span class="token operator">&amp;&amp;</span>idx<span class="token operator">>=</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> mid<span class="token operator">=</span>l<span class="token operator">+</span>f<span class="token punctuation">[</span>idx<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token operator">==</span>val<span class="token punctuation">)</span>    <span class="token keyword">return</span> mid<span class="token operator">>=</span>m<span class="token operator">?</span>m<span class="token number">-1</span><span class="token operator">:</span>mid<span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token operator">></span>val<span class="token punctuation">)</span> r<span class="token operator">=</span>mid<span class="token number">-1</span><span class="token punctuation">,</span>idx<span class="token operator">--</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> l<span class="token operator">=</span>mid<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>idx<span class="token operator">-</span><span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">freopen</span><span class="token punctuation">(</span><span class="token string">"1.in"</span><span class="token punctuation">,</span><span class="token string">"r"</span><span class="token punctuation">,</span><span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;</span><span class="token number">10</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>a<span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>a<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"查询的结果为:\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span><span class="token function">fib_search</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span><span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="tips"><a href="#tips" class="headerlink" title="$tips:$"></a>$tips:$</h2><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/fib_1.png" alt="1"></p><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/fib_2.png" alt="2"></p><p>$fibonacci$ 在第$47$项爆$int$。</p><p>在第$93$项爆$long\ long$。</p><hr><h2 id="2-插值查找。"><a href="#2-插值查找。" class="headerlink" title="2.插值查找。"></a>2.插值查找。</h2><p>只需将二分查找的$mid=l+\dfrac{r-l}{2}$改成$mid=l+\dfrac{(val-a[l])}{a[r]-a[l]}\times (r-l)$。</p><p>这样的算法在数组长度较大，且分布平均的数组中时间复杂度更优。</p><p>时间复杂度：$O(loglogn)$</p><h2 id="代码-1"><a href="#代码-1" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>n<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">ins_search</span><span class="token punctuation">(</span><span class="token keyword">int</span> <span class="token operator">*</span>a<span class="token punctuation">,</span><span class="token keyword">int</span> val<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> l<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>r<span class="token operator">=</span>n<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>l<span class="token operator">&lt;=</span>r<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> mid<span class="token operator">=</span>l<span class="token operator">+</span><span class="token punctuation">(</span>val<span class="token operator">-</span>a<span class="token punctuation">[</span>l<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>r<span class="token punctuation">]</span><span class="token operator">-</span>a<span class="token punctuation">[</span>l<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">*</span><span class="token punctuation">(</span>r<span class="token operator">-</span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token operator">==</span>val<span class="token punctuation">)</span> <span class="token keyword">return</span> mid<span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>mid<span class="token punctuation">]</span><span class="token operator">></span>val<span class="token punctuation">)</span> r<span class="token operator">=</span>mid<span class="token number">-1</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> l<span class="token operator">=</span>mid<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">freopen</span><span class="token punctuation">(</span><span class="token string">"2.in"</span><span class="token punctuation">,</span><span class="token string">"r"</span><span class="token punctuation">,</span><span class="token constant">stdin</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>a<span class="token operator">+</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"查询结果为:\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span><span class="token function">ins_search</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span><span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><hr>]]></content>
      
      
      <categories>
          
          <category> 模板 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 查找算法 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>一道关于距离和的数学题</title>
      <link href="2020/11/30/math-01/"/>
      <url>2020/11/30/math-01/</url>
      
        <content type="html"><![CDATA[<h1 id="一道关于距离和的数学题"><a href="#一道关于距离和的数学题" class="headerlink" title="一道关于距离和的数学题"></a>一道关于距离和的数学题</h1><h2 id="题意"><a href="#题意" class="headerlink" title="题意"></a>题意</h2><p>给定数轴上$n$个点$a_i,i\in[1,n]$，$(a_i&lt;a_{i+1},i&lt;n)$求$sum=\sum\limits_{i=1}^n|x-a_i|$的最小值。</p><hr><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>1.从$-\infty$开始向右移动，显然移动$\triangle x$，$sum$是递减的，继续往右移动，当左边的点等于右边的点时达到最小值，继续往右移动，$sum$会递增。</p><p>所以需要讨论$n$的奇偶性。</p><p>当$n=2k-1$时，显然$x=k$取最小值，为</p><p>$\sum\limits_{i=1}^{k-1} (a_{n+1-i}-a_i)$</p><p>当$n=2k$时，$x\in[k,k+1]$之间都可以取到最小值，为</p><p>$\sum\limits_{i=1}^{k} (a_{n+1-i}-a_i)$</p><hr><p>2.由绝对值不等式：$|a|+|b|\ge|a-b|$的取等条件：$ab\le0$</p><p>$n=2k-1$时：</p><p>$\sum\limits_{i=1}^n|x-a_i|$ </p><p>$=(|x-a_1|+|x-a_n|)+(|x-a_2|+|x-a_{n-1}|)+\dots+|x-a_k|$ </p><p> $\ge (a_n-a_1)+\dots+|x-a_k|$</p><p>当$x=k$时取等。</p><p>偶数同理。</p><hr><h2 id="推广"><a href="#推广" class="headerlink" title="推广"></a>推广</h2><p>$Butchart-Moster$定理：</p><p>设$a_1&lt;\dots&lt;a_n,\lambda_1\dots \lambda_n\in Q^+,$则$f(x)=\sum\limits_{i=1}^n\lambda_i|x-a_i|$存在唯一极小值。</p><h2 id="ACM中的应用"><a href="#ACM中的应用" class="headerlink" title="ACM中的应用"></a>ACM中的应用</h2><p>显然该数学题，可以与$ACM$中的贪心的题相联系，给定$n$个点，求距离这个$n$个点的和最小值，可以因为是个凹型函数，可以考虑三分，但是本题已经证明了只需考虑奇偶性，所以就直接贪心了。</p>]]></content>
      
      
      <categories>
          
          <category> 每日数学 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 贪心 </tag>
            
            <tag> 三分 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Why Did the Cow Cross the Road III (G)</title>
      <link href="2020/11/29/why-did-the-cow-cross-the-road-iii-g/"/>
      <url>2020/11/29/why-did-the-cow-cross-the-road-iii-g/</url>
      
        <content type="html"><![CDATA[<h1 id="Why-Did-the-Cow-Cross-the-Road-III-G"><a href="#Why-Did-the-Cow-Cross-the-Road-III-G" class="headerlink" title="Why Did the Cow Cross the Road III (G)"></a>Why Did the Cow Cross the Road III (G)</h1><h2 id="题意：求相交区间的个数。"><a href="#题意：求相交区间的个数。" class="headerlink" title="题意：求相交区间的个数。"></a>题意：求相交区间的个数。</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><hr><p>思路1：直接考虑每个数对应区间的贡献，显然相交区间的要求就是对于区间$[l,r]$，与左边相交或者与右边相交，又因为不讲顺序，所以可以考虑对所有区间按左端点排序，然后对于当前区间我们只需要找到右端点在$[l,r]$之间的数就行了，因为排序后左端点必定小于等于$l$。因此可以用$BIT$进行区间查询。</p><hr><p>思路2：逆向思维，即用所有情况$-$不满足条件的。</p><p>所有情况$=\dfrac{n(n-1)}{2}$。</p><p>不满足条件的即：对于区间$[l,r]$，存在一个区间在该区间外，或者被该区间包括，这里可以用两个$BIT$分别维护左端点和右端点，每次遍历到一个区间的右端点时，就计算该区间左端点左边有多少个右端点，然后计算有多少个右端点在$(l,r)$之内。</p><hr><p>时间复杂度：$O(nlogn)$</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><p><strong>代码1</strong></p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token macro property">#<span class="token directive keyword">define</span> lowbit(x) x&amp;(-x)</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>p<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>cnt<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> BIT<span class="token punctuation">{</span>    <span class="token keyword">int</span> tr<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">void</span> <span class="token function">upd</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span><span class="token keyword">int</span> k<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">&lt;=</span><span class="token punctuation">(</span>n<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>k<span class="token punctuation">;</span>        x<span class="token operator">+</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">que</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        s<span class="token operator">+</span><span class="token operator">=</span>tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">,</span>x<span class="token operator">-</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span><span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span>t1<span class="token punctuation">,</span>t2<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll ans<span class="token operator">=</span><span class="token number">1LL</span><span class="token operator">*</span>n<span class="token operator">*</span><span class="token punctuation">(</span>n<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span><span class="token punctuation">(</span>n<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">++</span>cnt<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">==</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            ans<span class="token operator">-</span><span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">0LL</span><span class="token operator">+</span>t1<span class="token punctuation">.</span><span class="token function">que</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span>t2<span class="token punctuation">.</span><span class="token function">que</span><span class="token punctuation">(</span>i<span class="token number">-1</span><span class="token punctuation">)</span><span class="token operator">-</span>t2<span class="token punctuation">.</span><span class="token function">que</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            t1<span class="token punctuation">.</span><span class="token function">upd</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>t2<span class="token punctuation">.</span><span class="token function">upd</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>p<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p><strong>代码2：</strong></p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token macro property">#<span class="token directive keyword">define</span> lowbit(x) x&amp;(-x)</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>PII p<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> BIT<span class="token punctuation">{</span>    <span class="token keyword">int</span> tr<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">void</span> <span class="token function">upd</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">,</span><span class="token keyword">int</span> k<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token operator">&lt;=</span><span class="token punctuation">(</span>n<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>k<span class="token punctuation">;</span>        x<span class="token operator">+</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">que</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">int</span> s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">{</span>        s<span class="token operator">+</span><span class="token operator">=</span>tr<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">,</span>x<span class="token operator">-</span><span class="token operator">=</span><span class="token function">lowbit</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span><span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">}</span>t<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    ll ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">int</span> id<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span><span class="token punctuation">(</span>n<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">)</span> vis<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token operator">=</span>i<span class="token punctuation">;</span>        <span class="token keyword">else</span> p<span class="token punctuation">[</span><span class="token operator">++</span>id<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token operator">=</span>vis<span class="token punctuation">[</span>x<span class="token punctuation">]</span><span class="token punctuation">,</span>p<span class="token punctuation">[</span>id<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token operator">=</span>i<span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">sort</span><span class="token punctuation">(</span>p<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>p<span class="token operator">+</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        ans<span class="token operator">+</span><span class="token operator">=</span>t<span class="token punctuation">.</span><span class="token function">que</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token punctuation">)</span><span class="token operator">-</span>t<span class="token punctuation">.</span><span class="token function">que</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>fi<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        t<span class="token punctuation">.</span><span class="token function">upd</span><span class="token punctuation">(</span>p<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>se<span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> BIT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>交叉乘(前缀和)</title>
      <link href="2020/11/27/nowcoder-s2-b/"/>
      <url>2020/11/27/nowcoder-s2-b/</url>
      
        <content type="html"><![CDATA[<h2 id="交叉乘"><a href="#交叉乘" class="headerlink" title="交叉乘"></a>交叉乘</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>化简式子，前缀和优化。</p><p>挺简单的。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">const</span> <span class="token keyword">int</span> mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span>    <span class="token comment" spellcheck="true">/**     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可     * 多次求交叉乘     * @param a int整型vector a1,a2,...,an     * @param query int整型vector l1,r1,l2,r2,...,lq,rq     * @return int整型vector     */</span>    vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span> <span class="token function">getSum</span><span class="token punctuation">(</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&amp;</span> a<span class="token punctuation">,</span> vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&amp;</span> q<span class="token punctuation">)</span> <span class="token punctuation">{</span>           <span class="token keyword">int</span> n<span class="token operator">=</span>a<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>m<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span><span class="token function">pre</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">sum</span><span class="token punctuation">(</span>n<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                pre<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">(</span>pre<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">+</span>a<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>                sum<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">(</span>sum<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1LL</span><span class="token operator">*</span>pre<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">*</span>a<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>            <span class="token punctuation">}</span>        vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>ans<span class="token punctuation">;</span>           <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>m<span class="token punctuation">;</span>i<span class="token operator">+</span><span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">{</span>               <span class="token keyword">int</span> l<span class="token operator">=</span>q<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>r<span class="token operator">=</span>q<span class="token punctuation">[</span>i<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>               <span class="token keyword">int</span> x<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">1LL</span><span class="token operator">*</span><span class="token punctuation">(</span>pre<span class="token punctuation">[</span>r<span class="token punctuation">]</span><span class="token operator">-</span>pre<span class="token punctuation">[</span>l<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">*</span>pre<span class="token punctuation">[</span>r<span class="token punctuation">]</span><span class="token operator">%</span>mod<span class="token operator">-</span><span class="token punctuation">(</span>sum<span class="token punctuation">[</span>r<span class="token punctuation">]</span><span class="token operator">-</span>sum<span class="token punctuation">[</span>l<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>               x<span class="token operator">=</span><span class="token punctuation">(</span>x<span class="token operator">%</span>mod<span class="token operator">+</span>mod<span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>               ans<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>           <span class="token punctuation">}</span>        <span class="token keyword">return</span> ans<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> 前缀和 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>牛牛摆玩偶(二分)</title>
      <link href="2020/11/27/nowcoder-s2-a/"/>
      <url>2020/11/27/nowcoder-s2-a/</url>
      
        <content type="html"><![CDATA[<h2 id="牛牛摆玩偶-二分"><a href="#牛牛摆玩偶-二分" class="headerlink" title="牛牛摆玩偶(二分)"></a>牛牛摆玩偶(二分)</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>因为答案具有单调性，所以考虑二分，总是忘记有二分这个优化的玩意了，然后循环判一下，开始点为最左区间起点，然后贪心的选，如果不在某个区间内，就将$pos$定位到下一个区间的左端点即可。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token comment" spellcheck="true">/** * struct Interval { *    int start; *    int end; *    Interval(int s, int e) : start(start), end(e) {} * }; */</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">class</span> <span class="token class-name">Solution</span> <span class="token punctuation">{</span><span class="token keyword">public</span><span class="token operator">:</span>    <span class="token comment" spellcheck="true">/**     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可     *      * @param n int整型 玩偶数     * @param m int整型 区间数     * @param intervals Interval类vector 表示区间     * @return int整型     */</span>    <span class="token keyword">int</span> <span class="token function">doll</span><span class="token punctuation">(</span><span class="token keyword">int</span> n<span class="token punctuation">,</span> <span class="token keyword">int</span> m<span class="token punctuation">,</span> vector<span class="token operator">&lt;</span>Interval<span class="token operator">></span><span class="token operator">&amp;</span> a<span class="token punctuation">)</span> <span class="token punctuation">{</span>         <span class="token function">sort</span><span class="token punctuation">(</span>a<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>a<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token punctuation">[</span><span class="token operator">&amp;</span><span class="token punctuation">]</span><span class="token punctuation">(</span>Interval a<span class="token punctuation">,</span>Interval b<span class="token punctuation">)</span><span class="token punctuation">{</span>             <span class="token keyword">return</span> a<span class="token punctuation">.</span>start<span class="token operator">&lt;</span>b<span class="token punctuation">.</span>start<span class="token punctuation">;</span>         <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>           ll l<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>r<span class="token operator">=</span><span class="token number">1LL</span><span class="token operator">*</span><span class="token number">1e10</span><span class="token punctuation">;</span>        ll ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>         <span class="token keyword">while</span><span class="token punctuation">(</span>l<span class="token operator">&lt;=</span>r<span class="token punctuation">)</span><span class="token punctuation">{</span>             ll mid<span class="token operator">=</span>l<span class="token operator">+</span>r<span class="token operator">>></span><span class="token number">1</span><span class="token punctuation">;</span>             <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>now<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>             ll p<span class="token operator">=</span>a<span class="token punctuation">[</span>now<span class="token punctuation">]</span><span class="token punctuation">.</span>start<span class="token operator">+</span>mid<span class="token punctuation">;</span>             <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                 <span class="token keyword">while</span><span class="token punctuation">(</span>now<span class="token operator">&lt;</span>m<span class="token operator">&amp;&amp;</span>p<span class="token operator">></span>a<span class="token punctuation">[</span>now<span class="token punctuation">]</span><span class="token punctuation">.</span>end<span class="token punctuation">)</span> now<span class="token operator">++</span><span class="token punctuation">;</span>                 <span class="token keyword">if</span><span class="token punctuation">(</span>now<span class="token operator">>=</span>m<span class="token punctuation">)</span><span class="token punctuation">{</span>                     f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>                 <span class="token punctuation">}</span>                 p<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>p<span class="token operator">+</span>mid<span class="token punctuation">,</span>a<span class="token punctuation">[</span>now<span class="token punctuation">]</span><span class="token punctuation">.</span>start<span class="token operator">+</span>mid<span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token punctuation">}</span>                        <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> l<span class="token operator">=</span>mid<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span>ans<span class="token operator">=</span>mid<span class="token punctuation">;</span>             <span class="token keyword">else</span> r<span class="token operator">=</span>mid<span class="token number">-1</span><span class="token punctuation">;</span>         <span class="token punctuation">}</span>        <span class="token keyword">return</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">)</span>ans<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> 二分 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 二分 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>1079 Total Sales of Supply Chain (25分)</title>
      <link href="2020/11/27/pat-jia-1079/"/>
      <url>2020/11/27/pat-jia-1079/</url>
      
        <content type="html"><![CDATA[<h2 id="1079-Total-Sales-of-Supply-Chain-25分"><a href="#1079-Total-Sales-of-Supply-Chain-25分" class="headerlink" title="1079 Total Sales of Supply Chain (25分)"></a>1079 Total Sales of Supply Chain (25分)</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>就一个树形图，跑$dfs$或$bfs$，记录深度，遇到叶子结点计算贡献即可。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">;</span><span class="token keyword">double</span> p<span class="token punctuation">,</span>r<span class="token punctuation">,</span>ans<span class="token punctuation">;</span><span class="token keyword">int</span> val<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">double</span> dep<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%lf%lf"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>p<span class="token punctuation">,</span><span class="token operator">&amp;</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> k<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>k<span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> v<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>val<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>j<span class="token operator">&lt;</span>k<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>            e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>queue<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>q<span class="token punctuation">;</span>    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    dep<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            ans<span class="token operator">+</span><span class="token operator">=</span>val<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">*</span>p<span class="token operator">*</span>dep<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            dep<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>dep<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">*</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token operator">+</span><span class="token number">0.01</span><span class="token operator">*</span>r<span class="token punctuation">)</span><span class="token punctuation">,</span>q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>         <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%.1f\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> dfs </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>1078 Hashing (25分)</title>
      <link href="2020/11/27/pat-jia-1078/"/>
      <url>2020/11/27/pat-jia-1078/</url>
      
        <content type="html"><![CDATA[<h2 id="1078-Hashing-25分"><a href="#1078-Hashing-25分" class="headerlink" title="1078 Hashing (25分)"></a>1078 Hashing (25分)</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>没看到题目中的：</p><p><code> Quadratic probing (with positive increments only)</code></p><p>直接暴力，用$vis$存下就好了。</p><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">2e4</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    cin<span class="token operator">>></span>n<span class="token operator">>></span>m<span class="token punctuation">;</span><span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">&lt;=</span><span class="token number">1</span><span class="token punctuation">)</span> n<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>n<span class="token punctuation">;</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>j<span class="token operator">*</span>j<span class="token operator">&lt;=</span>i<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">%</span>j<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token punctuation">{</span>            n<span class="token operator">=</span>i<span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token comment" spellcheck="true">//printf("n=%d\n",n);</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>x<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>x<span class="token operator">%</span>n<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span><span class="token punctuation">(</span>x<span class="token operator">+</span>j<span class="token operator">*</span>j<span class="token punctuation">)</span><span class="token operator">%</span>n<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                    vis<span class="token punctuation">[</span><span class="token punctuation">(</span>x<span class="token operator">+</span>j<span class="token operator">*</span>j<span class="token punctuation">)</span><span class="token operator">%</span>n<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>                    ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token punctuation">(</span>x<span class="token operator">+</span>j<span class="token operator">*</span>j<span class="token punctuation">)</span><span class="token operator">%</span>n<span class="token punctuation">;</span>                    f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>            <span class="token punctuation">}</span>            <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>f<span class="token punctuation">)</span> ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> vis<span class="token punctuation">[</span>x<span class="token operator">%</span>n<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>x<span class="token operator">%</span>n<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">~</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span>ans<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"-"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token operator">&lt;</span>m<span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">" "</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">else</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> PAT </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Modern Art(差分)</title>
      <link href="2020/11/26/modern-art/"/>
      <url>2020/11/26/modern-art/</url>
      
        <content type="html"><![CDATA[<h2 id="Modern-Art"><a href="#Modern-Art" class="headerlink" title="Modern Art"></a>Modern Art</h2><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>反向考虑不可能的情况，用$n^2$减即为答案，即某个位置被覆盖过一次以上的颜色，且每种颜色只有一次贡献，注意特判一下$n&gt;1,color_{cnt}=1$的情况，因为这种情况</p><p>也不可能是第一次涂的颜色，即差分+前缀和即可。</p><p>时间复杂度：$O(n^2)$</p><hr><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> dif<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> b<span class="token punctuation">[</span>N<span class="token operator">*</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">,</span>n<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token operator">*</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token operator">*</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span>inf<span class="token punctuation">,</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">=</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token keyword">int</span> c<span class="token operator">=</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">;</span>                b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>                b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token punctuation">;</span>                b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>                b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>c<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span>j<span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token keyword">int</span> cnt<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token operator">*</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">==</span>inf<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        cnt<span class="token operator">++</span><span class="token punctuation">;</span>        dif<span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        dif<span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        dif<span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span>        dif<span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>            dif<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">=</span>dif<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">-</span>dif<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token number">-1</span><span class="token punctuation">]</span><span class="token operator">+</span>dif<span class="token punctuation">[</span>i<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">+</span>dif<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token number">-1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">int</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>j<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>dif<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">></span><span class="token number">1</span><span class="token operator">&amp;&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token operator">&amp;&amp;</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                ans<span class="token operator">++</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>n<span class="token operator">*</span>n<span class="token operator">-</span>ans<span class="token operator">-</span><span class="token punctuation">(</span>cnt<span class="token operator">==</span><span class="token number">1</span><span class="token operator">&amp;&amp;</span>n<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> 前缀和 </tag>
            
            <tag> 差分 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Barn Painting(树形dp)</title>
      <link href="2020/11/26/barn-painting/"/>
      <url>2020/11/26/barn-painting/</url>
      
        <content type="html"><![CDATA[<h1 id="Barn-Painting"><a href="#Barn-Painting" class="headerlink" title="Barn Painting"></a>Barn Painting</h1><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><p>简单的树形$dp$，标记已经涂好色的点就行了。</p><hr><h2 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e5</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>dp<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">,</span>n<span class="token punctuation">,</span>k<span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span>vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">else</span> dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span>dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">=</span>dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">==</span>fa<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>        dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1LL</span><span class="token operator">*</span>dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">*</span><span class="token punctuation">(</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">+</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1LL</span><span class="token operator">*</span>dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">*</span><span class="token punctuation">(</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">+</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>        dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1LL</span><span class="token operator">*</span>dp<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token operator">*</span><span class="token punctuation">(</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">+</span>dp<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>u<span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>e<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>u<span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>k<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>v<span class="token punctuation">;</span><span class="token function">dfs</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span><span class="token number">1LL</span><span class="token operator">*</span><span class="token punctuation">(</span>dp<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">+</span>dp<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">+</span>dp<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">%</span>mod<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> dp </category>
          
      </categories>
      
      
        <tags>
            
            <tag> dp </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Bovine Genomics (Gold)</title>
      <link href="2020/11/26/bovine-benomics-gold/"/>
      <url>2020/11/26/bovine-benomics-gold/</url>
      
        <content type="html"><![CDATA[<h2 id="Bovine-Genomics-Gold"><a href="#Bovine-Genomics-Gold" class="headerlink" title="Bovine Genomics (Gold)"></a>Bovine Genomics (Gold)</h2><p>思路：一开始没考虑道答案的单调性，无脑暴力超时了，菜菜菜。</p><p>因为答案具有单调性，考虑$map+$二分解决即可。</p><p>时间复杂度 ：$O(mnlogm)$</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">;</span>string a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>unordered_map<span class="token operator">&lt;</span>string<span class="token punctuation">,</span><span class="token keyword">int</span><span class="token operator">></span>mp<span class="token punctuation">;</span><span class="token keyword">bool</span> <span class="token function">check</span><span class="token punctuation">(</span><span class="token keyword">int</span> x<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> l<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>l<span class="token operator">+</span>x<span class="token number">-1</span><span class="token operator">&lt;</span>m<span class="token punctuation">;</span>l<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        mp<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            mp<span class="token punctuation">[</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>mp<span class="token punctuation">[</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>l<span class="token punctuation">,</span>x<span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>                f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span>  <span class="token keyword">return</span> <span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    ios<span class="token operator">::</span><span class="token function">sync_with_stdio</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">,</span>cin<span class="token punctuation">.</span><span class="token function">tie</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    cin<span class="token operator">>></span>n<span class="token operator">>></span>m<span class="token punctuation">;</span>    <span class="token keyword">int</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> cin<span class="token operator">>></span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> cin<span class="token operator">>></span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">int</span> l<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>r<span class="token operator">=</span>m<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>l<span class="token operator">&lt;</span>r<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> mid<span class="token operator">=</span><span class="token punctuation">(</span>l<span class="token operator">+</span>r<span class="token punctuation">)</span><span class="token operator">>></span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">check</span><span class="token punctuation">(</span>mid<span class="token punctuation">)</span><span class="token punctuation">)</span> r<span class="token operator">=</span>mid<span class="token punctuation">;</span>        <span class="token keyword">else</span> l<span class="token operator">=</span>mid<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> 二分 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 二分 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>2020年Java题库整理</title>
      <link href="2020/11/25/java-knowledge/"/>
      <url>2020/11/25/java-knowledge/</url>
      
        <content type="html"><![CDATA[<h1 id="2020年Java题库整理"><a href="#2020年Java题库整理" class="headerlink" title="2020年Java题库整理"></a>2020年Java题库整理</h1><h2 id="知识点整理："><a href="#知识点整理：" class="headerlink" title="知识点整理："></a>知识点整理：</h2><p>1.<code>Java</code> 语言具有跨平台性， 是一种面向对象的语言，程序具有可移植性，不可多继承。</p><p>2.<code>Java</code>的标准版主要用于桌面级的应用和数据库的开发。</p><p>3.<code>main()</code>的头定义只能为<code>public void main</code>，一个类中可以没有 <code>main()</code>方法。</p><p>4.接口可以继承接口。</p><p>5.静态内部类不能访问外部类的非静态成员，内部类可以被声明为 <code>private</code> 或 <code>protected</code> ，内部类可以被定义为 <code>abstract</code>，内部类可以匿名。</p><p>6.在异常处理时，如释放资源、关闭文件等最好由<code>finally</code>代码块来完成。</p><p>子类将继承父类非私有的属性和方法。**(问过老师，考试按该知识点做题)**</p><p>8.覆盖发生在父类与子类之间，而重载发生在同一个类中，覆盖和重载都要求必须同名，final修饰的方法可以重载但不能覆盖。</p><p>9.<code>final</code> 修饰的成员变量必须在声明的同时赋值，如果在声明的时候没有赋值，那么只有 一次赋值的机会，而且只能在构造方法中显式赋值，然后才能使用。<code>final</code> 修饰的局部变量可以只声明不赋值，然后再进行一次性的赋值。</p><p>10.</p><table><thead><tr><th align="center">修饰符</th><th>可以被访问的类</th></tr></thead><tbody><tr><td align="center"><code>public</code></td><td>可以被三种类访问：同一个包的类、在其他包中的该类的子类，在其他包的非子类</td></tr><tr><td align="center"><code>protected</code></td><td>可以被两种类访问：同一个包的类、该类的所有子类</td></tr><tr><td align="center"><code>default</code></td><td>只能被在同一个包中的类访问</td></tr><tr><td align="center"><code>private</code></td><td>只能被该类自身所访问和修改</td></tr></tbody></table><p>11.系统会为源文件创建默认的包。</p><p>12.抽象类中的方法不一定都是抽象方法。</p><p>13.实现一个接口必须实现接口的所有方法。</p><p>14.<code>JFrame</code> 是一个顶层容器，默认布局是 <code>BorderLayout</code>  ，支持多线程，可以包含其他容器。</p><p>15.每一个 <code>Java</code> 线程可以看成由代码、一个虚拟的 <code>CPU</code> 以及数据三部分组成。</p><p>16.<code>Statement</code>执行 SQL语句的方法有：<code>xecuteQuery()，executeUpdate() ，execute()</code> 。</p><p>17.使用客户端套接字 <code>Socket</code> 创建对象时，需要指定服务器主机名称和端口。</p><hr><h2 id="选择题答案："><a href="#选择题答案：" class="headerlink" title="选择题答案："></a>选择题答案：</h2><p>1-5      <code>CDB[BD]B</code>   6-10      <code>ADCDB</code></p><p>11-15  <code>[AD]BDCB</code>       16-20    <code>CBADB</code></p><p>21-25  <code>CDCCD</code>       26-30    <code>CBBD</code> [无27]</p><p>31-35  <code>DBADD</code>  36-40    <code>ADCBA</code></p><p>41-45  <code>CCCBA</code>        46-50   <code>ADDAB</code></p><p>51-55  <code>BDBDD</code>       56-57   <code>AA</code></p><hr><h2 id="填空题答案："><a href="#填空题答案：" class="headerlink" title="填空题答案："></a>填空题答案：</h2><p>1.<u>java.lang</u></p><p>2.<u>length</u></p><p>3.<u>非运行时异常</u></p><p>4.<u>this</u></p><p>5.<u>4</u></p><p>6.<u>JVM</u></p><p>7.<u>Character</u></p><p>8.<u>非运行时异常</u></p><p>9.<u>内部类</u></p><p>10.<u>抽象方法</u></p><p>11.<u>synchronized</u></p><p>12.<u>BorderLayout</u></p><p>13.<u>BorderLayout</u></p><p>14.<u>FlowLayout</u></p><p>15.<u>File.separator</u></p><p>16.<u>ServerSocket</u></p><p>17.<u>DriverManager</u></p><p>18.<u>java.lang</u></p><p>19.<u>快</u></p><p>20.<u>标签</u></p><p>21.<u>端口</u></p><p>22.<u>JDBC</u></p><p>23.<u>Reader</u>,<u>Writer</u></p><p>24.<u>文件,目录</u></p><p>25.<u>GroupLayout</u></p><p>26.<u>ButtonGroup</u></p><p>27.<u>System.out,System.in</u></p><p>28.<u>IP 地址,端口号</u></p><p>29.<u>ResultSet,executeQuery()</u></p><hr><h2 id="程序填空"><a href="#程序填空" class="headerlink" title="程序填空"></a>程序填空</h2><p><img src="https://cdn.jsdelivr.net/gh/Harris-H/Harris-H.github.io/img/cxtk.png" alt="img"></p><hr><p>$Update:$ </p><p>17，53题已修正，A选项数字应为1。</p><p><strong>注：19年答案有两个题是错的。</strong></p><p>1.所有的异常类皆继承哪一个类？</p><p>答案应为：<code>Throwable</code>。</p><p>若题目改为直接继承，则答案为<code>Exception</code>。</p><p>$Update：2020.11.30$</p><p>11 是多选<code>AD</code>，<code>super</code>是关键字，标识符不能为关键字，<code>3_a</code>以数字开头，也不行。</p><p>44 已更正，选<code>B</code>，点击关闭按钮仅关闭窗口是<code>DISPOSE_ON_CLOSE</code>，而点击关闭窗口结束程序才是<code>EXIT_ON_CLOSE</code>。</p><p>2.以下哪个接口的定义是正确的？</p><p>这个题有几个不同的版本，实属有点烦，我来总结下。<br><code>B、 abstract interface B  { void print() ;}</code><br>这种接口的定义是不标准的，但是也是正确的，因为接口的默认修饰符是<code>public abstract</code>，所以省略$public$或者$abstract$也不会保存的，但是这是冗余的写法。</p><p>标准的写法：<code> interface B  { void print() ;}</code></p><p>如果单选题同时出现这两种，就选标准写法。</p><p><code>interface  B extends A1,A2{ }</code></p><p>接口是支持多继承的。</p><p><strong>原因</strong></p><blockquote><p>在Java类中，由于为了避免子类被引用的时候同一个方法无法判断应该使用哪个父类的方法，所以只能允许类单继承，但是，接口中的方法都是申明，都没有实现方法体。所以对于接口多继承接口后，如果接口中有系统的方法申明是没有关系的，最后只会保留一个。</p></blockquote><p>所以该选项是对的，如果单选题出现非标准写法选项和该选项，则选该选项，所以今年的题库$31$题正确的是<code>D</code>。</p><hr><p>程序填空，判断题，程序大题见往年答案，太忙了就不写了。</p><p>有错误请留言指出，也可以直接联系我。</p>]]></content>
      
      
      
        <tags>
            
            <tag> Java </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>1076 Forwards on Weibo (30分)</title>
      <link href="2020/11/24/pat-jia-1076/"/>
      <url>2020/11/24/pat-jia-1076/</url>
      
        <content type="html"><![CDATA[<h2 id="1076-Forwards-on-Weibo-30分"><a href="#1076-Forwards-on-Weibo-30分" class="headerlink" title="1076 Forwards on Weibo (30分)"></a>1076 Forwards on Weibo (30分)</h2><p>前言：一开始没看懂题目，我英文太差了，呜呜呜呜Wwwww。</p><p>题意：给定有向图，求从某一点出发距离不超过$l$的点的个数。</p><p>思路：与层数有关的题目用$bfs$更优，用$dfs$类似于跑最短路，统计时需要再遍历一遍。</p><p>$bfs$解法：</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>l<span class="token punctuation">,</span>q<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">struct</span> node<span class="token punctuation">{</span>    <span class="token keyword">int</span> u<span class="token punctuation">,</span>d<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">bfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> st<span class="token punctuation">)</span><span class="token punctuation">{</span>    queue<span class="token operator">&lt;</span>node<span class="token operator">></span>q<span class="token punctuation">;</span>    q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>st<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">int</span> s<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>u<span class="token punctuation">,</span>dis<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>d<span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"u=%d,dis=%d\n"</span><span class="token punctuation">,</span>u<span class="token punctuation">,</span>dis<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>dis<span class="token operator">></span>l<span class="token punctuation">)</span> <span class="token keyword">return</span> s<span class="token punctuation">;</span>        s<span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token punctuation">{</span>v<span class="token punctuation">,</span>dis<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span><span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>k<span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>k<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>e<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>q<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>q<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> st<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>st<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span><span class="token function">bfs</span><span class="token punctuation">(</span>st<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">mst</span><span class="token punctuation">(</span>vis<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>$dfs$解法:</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>l<span class="token punctuation">,</span>q<span class="token punctuation">,</span>s<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>d<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">>=</span>l<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">==</span>fa<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">></span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span> d<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span>d<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>l<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> k<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>k<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>k<span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>e<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>     <span class="token punctuation">}</span>    <span class="token keyword">int</span> q<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>q<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>q<span class="token operator">--</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> st<span class="token punctuation">;</span><span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>st<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">mst</span><span class="token punctuation">(</span>d<span class="token punctuation">,</span><span class="token number">0x3f</span><span class="token punctuation">)</span><span class="token punctuation">,</span>s<span class="token operator">=</span>d<span class="token punctuation">[</span>st<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span><span class="token function">dfs</span><span class="token punctuation">(</span>st<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>d<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">&lt;=</span>l<span class="token punctuation">)</span> s<span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>s<span class="token number">-1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
        <tags>
            
            <tag> 图论 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>取模意义的快速幂黑科技：龟速乘</title>
      <link href="2020/11/22/ksm-slowpow/"/>
      <url>2020/11/22/ksm-slowpow/</url>
      
        <content type="html"><![CDATA[<p><strong>一般的快速幂：</strong></p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">ksm</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll n<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll ans<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> ans<span class="token operator">=</span>ans<span class="token operator">*</span>a<span class="token operator">%</span>m<span class="token punctuation">;</span>        a<span class="token operator">=</span>a<span class="token operator">*</span>a<span class="token operator">%</span>m<span class="token punctuation">;</span>        n<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>这样会存在一个问题，当求$a^b\pmod{m}，$且$a&gt;10^9$时，会存在爆$long\ long$的问题，这时候我们需要对乘法取模进行改正，于是便有了龟速乘。</p><hr><p><strong>龟速乘：</strong></p><p>为什么要叫龟速乘呢，因为这个乘法运算比计算机底层的乘法速度要慢。<br>先看代码：</p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">qmul</span><span class="token punctuation">(</span>ll x<span class="token punctuation">,</span>ll y<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//龟速乘 </span>    ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>y<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">=</span><span class="token punctuation">(</span>s<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        x<span class="token operator">=</span><span class="token punctuation">(</span>x<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        y<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>形式与快速幂非常相似，只不过里面的乘法变成加法了，<br>比如$2\times 5= 2+2\times 4=2+4\times 2=2+8=10$。</p><p>时间复杂度：$O(logy)$</p><p>快速幂和龟速乘搭配一起就可以欢乐地进行模意义下的快速幂了。</p><p>复杂度：$O(logn\times log(a))$</p><pre class=" language-cpp"><code class="language-cpp">ll <span class="token function">qmul</span><span class="token punctuation">(</span>ll x<span class="token punctuation">,</span>ll y<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//龟速乘 </span>    ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>y<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">=</span><span class="token punctuation">(</span>s<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        x<span class="token operator">=</span><span class="token punctuation">(</span>x<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        y<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token comment" spellcheck="true">///////////////</span>ll <span class="token function">ksm</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll n<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll ans<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> ans<span class="token operator">=</span><span class="token function">qmul</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>a<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>        a<span class="token operator">=</span><span class="token function">qmul</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>a<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>        n<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><hr><h2 id="例题：-U55950-【模板】扩展欧拉定理"><a href="#例题：-U55950-【模板】扩展欧拉定理" class="headerlink" title="例题： U55950 【模板】扩展欧拉定理"></a>例题： U55950 【模板】扩展欧拉定理</h2><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e3</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">bool</span> f<span class="token punctuation">;</span><span class="token keyword">inline</span> <span class="token keyword">void</span> <span class="token function">read</span><span class="token punctuation">(</span>ll <span class="token operator">&amp;</span>s<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">int</span> w<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">char</span> c<span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>c<span class="token operator">=</span><span class="token function">getchar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token operator">!</span><span class="token function">isdigit</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>c<span class="token operator">==</span><span class="token string">'-'</span><span class="token punctuation">)</span> w<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token function">isdigit</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">)</span> s<span class="token operator">=</span><span class="token punctuation">(</span>s<span class="token operator">&lt;&lt;</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token punctuation">(</span>s<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token punctuation">(</span>c<span class="token operator">&amp;</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">,</span>c<span class="token operator">=</span><span class="token function">getchar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    s<span class="token operator">*</span><span class="token operator">=</span>w<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">inline</span> ll <span class="token function">readm</span><span class="token punctuation">(</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span><span class="token keyword">char</span> c<span class="token punctuation">;</span><span class="token keyword">while</span><span class="token punctuation">(</span>c<span class="token operator">=</span><span class="token function">getchar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token operator">!</span><span class="token function">isdigit</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token function">isdigit</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        s<span class="token operator">=</span><span class="token punctuation">(</span>s<span class="token operator">&lt;&lt;</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token punctuation">(</span>s<span class="token operator">&lt;&lt;</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token punctuation">(</span>c<span class="token operator">&amp;</span><span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>s<span class="token operator">>=</span>m<span class="token punctuation">)</span><span class="token punctuation">{</span>            s<span class="token operator">%</span><span class="token operator">=</span>m<span class="token punctuation">;</span>            f<span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">;</span>                <span class="token punctuation">}</span>        c<span class="token operator">=</span><span class="token function">getchar</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>ll <span class="token function">phi</span><span class="token punctuation">(</span>ll n<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll s<span class="token operator">=</span>n<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span>ll i<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">;</span>i<span class="token operator">*</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            s<span class="token operator">-</span><span class="token operator">=</span>s<span class="token operator">/</span>i<span class="token punctuation">;</span>            <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token operator">%</span>i<span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span> n<span class="token operator">/</span><span class="token operator">=</span>i<span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">-</span><span class="token operator">=</span>s<span class="token operator">/</span>n<span class="token punctuation">;</span><span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>ll <span class="token function">qmul</span><span class="token punctuation">(</span>ll x<span class="token punctuation">,</span>ll y<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//龟速乘 </span>    ll s<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>y<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>y<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> s<span class="token operator">=</span><span class="token punctuation">(</span>s<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        x<span class="token operator">=</span><span class="token punctuation">(</span>x<span class="token operator">+</span>x<span class="token punctuation">)</span><span class="token operator">%</span>m<span class="token punctuation">;</span>        y<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span>    <span class="token keyword">return</span> s<span class="token punctuation">;</span><span class="token punctuation">}</span>ll a<span class="token punctuation">,</span>m<span class="token punctuation">,</span>b<span class="token punctuation">;</span>ll <span class="token function">ksm</span><span class="token punctuation">(</span>ll a<span class="token punctuation">,</span>ll n<span class="token punctuation">,</span>ll m<span class="token punctuation">)</span><span class="token punctuation">{</span>    ll ans<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>n<span class="token operator">&amp;</span><span class="token number">1</span><span class="token punctuation">)</span> ans<span class="token operator">=</span><span class="token function">qmul</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>a<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>        a<span class="token operator">=</span><span class="token function">qmul</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>a<span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>        n<span class="token operator">>>=</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">read</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token function">read</span><span class="token punctuation">(</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>ll phim<span class="token operator">=</span><span class="token function">phi</span><span class="token punctuation">(</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>b<span class="token operator">=</span><span class="token function">readm</span><span class="token punctuation">(</span>phim<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%lld\n"</span><span class="token punctuation">,</span><span class="token function">ksm</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token operator">+</span><span class="token punctuation">(</span>f<span class="token operator">?</span>phim<span class="token operator">:</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">,</span>m<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
    </entry>
    
    
    
    <entry>
      <title>Tarjan的学习</title>
      <link href="2020/11/22/tarjan-study/"/>
      <url>2020/11/22/tarjan-study/</url>
      
        <content type="html"><![CDATA[<p>$Tarjan$是图论中求解关于图的连通性的相关问题的算法，$Tarjan$基于深搜$dfs$实现。</p><p>利用两个关键数组：$dfn[],low[]$。</p><p>$dfn[i]:$结点$i$的时间戳。</p><p>$low[i]:$结点$i$所能遍历的所有结点的最小$dfn$，可以类比并查集的$fa[i]$理解。</p><p>$id:$当前时间。</p><p>每次我们从一个结点$u$开始搜索，我们结点$u$能遍历到的所有结点组成的树成为结点$u$的搜索树，同时我们利用栈来保存处于同一个强连通分量的结点。</p><hr><p>算法的流程：</p><p>1.每次搜索到一个结点$u$，先初始化$dfn[u]=low[u]=++id$，然后结点$u$入栈。</p><p>2.然后依次遍历结点$u$的子树$v$，如果该点没有搜索过即$(!dfn[v])$就$dfs(v)$，然后更新$low[u]=min(low[u],low[v])$。</p><p>3.如果结点$v$搜索过且在栈中，说明该节点$v$可能是潜在的连通块的根，更新$low[u]=min(low[u],dfn[v])$，这里使用$dfn[v]$，因为$v$有可能属于别的连通块了。</p><p>4.搜索完$u$的所有能遍历的结点后，判断$dfn[u]=low[u]$，如果相等说明$u$是强连通分量的一个根，此时属于这个强连通分量的所有结点的$low[v]=low[u]$，然后回溯栈中所有节点染色为同一个连通块，同时可以统计该连通块的个数。</p><p>时间复杂度：$O(E+V)$</p><hr><p>$Tarjan$能解决的一些问题：</p><p>1.判断图是否连通。<br>2.判断图的连通分量个数。<br>3.判断每个连通分量的结点数。<br>4.缩点，将<strong>有向有环图</strong>(无向有环图的一条边可等价为两个有向边)转换为<strong>有向无环图$(DAG)$</strong><br>5.找到所有缩点，缩边。<br>6.求删去一个结点后图的连通分量个数，即判断每个点的缩边个数。<br>7.缩点后建立$DAG$，实现拓扑排序，树形$dp$，点权和状态转移等操作。<br>8.求缩点后新图的点出度，入度情况。<br>$\dots\dots$<br>模板：</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>id<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>ans<span class="token punctuation">,</span>col<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>num<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>sum<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>  <span class="token comment" spellcheck="true">//dfs[i]记录结点i遍历顺序,low[i]记录结点i及其子结点最小遍历顺序,vis[i]标记是否在栈中。 </span>stack<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>s<span class="token punctuation">;</span>        <span class="token comment" spellcheck="true">//col[i]记录结点i属于那个连通块(本题没用),num[i]记录第i个连通块的结点数. </span><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">)</span><span class="token punctuation">{</span>     dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span><span class="token comment" spellcheck="true">//记录dfs顺序 </span>     s<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//入栈 </span>     vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//标记入栈. </span>     <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">auto</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>          <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">//没有遍历的点进行遍历然后更新low </span>                low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>          <span class="token punctuation">}</span>          <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment" spellcheck="true">//如果已经遍历过而且在栈中 则取low较小值(这里是潜在的连通块) </span>     <span class="token punctuation">}</span>     <span class="token keyword">if</span><span class="token punctuation">(</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">==</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment" spellcheck="true">//该点是连通块的"根"  注意孤立点也是连通块. </span>         vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>   <span class="token comment" spellcheck="true">//回溯标记，并染色. </span>         col<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>sum<span class="token punctuation">;</span>         num<span class="token punctuation">[</span>sum<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>         <span class="token keyword">while</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">!=</span>u<span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment" spellcheck="true">//依次出栈. </span>             col<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span>sum<span class="token punctuation">;</span>              vis<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>              s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>              num<span class="token punctuation">[</span>sum<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>         <span class="token punctuation">}</span>         s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>     <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>求割点，只需要判断$low[v]\ge dfn[u]$即可，因为如果满足的话，显然去掉$u$后就不能访问$v$子树了，所以$u$就是割点，$edge(u,v)$就是割边。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>i<span class="token punctuation">;</span>i<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nt<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> v<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>to<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">>=</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> cut<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">//关键</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">!=</span>fa<span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><hr><h2 id="1-POJ-2117​"><a href="#1-POJ-2117​" class="headerlink" title="1.POJ 2117​"></a>1.POJ 2117​</h2><p>无向图删去后一个点后的最多连通分量数。<br>思路：以$i$为根依次进行搜索，记录该点的割边数$cut[i]$，如果$cut[i]=0$，说明它是孤立点，删去它后贡献减1，如果$cut[i]=1$且它只有一个儿子，删去它后，连通分量个数还是$1$，贡献也是$cut[i]-1$，若$cut[i]&gt;1$，且$i$为根，则新增的连通分量数$cut[i]-1$，因为不包括自身的连通分量。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>i<span class="token punctuation">;</span>i<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nt<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> v<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>to<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">>=</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> cut<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">!=</span>fa<span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>u<span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token function">add</span><span class="token punctuation">(</span>u<span class="token punctuation">,</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> tot<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>mx<span class="token operator">=</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">,</span>tot<span class="token operator">++</span><span class="token punctuation">,</span>cut<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d "</span><span class="token punctuation">,</span>tot<span class="token operator">+</span>cut<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h2 id="2-2020ICPC网络赛-D-Router-Mesh"><a href="#2-2020ICPC网络赛-D-Router-Mesh" class="headerlink" title="2. 2020ICPC网络赛 D.Router Mesh"></a>2. 2020ICPC网络赛 D.Router Mesh</h2><p>题意：给定无向图，求删去每个结点后的连通分量数。<br>思路：利用上题的方法求出$cut[i]$，然后用原连通分量数$tot+cut[i]$即可。</p><h2 id="3-POJ-2553"><a href="#3-POJ-2553" class="headerlink" title="3.POJ 2553"></a>3.POJ 2553</h2><p>题意：求有向图缩点后连通分量没有出度的点。</p><p>思路：$tarjan$缩点给连通块染色，然后判断每条边$edge(u,v)$的$bl[u]$是否等于$bl[v]$，如果不相等说明结点$bl[u]$这个连通分量有出度，最后输出$bl[u]=0$的点即可。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator">&lt;</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> v<span class="token operator">=</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">==</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>tot<span class="token punctuation">,</span>vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>            <span class="token keyword">while</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">!=</span>u<span class="token punctuation">)</span><span class="token punctuation">{</span>                vis<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>bl<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span>tot<span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>            s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span><span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>u<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>u<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> j<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>j<span class="token operator">&lt;</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>j<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">!=</span>bl<span class="token punctuation">[</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                chu<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">;</span><span class="token keyword">break</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>            <span class="token punctuation">}</span>     <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>chu<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d "</span><span class="token punctuation">,</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h2 id="4-10103-「一本通-3-6-练习-4」电力"><a href="#4-10103-「一本通-3-6-练习-4」电力" class="headerlink" title="4.10103. 「一本通 3.6 练习 4」电力"></a>4.10103. 「一本通 3.6 练习 4」电力</h2><p>跟$POJ2117$ 一样的，不写了。</p><h2 id="5-P3388"><a href="#5-P3388" class="headerlink" title="5.P3388"></a>5.P3388</h2><p>求无向图的割点。<br>注意：结点为根且儿子只有一个不是割点。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    <span class="token comment" spellcheck="true">//s.push(u);</span>    <span class="token keyword">int</span> son<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span>h<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>i<span class="token punctuation">;</span>i<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>nt<span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> v<span class="token operator">=</span>e<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">.</span>to<span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            son<span class="token operator">++</span><span class="token punctuation">;</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">>=</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> cut<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>v<span class="token operator">!=</span>fa<span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>fa<span class="token operator">&lt;</span><span class="token number">0</span><span class="token operator">&amp;&amp;</span>son<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span> cut<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token comment" spellcheck="true">//结点u为树根 且只有一个儿子 </span><span class="token punctuation">}</span></code></pre><h2 id="6-P2863-USACO06JAN-The-Cow-Prom-S"><a href="#6-P2863-USACO06JAN-The-Cow-Prom-S" class="headerlink" title="6.P2863 [USACO06JAN]The Cow Prom S"></a>6.P2863 [USACO06JAN]The Cow Prom S</h2><p>直接一遍搜然后统计$cnt$即可。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">==</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token comment" spellcheck="true">//统计cnt>1 即为结点个数大于1的强连通分量 </span>        <span class="token keyword">int</span> cnt<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>         vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">!=</span>u<span class="token punctuation">)</span><span class="token punctuation">{</span>            cnt<span class="token operator">++</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span>cnt<span class="token operator">></span><span class="token number">1</span><span class="token punctuation">)</span> ans<span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h2 id="7-P3387-【模板】缩点"><a href="#7-P3387-【模板】缩点" class="headerlink" title="7.P3387 【模板】缩点"></a>7.P3387 【模板】缩点</h2><p>思路：缩点转$DAG$图跑$dp$或者拓扑即可。</p><p>$dp$写法：</p><pre class=" language-cpp"><code class="language-cpp"><span class="token macro property">#<span class="token directive keyword">include</span><span class="token string">&lt;bits/stdc++.h></span></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">typedef</span> <span class="token keyword">long</span> <span class="token keyword">long</span> ll<span class="token punctuation">;</span><span class="token keyword">const</span> <span class="token keyword">int</span> N<span class="token operator">=</span><span class="token number">1e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>M<span class="token operator">=</span><span class="token number">2e4</span><span class="token operator">+</span><span class="token number">5</span><span class="token punctuation">,</span>inf<span class="token operator">=</span><span class="token number">0x3f3f3f3f</span><span class="token punctuation">,</span>mod<span class="token operator">=</span><span class="token number">1e9</span><span class="token operator">+</span><span class="token number">7</span><span class="token punctuation">;</span><span class="token macro property">#<span class="token directive keyword">define</span> mst(a,b) memset(a,b,sizeof a)</span><span class="token macro property">#<span class="token directive keyword">define</span> PII pair&lt;int,int></span><span class="token macro property">#<span class="token directive keyword">define</span> fi first</span><span class="token macro property">#<span class="token directive keyword">define</span> se second</span><span class="token macro property">#<span class="token directive keyword">define</span> pb push_back</span><span class="token keyword">int</span> n<span class="token punctuation">,</span>m<span class="token punctuation">,</span>id<span class="token punctuation">,</span>cnt<span class="token punctuation">;</span><span class="token keyword">int</span> a<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>vis<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>bl<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>b<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>vector<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>e<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">,</span>ne<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span>stack<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>s<span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">dfs</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">,</span><span class="token keyword">int</span> fa<span class="token punctuation">)</span><span class="token punctuation">{</span>    dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>id<span class="token punctuation">;</span>    vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">dfs</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span>u<span class="token punctuation">)</span><span class="token punctuation">;</span>            low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>low<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span>vis<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">min</span><span class="token punctuation">(</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">,</span>dfn<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>dfn<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">==</span>low<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token operator">++</span>cnt<span class="token punctuation">,</span>b<span class="token punctuation">[</span>cnt<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span>         vis<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token keyword">while</span><span class="token punctuation">(</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">!=</span>u<span class="token punctuation">)</span><span class="token punctuation">{</span>            vis<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>bl<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token operator">=</span>cnt<span class="token punctuation">,</span>b<span class="token punctuation">[</span>cnt<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>a<span class="token punctuation">[</span>s<span class="token punctuation">.</span><span class="token function">top</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span>s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>        s<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token keyword">int</span> f<span class="token punctuation">[</span>N<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">void</span> <span class="token function">fun</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>f<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>    f<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>b<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">int</span> mx<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>ne<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>f<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token function">fun</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>        mx<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>mx<span class="token punctuation">,</span>f<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    f<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span><span class="token operator">=</span>mx<span class="token punctuation">;</span><span class="token punctuation">}</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>n<span class="token punctuation">,</span><span class="token operator">&amp;</span>m<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>a<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span>u<span class="token punctuation">,</span>v<span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>m<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token function">scanf</span><span class="token punctuation">(</span><span class="token string">"%d%d"</span><span class="token punctuation">,</span><span class="token operator">&amp;</span>u<span class="token punctuation">,</span><span class="token operator">&amp;</span>v<span class="token punctuation">)</span><span class="token punctuation">,</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>dfn<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token function">dfs</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>u<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>u<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">!=</span>bl<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                ne<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">pb</span><span class="token punctuation">(</span>bl<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token function">fun</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span>            ans<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>ans<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>拓扑写法：</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">int</span> <span class="token function">topo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    queue<span class="token operator">&lt;</span><span class="token keyword">int</span><span class="token operator">></span>q<span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>in<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">,</span>f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>b<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>    <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token operator">!</span>q<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">int</span> u<span class="token operator">=</span>q<span class="token punctuation">.</span><span class="token function">front</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>q<span class="token punctuation">.</span><span class="token function">pop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>ne<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            in<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">--</span><span class="token punctuation">;</span>            f<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>f<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">,</span>f<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">+</span>b<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>            <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>in<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span> q<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> ans<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span>  ans<span class="token operator">=</span><span class="token function">max</span><span class="token punctuation">(</span>ans<span class="token punctuation">,</span>f<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">return</span> ans<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h2 id="8-P2341-HAOI2006-受欢迎的牛-G"><a href="#8-P2341-HAOI2006-受欢迎的牛-G" class="headerlink" title="8. P2341 HAOI2006 受欢迎的牛 G"></a>8. P2341 HAOI2006 受欢迎的牛 G</h2><p>思路：有向图先缩点，然后判断每个点出度是否为0，如果出现一个以上的点出度为0，说明不可能有能被所有其他点遍历的点，否则那个一点肯定是能被其他点遍历到的点，因为其他点一直有出度可以出去，直到找到那个点就停止。</p><pre class=" language-cpp"><code class="language-cpp"><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>u<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>u<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">!=</span>bl<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                out<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> f<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>f<span class="token operator">&amp;&amp;</span><span class="token operator">!</span>out<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            f<span class="token operator">=</span>i<span class="token punctuation">;</span>        <span class="token punctuation">}</span>        <span class="token keyword">else</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>out<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">return</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"0\n"</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">;</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span></code></pre><h2 id="9-P2746-USACO5-3-校园网Network-of-Schools"><a href="#9-P2746-USACO5-3-校园网Network-of-Schools" class="headerlink" title="9.P2746 [USACO5.3]校园网Network of Schools"></a>9.P2746 [USACO5.3]校园网Network of Schools</h2><p>思路：任务$A$答案就是入度为$0$的点，因为这些点不能由其他点分发过来，<br>任务$B$就是取入度为0点的个数和出度为0的点个数的最大值，但是需要注意的是如果图本身是一个环的话就不需要再扩展了。</p><pre class=" language-cpp"><code class="language-cpp">    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> u<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>u<span class="token operator">&lt;=</span>n<span class="token punctuation">;</span>u<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> v<span class="token operator">:</span>e<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>            <span class="token keyword">if</span><span class="token punctuation">(</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token operator">!=</span>bl<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">{</span>                in<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>v<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">,</span>out<span class="token punctuation">[</span>bl<span class="token punctuation">[</span>u<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token operator">++</span><span class="token punctuation">;</span>            <span class="token punctuation">}</span>        <span class="token punctuation">}</span>    <span class="token punctuation">}</span>    <span class="token keyword">int</span> tot<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">,</span>tmp<span class="token operator">=</span><span class="token number">0</span><span class="token punctuation">;</span>    <span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator">&lt;=</span>cnt<span class="token punctuation">;</span>i<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>in<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> tot<span class="token operator">++</span><span class="token punctuation">;</span>        <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>out<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> tmp<span class="token operator">++</span><span class="token punctuation">;</span>    <span class="token punctuation">}</span>    <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span>tot<span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">if</span><span class="token punctuation">(</span>cnt<span class="token operator">==</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"0\n"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token keyword">else</span> <span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"%d\n"</span><span class="token punctuation">,</span><span class="token function">max</span><span class="token punctuation">(</span>tot<span class="token punctuation">,</span>tmp<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>]]></content>
      
      
      <categories>
          
          <category> 图论 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> tarjan </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>我的博客要搬家了</title>
      <link href="2020/11/22/moving-home/"/>
      <url>2020/11/22/moving-home/</url>
      
        <content type="html"><![CDATA[<h1 id="我的博客准备搬家了"><a href="#我的博客准备搬家了" class="headerlink" title="我的博客准备搬家了"></a>我的博客准备搬家了</h1><p><strong>hexo</strong>真是太好玩了，继续$Working$中。</p><pre class=" language-cpp"><code class="language-cpp">include<span class="token operator">&lt;</span>bits<span class="token operator">/</span>stdc<span class="token operator">++</span><span class="token punctuation">.</span>h<span class="token operator">></span><span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span><span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre>]]></content>
      
      
      
    </entry>
    
    
  
  
</search>
