<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>gyro永不抽风</title>
  
  <subtitle>ああああああああああああああああおおおおおおおおおおおおおおおお</subtitle>
  <link href="http://gyrojeff.moe/atom.xml" rel="self"/>
  
  <link href="http://gyrojeff.moe/"/>
  <updated>2020-11-19T16:12:27.000Z</updated>
  <id>http://gyrojeff.moe/</id>
  
  <author>
    <name>Haoyun Qin</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>感谢陪伴，完结撒花</title>
    <link href="http://gyrojeff.moe/2020/11/19/%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4%EF%BC%8C%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1/"/>
    <id>http://gyrojeff.moe/2020/11/19/%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4%EF%BC%8C%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1/</id>
    <published>2020-11-19T15:44:01.000Z</published>
    <updated>2020-11-19T16:12:27.000Z</updated>
    
    <content type="html"><![CDATA[<p>感谢这个博客，</p><p>感谢没有冒号的拍拍二次元人们，</p><p>一起撑过了2020这艰难的一年的大部分时间。</p><p>2020-03 ~ 2020-11</p><p>奶茶铺结束营业咯（（</p><p>新店就开在隔壁：<a href="gyrojeff.top">gyrojeff.top</a></p><p>老的烦心事就不再迁移了</p><p>过段时间把技术文章慢慢迁…咕咕咕///</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;感谢这个博客，&lt;/p&gt;
&lt;p&gt;感谢没有冒号的拍拍二次元人们，&lt;/p&gt;
&lt;p&gt;一起撑过了2020这艰难的一年的大部分时间。&lt;/p&gt;
&lt;p&gt;2020-03 ~ 2020-11&lt;/p&gt;
&lt;p&gt;奶茶铺结束营业咯（（&lt;/p&gt;
&lt;p&gt;新店就开在隔壁：&lt;a href=&quot;gyrojeff.</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="博客" scheme="http://gyrojeff.moe/tags/%E5%8D%9A%E5%AE%A2/"/>
    
  </entry>
  
  <entry>
    <title>Docker常用命令与部署MySQL</title>
    <link href="http://gyrojeff.moe/2020/11/13/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E4%B8%8E%E9%83%A8%E7%BD%B2MySQL/"/>
    <id>http://gyrojeff.moe/2020/11/13/Docker%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E4%B8%8E%E9%83%A8%E7%BD%B2MySQL/</id>
    <published>2020-11-13T15:31:34.000Z</published>
    <updated>2020-11-13T15:32:07.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="使用Docker直接部署MySQL"><a href="#使用Docker直接部署MySQL" class="headerlink" title="使用Docker直接部署MySQL"></a>使用Docker直接部署MySQL</h1><p>拉取官方最新的MySQL镜像：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker pull mysql:latest</span><br></pre></td></tr></table></figure><p>运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker run --name &lt;name&gt; -e MY_ROOT_PASSWORD=&lt;root_password&gt; -p &lt;port&gt;:3306 -d mysql:&lt;tag&gt;</span><br></pre></td></tr></table></figure><p>其中：</p><ul><li><code>&lt;name&gt;</code>填入容器的命名</li><li><code>&lt;root_password&gt;</code>填入数据库<code>root</code>用户的密码</li><li><code>&lt;port&gt;</code>填入想要对外映射的端口</li><li><code>&lt;tag&gt;</code>是镜像的版本号，建议填<code>latest</code></li></ul><p>传送门：<a href="https://hub.docker.com/r/library/mysql/">https://hub.docker.com/r/library/mysql/</a></p><h1 id="Docker的一些常用命令"><a href="#Docker的一些常用命令" class="headerlink" title="Docker的一些常用命令"></a>Docker的一些常用命令</h1><p>查看所有Docker:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker ps -a</span><br></pre></td></tr></table></figure><p>删除一个容器：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker rm &lt;name&gt;</span><br></pre></td></tr></table></figure><p>停止：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker stop &lt;name&gt;</span><br></pre></td></tr></table></figure><p>暂停：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker pause &lt;name&gt;</span><br></pre></td></tr></table></figure><p>重启：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker restart &lt;name&gt;</span><br></pre></td></tr></table></figure><p>让容器执行命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker <span class="built_in">exec</span> -it &lt;name&gt; &lt;<span class="built_in">exec</span>&gt;</span><br></pre></td></tr></table></figure><p>其中：</p><ul><li><code>&lt;name&gt;</code>是容器名称</li><li><code>&lt;exec&gt;</code>是命令</li><li><p><code>-it</code>的官方解释：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">-d, --detach               Detached mode: run command in the background</span><br><span class="line">    --detach-keys string   Override the key sequence for detaching a container</span><br><span class="line">-e, --env list             Set environment variables</span><br><span class="line">-i, --interactive          Keep STDIN open even if not attached</span><br><span class="line">    --privileged           Give extended privileges to the command</span><br><span class="line">-t, --tty                  Allocate a pseudo-TTY</span><br><span class="line">-u, --user string          Username or UID (format: &lt;name|uid&gt;[:&lt;group|gid&gt;])</span><br><span class="line">-w, --workdir string       Working directory inside the container</span><br></pre></td></tr></table></figure><p>所以进入容器其实可以直接 (如果对方有<code>/bin/bash</code>)：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker <span class="built_in">exec</span> -it &lt;name&gt; /bin/bash</span><br></pre></td></tr></table></figure></li></ul><p>其余的请直接查看help:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker --<span class="built_in">help</span></span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker &lt;<span class="built_in">exec</span>&gt; --<span class="built_in">help</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;使用Docker直接部署MySQL&quot;&gt;&lt;a href=&quot;#使用Docker直接部署MySQL&quot; class=&quot;headerlink&quot; title=&quot;使用Docker直接部署MySQL&quot;&gt;&lt;/a&gt;使用Docker直接部署MySQL&lt;/h1&gt;&lt;p&gt;拉取官方最新的MyS</summary>
      
    
    
    
    <category term="Docker" scheme="http://gyrojeff.moe/categories/Docker/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Docker" scheme="http://gyrojeff.moe/tags/Docker/"/>
    
    <category term="MySQL" scheme="http://gyrojeff.moe/tags/MySQL/"/>
    
  </entry>
  
  <entry>
    <title>Docker安装及镜像加速</title>
    <link href="http://gyrojeff.moe/2020/11/13/Docker%E5%AE%89%E8%A3%85%E5%8F%8A%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F/"/>
    <id>http://gyrojeff.moe/2020/11/13/Docker%E5%AE%89%E8%A3%85%E5%8F%8A%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F/</id>
    <published>2020-11-13T15:24:51.000Z</published>
    <updated>2021-01-02T15:32:17.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="安装Docker"><a href="#安装Docker" class="headerlink" title="安装Docker"></a>安装Docker</h1><h2 id="卸载旧版本"><a href="#卸载旧版本" class="headerlink" title="卸载旧版本"></a>卸载旧版本</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get remove docker docker-engine docker.io containerd runc</span><br></pre></td></tr></table></figure><h2 id="设置仓库"><a href="#设置仓库" class="headerlink" title="设置仓库"></a>设置仓库</h2><p>安装apt依赖包：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install \</span><br><span class="line">    apt-transport-https \</span><br><span class="line">    ca-certificates \</span><br><span class="line">    curl \</span><br><span class="line">    gnupg-agent \</span><br><span class="line">    software-properties-common</span><br></pre></td></tr></table></figure><p>添加官方GPG密钥：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -</span><br></pre></td></tr></table></figure><p>9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符，验证您现在是否拥有带有指纹的密钥。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ sudo apt-key fingerprint 0EBFCD88</span><br><span class="line">   </span><br><span class="line">pub   rsa4096 2017-02-22 [SCEA]</span><br><span class="line">      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88</span><br><span class="line">uid           [ unknown] Docker Release (CE deb) &lt;docker@docker.com&gt;</span><br><span class="line">sub   rsa4096 2017-02-22 [S]</span><br></pre></td></tr></table></figure><p>使用以下指令设置稳定版仓库</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo add-apt-repository \</span><br><span class="line">   <span class="string">&quot;deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \</span></span><br><span class="line"><span class="string">  <span class="subst">$(lsb_release -cs)</span> \</span></span><br><span class="line"><span class="string">  stable&quot;</span></span><br></pre></td></tr></table></figure><h2 id="安装-Docker-Engine-Community"><a href="#安装-Docker-Engine-Community" class="headerlink" title="安装 Docker Engine-Community"></a>安装 Docker Engine-Community</h2><p>更新 apt 包索引。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update</span><br></pre></td></tr></table></figure><p>安装最新版本的 Docker Engine-Community 和 containerd:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install docker-ce docker-ce-cli containerd.io</span><br></pre></td></tr></table></figure><h1 id="Docker换源"><a href="#Docker换源" class="headerlink" title="Docker换源"></a>Docker换源</h1><ol><li>先进入阿里云开发社区,并找到控制台：<a href="https://developer.aliyun.com/">https://developer.aliyun.com/</a></li><li>搜索容器镜像服务：<img src="/2020/11/13/Docker%E5%AE%89%E8%A3%85%E5%8F%8A%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F/2.jpg" class=""></li><li>按照图片当中的做：<img src="/2020/11/13/Docker%E5%AE%89%E8%A3%85%E5%8F%8A%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F/3.jpg" class=""></li></ol><p>确认成功的方法：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo docker info</span><br></pre></td></tr></table></figure><br>观察最后几行当中Registry Mirrors有没有出现。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;安装Docker&quot;&gt;&lt;a href=&quot;#安装Docker&quot; class=&quot;headerlink&quot; title=&quot;安装Docker&quot;&gt;&lt;/a&gt;安装Docker&lt;/h1&gt;&lt;h2 id=&quot;卸载旧版本&quot;&gt;&lt;a href=&quot;#卸载旧版本&quot; class=&quot;headerlink</summary>
      
    
    
    
    <category term="Docker" scheme="http://gyrojeff.moe/categories/Docker/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Docker" scheme="http://gyrojeff.moe/tags/Docker/"/>
    
    <category term="Alibaba" scheme="http://gyrojeff.moe/tags/Alibaba/"/>
    
  </entry>
  
  <entry>
    <title>腾讯云搭建Typecho博客</title>
    <link href="http://gyrojeff.moe/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/"/>
    <id>http://gyrojeff.moe/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/</id>
    <published>2020-11-13T09:08:20.000Z</published>
    <updated>2021-01-02T15:32:10.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="购买"><a href="#购买" class="headerlink" title="购买"></a>购买</h1><p>趁着双十一，租了腾讯云3年的VPS，这个价钱是真的够便宜的了（确信）。</p><h1 id="安装系统"><a href="#安装系统" class="headerlink" title="安装系统"></a>安装系统</h1><p>我选择的是Ubuntu 18.04 LTS，腾讯云的控制台当中可以选择重装。</p><blockquote><p>提醒：由于我当时不停得重装系统（自己菜），所以<code>ssh</code>有的时候连接会出现问题：</p><p>“IT’S POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!!!”</p><p>确实，NASTY是我本人了。这个时候你只需要在你的本地执行：</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo rm ~/.ssh/known_hosts</span><br></pre></td></tr></table></figure><p>这样可以删除你的所有连接信息，不会报错。</p><h1 id="换源"><a href="#换源" class="headerlink" title="换源"></a>换源</h1><p>首先<code>ssh</code>连接VPS，然后进行<code>super cow power</code>的<code>apt</code>换源（大雾），其中我用的是阿里云的源</p><blockquote><p>人是腾讯人，心是阿里心<br>（大雾）</p></blockquote><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo rm /etc/apt/sources.list</span><br><span class="line">sudo vim /etc/apt/sources.list</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 阿里源</span></span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span><br></pre></td></tr></table></figure><p>更新：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt update &amp;&amp; sudo apt upgrade</span><br></pre></td></tr></table></figure></p><p>其中可能会碰到如下情况：</p><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/1.jpg" class=""><p>选择第一个安装新版。</p><h1 id="搭建LAMP"><a href="#搭建LAMP" class="headerlink" title="搭建LAMP"></a>搭建LAMP</h1><blockquote><p>LAMP: Linux, Apache, MySQL, PHP</p></blockquote><p>安装<code>Apache2</code>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install apache2</span><br></pre></td></tr></table></figure><p>安装<code>PHP</code>:</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install php php-dev php-curl php-pear php-mysql libapache2-mod-php php-mbstring</span><br></pre></td></tr></table></figure><h1 id="部署Typecho"><a href="#部署Typecho" class="headerlink" title="部署Typecho"></a>部署Typecho</h1><p>官网：<a href="http://typecho.org/download">http://typecho.org/download</a></p><p>不管通过什么东西，让下载下来，解压好，<code>build</code>目录中的所有文件，出现在<code>/var/www</code>当中</p><ul><li>鄙人由于不精通命令行，所以本机下载然后解压然后通过sftp的方式传过去</li><li>方法很多，不用拘泥</li></ul><h1 id="配置Apache2服务器"><a href="#配置Apache2服务器" class="headerlink" title="配置Apache2服务器"></a>配置Apache2服务器</h1><p>根据前面的保存的路径修改配置文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo vim /etc/apache2/sites-available/000-default.conf</span><br></pre></td></tr></table></figure><p>修改：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;VirtualHost *:80&gt;</span><br><span class="line">...</span><br><span class="line">        ServerAdmin webmaster@localhost</span><br><span class="line">        DocumentRoot &#x2F;var&#x2F;www# 原来：&#x2F;var&#x2F;www&#x2F;html</span><br></pre></td></tr></table></figure><h1 id="安装MySQL"><a href="#安装MySQL" class="headerlink" title="安装MySQL"></a>安装MySQL</h1><p>由于安装过程中不一定要求输入密码，所以可能已经生成好了默认密码。打开：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo vim /etc/mysql/debian.cnf</span><br></pre></td></tr></table></figure><p>这里面有用户名和密码，用<code>debian-sys-maint</code>登录<code>MySQL</code>: </p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql -u debian-sys-maint -p</span><br></pre></td></tr></table></figure><p>修改<code>root</code>账号密码：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">update</span> mysql.user <span class="keyword">set</span> authentication_string=<span class="keyword">password</span>(<span class="string">&#x27;&lt;your_pwd&gt;&#x27;</span>) <span class="keyword">where</span> <span class="keyword">user</span>=<span class="string">&#x27;root&#x27;</span> <span class="keyword">and</span> Host =<span class="string">&#x27;localhost&#x27;</span>;</span><br></pre></td></tr></table></figure><p>防止登录密码失效：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">use</span> mysql;</span><br><span class="line"><span class="keyword">update</span> <span class="keyword">user</span> <span class="keyword">set</span> <span class="keyword">plugin</span>=<span class="string">&quot;mysql_native_password&quot;</span>;</span><br></pre></td></tr></table></figure><p>刷新，退出：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">flush</span> <span class="keyword">privileges</span>;</span><br><span class="line">quit;</span><br></pre></td></tr></table></figure><p>重启服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo service mysql restart</span><br></pre></td></tr></table></figure><h1 id="Navicat登录MySQL"><a href="#Navicat登录MySQL" class="headerlink" title="Navicat登录MySQL"></a>Navicat登录MySQL</h1><p>目前我只有在SSH的情况下成功登录了MySQL，原因不明。</p><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/7.jpg" class=""><p>然后选到<code>mysql</code>，找到<code>user</code>，接下来那个原始账号想删就能删了。</p><h1 id="部署SSL"><a href="#部署SSL" class="headerlink" title="部署SSL"></a>部署SSL</h1><p>由于我也购买了腾讯云的域名（第一年只要4块！！！往后只要25块！！！）所以可以直接在腾讯云申请SSL。</p><p>腾讯免费ssl证书获取链接：<a href="https://console.cloud.tencent.com/ssl">https://console.cloud.tencent.com/ssl</a></p><p>按照要求填写，然后第二步认证直接采用推荐方式，这样就可以直接配置好NameServer，不用自己操心。等到审核成功之后：</p><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/4.jpg" class=""><p>会自动出现TXT记录。</p><p>接下来，我们将审核通过的证书加载下来（右侧有下载按钮）：</p><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/5.jpg" class=""><p>解压之后会有以下几种类型web服务器的证书，选择<code>Apache</code>，可以看到里面包含三个文件：</p><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/6.jpg" class=""><p>将它们上传到VPS的<code>/etc/httpd/ssl</code>目录（其实并非非他不可，但我懒了）。</p><p>然后，开启<code>ssl</code>模块：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo a2enmod ssl</span><br></pre></td></tr></table></figure><p>查看<code>/etc/apache2/ports.conf</code>文件中，是不是包含（没有的话，添加）</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Listen 80</span><br><span class="line">Listen 443</span><br></pre></td></tr></table></figure><p>接着我们需要创建软连接，同时删除<code>/etc/apache2/sites-enabled/site-enabled</code>目录下的<code>000-default.conf</code>链接文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf</span><br><span class="line">sudo rm /etc/apache2/sites-enabled/000-default.conf</span><br></pre></td></tr></table></figure><p>接着配置<code>default-ssl.conf</code>这个文件</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo vim /etc/apache2/sites-enabled/default-ssl.conf</span><br></pre></td></tr></table></figure><img src="/2020/11/13/%E8%85%BE%E8%AE%AF%E4%BA%91%E6%90%AD%E5%BB%BATypecho%E5%8D%9A%E5%AE%A2/8.jpg" class=""><p>（懂我意思就好）（小声）</p><p>接着我们配置<code>http</code>重定向为<code>https</code></p><p>开启<code>rewrite</code>模块：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo a2enmod rewrite </span><br></pre></td></tr></table></figure><p>接着配置<code>/etc/apache2/apache2.conf</code>文件，在文件的末尾添加:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;Directory &quot;&#x2F;var&#x2F;www&quot;&gt;</span><br><span class="line">  # 新增</span><br><span class="line">  RewriteEngine on</span><br><span class="line">  RewriteCond %&#123;SERVER_PORT&#125; !^443$</span><br><span class="line">  RewriteRule ^(.*)?$ https:&#x2F;&#x2F;%&#123;SERVER_NAME&#125;%&#123;REQUEST_URI&#125; [L,R]</span><br><span class="line">&lt;&#x2F;Directory&gt;</span><br></pre></td></tr></table></figure><p>这样就可以让<code>http</code>自动跳转到<code>https</code>。</p><p>最后重启<code>Apache2</code>服务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo service apache2 restart</span><br></pre></td></tr></table></figure><h1 id="安装Typecho"><a href="#安装Typecho" class="headerlink" title="安装Typecho"></a>安装Typecho</h1><p>进入博客所在网址，开始安装。填写：</p><ul><li>选择MySQL</li><li>数据库地址：localhost</li><li>端口（若更改过请填写更改后的端口），3306</li><li>数据库用户名：root</li><li>数据库密码：设置的密码</li><li>域名</li><li>管理员账号</li><li>管理员密码</li><li>…</li></ul><p>接下来按照网页指示操作即可，注：网站根目录是<code>/var/www</code></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;购买&quot;&gt;&lt;a href=&quot;#购买&quot; class=&quot;headerlink&quot; title=&quot;购买&quot;&gt;&lt;/a&gt;购买&lt;/h1&gt;&lt;p&gt;趁着双十一，租了腾讯云3年的VPS，这个价钱是真的够便宜的了（确信）。&lt;/p&gt;
&lt;h1 id=&quot;安装系统&quot;&gt;&lt;a href=&quot;#安装系统&quot; </summary>
      
    
    
    
    <category term="Typecho" scheme="http://gyrojeff.moe/categories/Typecho/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="VPS" scheme="http://gyrojeff.moe/tags/VPS/"/>
    
    <category term="PHP" scheme="http://gyrojeff.moe/tags/PHP/"/>
    
    <category term="Apache" scheme="http://gyrojeff.moe/tags/Apache/"/>
    
    <category term="Typecho" scheme="http://gyrojeff.moe/tags/Typecho/"/>
    
  </entry>
  
  <entry>
    <title>救命</title>
    <link href="http://gyrojeff.moe/2020/11/07/%E6%95%91%E5%91%BD/"/>
    <id>http://gyrojeff.moe/2020/11/07/%E6%95%91%E5%91%BD/</id>
    <published>2020-11-07T14:37:07.000Z</published>
    <updated>2020-11-07T14:51:40.000Z</updated>
    
    <content type="html"><![CDATA[<p>人到底为什么要活着呢？</p><p>总感觉，现在活着只是为了活着。</p><p>考试到底什么时候才有尽头呢？</p><p>到底什么时候才能获得解脱呢？</p><p>到底是从什么时候开始爸妈习以为常地觉得我优秀呢？</p><p>明明是承认自己的不足但为什么永远会被认为是装逼呢？</p><p>努力到底有什么用呢？</p><p>到头来还是一无是处。</p><p>一件事做得有瑕疵变成了一辈子叨念的话题。</p><p>一件事做得不对变成为了一生的污点。</p><p>我为什么没有资格选择想不想来到这个世界呢？</p><p>为什么要惩罚我让我出生呢？</p><p>为什么为了活下去就要回应别人的期待呢？</p><p>为什么从出生一开始便是欠别人的呢？</p><p>为什么会这么空虚痛苦无力呢？</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;人到底为什么要活着呢？&lt;/p&gt;
&lt;p&gt;总感觉，现在活着只是为了活着。&lt;/p&gt;
&lt;p&gt;考试到底什么时候才有尽头呢？&lt;/p&gt;
&lt;p&gt;到底什么时候才能获得解脱呢？&lt;/p&gt;
&lt;p&gt;到底是从什么时候开始爸妈习以为常地觉得我优秀呢？&lt;/p&gt;
&lt;p&gt;明明是承认自己的不足但为什么永远会被认</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
  </entry>
  
  <entry>
    <title>P1064 金明的预算方案 - 背包问题</title>
    <link href="http://gyrojeff.moe/2020/09/24/P1064-%E9%87%91%E6%98%8E%E7%9A%84%E9%A2%84%E7%AE%97%E6%96%B9%E6%A1%88-%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98/"/>
    <id>http://gyrojeff.moe/2020/09/24/P1064-%E9%87%91%E6%98%8E%E7%9A%84%E9%A2%84%E7%AE%97%E6%96%B9%E6%A1%88-%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98/</id>
    <published>2020-09-24T04:37:39.000Z</published>
    <updated>2020-09-24T09:40:36.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----><style>span.katex-html {    display:none}</style> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>金明今天很开心，家里购置的新房就要领钥匙了，新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是，妈妈昨天对他说：“你的房间需要购买哪些物品，怎么布置，你说了算，只要不超过 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 元钱就行”。今天一早，金明就开始做预算了，他把想买的物品分为两类：主件与附件，附件是从属于某个主件的，下表就是一些主件与附件的例子：</p><table><thead><tr><th style="text-align:center">主件</th><th style="text-align:center">附件</th></tr></thead><tbody><tr><td style="text-align:center">电脑</td><td style="text-align:center">打印机，扫描仪</td></tr><tr><td style="text-align:center">书柜</td><td style="text-align:center">图书</td></tr><tr><td style="text-align:center">书桌</td><td style="text-align:center">台灯，文具</td></tr><tr><td style="text-align:center">工作椅</td><td style="text-align:center">无</td></tr></tbody></table><p>如果要买归类为附件的物品，必须先买该附件所属的主件。每个主件可以有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span> 个、<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 个或 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 个附件。每个附件对应一个主件，附件不再有从属于自己的附件。金明想买的东西很多，肯定会超过妈妈限定的 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 元。于是，他把每件物品规定了一个重要度，分为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span> 等：用整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">1 \sim 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span> 表示，第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span> 等最重要。他还从因特网上查到了每件物品的价格（都是 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>10</mn></mrow><annotation encoding="application/x-tex">10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">0</span></span></span></span></span> 元的整数倍）。他希望在不超过 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 元的前提下，使每件物品的价格与重要度的乘积的总和最大。</p><p>设第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.05724em;">j</span></span></span></span></span> 件物品的价格为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">v_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.716668em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span></span>，重要度为<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>w</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">w_j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.716668em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.02691em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span></span>，共选中了 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span></span></span></span></span> 件物品，编号依次为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>j</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>j</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>j</mi><mi>k</mi></msub></mrow><annotation encoding="application/x-tex">j_1,j_2,\dots,j_k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.05724em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.30110799999999993em;"><span style="top:-2.5500000000000003em;margin-left:-0.05724em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.33610799999999996em;"><span style="top:-2.5500000000000003em;margin-left:-0.05724em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>，则所求的总和为：</p><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><msub><mi>j</mi><mn>1</mn></msub></msub><mo>×</mo><msub><mi>w</mi><msub><mi>j</mi><mn>1</mn></msub></msub><mo>+</mo><msub><mi>v</mi><msub><mi>j</mi><mn>2</mn></msub></msub><mo>×</mo><msub><mi>w</mi><msub><mi>j</mi><mn>2</mn></msub></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>v</mi><msub><mi>j</mi><mi>k</mi></msub></msub><mo>×</mo><msub><mi>w</mi><msub><mi>j</mi><mi>k</mi></msub></msub></mrow><annotation encoding="application/x-tex">v_{j_1} \times w_{j_1}+v_{j_2} \times w_{j_2}+ \dots +v_{j_k} \times w_{j_k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8694379999999999em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31731428571428577em;"><span style="top:-2.357em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8694379999999999em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.02691em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31731428571428577em;"><span style="top:-2.357em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8694379999999999em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31731428571428577em;"><span style="top:-2.357em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8694379999999999em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.02691em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31731428571428577em;"><span style="top:-2.357em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.66666em;vertical-align:-0.08333em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8694379999999999em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathdefault mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.716668em;vertical-align:-0.286108em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.311664em;"><span style="top:-2.5500000000000003em;margin-left:-0.02691em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right:0.05724em;">j</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3487714285714287em;margin-left:-0.05724em;margin-right:0.07142857142857144em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathdefault mtight" style="margin-right:0.03148em;">k</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15122857142857138em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286108em;"><span></span></span></span></span></span></span></span></span></span></span>。</p><p>请你帮助金明设计一个满足要求的购物单。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第一行有两个整数，分别表示总钱数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 和希望购买的物品个数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span>。</p><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 到第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>m</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(m + 1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span> 行，每行三个整数，第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i + 1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">i</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span> 行的整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>v</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">v_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.58056em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">p_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">q_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span> 分别表示第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathdefault">i</span></span></span></span></span> 件物品的价格、重要度以及它对应的的主件。如果 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>q</mi><mi>i</mi></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">q_i=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span>，表示该物品本身是主件。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出一行一个整数表示答案。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">1000 5800 2 0400 5 1300 5 1400 3 0500 2 0</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">2200</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><h4>数据规模与约定</h4><p>对于全部的测试点，保证 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>3.2</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">1 \leq n \leq 3.2 \times 10^4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">3</span><span class="mord">.</span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>60</mn></mrow><annotation encoding="application/x-tex">1 \leq m \leq 60</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">6</span><span class="mord">0</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><msub><mi>v</mi><mi>i</mi></msub><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">0 \leq v_i \leq 10^4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7859700000000001em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><msub><mi>p</mi><mi>i</mi></msub><mo>≤</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">1 \leq p_i \leq 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8304100000000001em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault">p</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><msub><mi>q</mi><mi>i</mi></msub><mo>≤</mo><mi>m</mi></mrow><annotation encoding="application/x-tex">0 \leq q_i \leq m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8304100000000001em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.03588em;">q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.03588em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span>，答案不超过 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">2 \times 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></span>。</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>这道题可以只枚举主要物品，有五种选择方法：</p><ul><li>主</li><li>主 + 副1</li><li>主 + 副2</li><li>主 + 副1 + 副2</li><li>不选</li></ul><p>然后其实就是普通的背包问题了（撒花</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxm = <span class="number">65</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">32005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> pos[maxm], cnt[maxm], f[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> v, p; &#125; a[maxm][<span class="number">3</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> n, m, k = <span class="number">0</span>;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> v, p, q; <span class="built_in">cin</span> &gt;&gt; v &gt;&gt; p &gt;&gt; q;</span><br><span class="line"><span class="keyword">if</span> (q == <span class="number">0</span>) &#123;</span><br><span class="line">a[++ k][<span class="number">0</span>] = (node) &#123; v, p &#125;;</span><br><span class="line">pos[i] = k;</span><br><span class="line">&#125; <span class="keyword">else</span> a[pos[q]][++ cnt[q]] = (node) &#123; v, p &#125;;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= k; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = n; j &gt;= a[i][<span class="number">0</span>].v; j --) &#123;</span><br><span class="line"><span class="keyword">if</span> (j &gt;= a[i][<span class="number">0</span>].v + a[i][<span class="number">1</span>].v + a[i][<span class="number">2</span>].v)</span><br><span class="line">f[j] = max(f[j], f[j - (a[i][<span class="number">0</span>].v + a[i][<span class="number">1</span>].v + a[i][<span class="number">2</span>].v)] + a[i][<span class="number">0</span>].v * a[i][<span class="number">0</span>].p + a[i][<span class="number">1</span>].v * a[i][<span class="number">1</span>].p + a[i][<span class="number">2</span>].v * a[i][<span class="number">2</span>].p);</span><br><span class="line"><span class="keyword">if</span> (j &gt;= a[i][<span class="number">0</span>].v + a[i][<span class="number">1</span>].v)</span><br><span class="line">f[j] = max(f[j], f[j - (a[i][<span class="number">0</span>].v + a[i][<span class="number">1</span>].v)] + a[i][<span class="number">0</span>].v * a[i][<span class="number">0</span>].p + a[i][<span class="number">1</span>].v * a[i][<span class="number">1</span>].p);</span><br><span class="line"><span class="keyword">if</span> (j &gt;= a[i][<span class="number">0</span>].v + a[i][<span class="number">2</span>].v)</span><br><span class="line">f[j] = max(f[j], f[j - (a[i][<span class="number">0</span>].v + a[i][<span class="number">2</span>].v)] + a[i][<span class="number">0</span>].v * a[i][<span class="number">0</span>].p + a[i][<span class="number">2</span>].v * a[i][<span class="number">2</span>].p);</span><br><span class="line"><span class="keyword">if</span> (j &gt;= a[i][<span class="number">0</span>].v)</span><br><span class="line">f[j] = max(f[j], f[j - a[i][<span class="number">0</span>].v] + a[i][<span class="number">0</span>].v * a[i][<span class="number">0</span>].p);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; f[n] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt;&lt;sty</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="背包" scheme="http://gyrojeff.moe/tags/%E8%83%8C%E5%8C%85/"/>
    
  </entry>
  
  <entry>
    <title>P1099 树网的核 - 树的直径 + 单调队列</title>
    <link href="http://gyrojeff.moe/2020/09/22/P1099-%E6%A0%91%E7%BD%91%E7%9A%84%E6%A0%B8-%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    <id>http://gyrojeff.moe/2020/09/22/P1099-%E6%A0%91%E7%BD%91%E7%9A%84%E6%A0%B8-%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/</id>
    <published>2020-09-22T09:08:05.000Z</published>
    <updated>2020-09-22T12:20:30.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>设 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo>=</mo><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>E</mi><mo separator="true">,</mo><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T=(V,E,W)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">W</span><span class="mclose">)</span></span></span></span></span> 是一个无圈且连通的无向图（也称为无根树），每条边到有正整数的权，我们称 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span> 为树网（<code>treenetwork</code>），其中 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi></mrow><annotation encoding="application/x-tex">V</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span></span></span></span></span> 分别表示结点与边的集合，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>W</mi></mrow><annotation encoding="application/x-tex">W</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">W</span></span></span></span></span> 表示各边长度的集合，并设 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span> 有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 个结点。</p><p>路径：树网中任何两结点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">a</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault">b</span></span></span></span></span> 都存在唯一的一条简单路径，用 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(a, b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault">d</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span><span class="mclose">)</span></span></span></span></span> 表示以 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a, b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span></span></span></span></span> 为端点的路径的长度，它是该路径上各边长度之和。我们称<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">d(a, b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault">d</span><span class="mopen">(</span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span><span class="mclose">)</span></span></span></span></span> 为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a, b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span></span></span></span></span> 两结点间的距离。</p><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>D</mi><mo stretchy="false">(</mo><mi>v</mi><mo separator="true">,</mo><mi>P</mi><mo stretchy="false">)</mo><mo>=</mo><mi>min</mi><mo>⁡</mo><mo stretchy="false">{</mo><mi>d</mi><mo stretchy="false">(</mo><mi>v</mi><mo separator="true">,</mo><mi>u</mi><mo stretchy="false">)</mo><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">D(v, P)=\min\{d(v, u)\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.02778em;">D</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">{</span><span class="mord mathdefault">d</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">u</span><span class="mclose">)</span><span class="mclose">}</span></span></span></span></span>, <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 为路径 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span> 上的结点。</p><p>树网的直径：树网中最长的路径成为树网的直径。对于给定的树网 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span>，直径不一定是唯一的，但可以证明：各直径的中点（不一定恰好是某个结点，可能在某条边的内部）是唯一的，我们称该点为树网的中心。</p><p>偏心距 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">E</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">C</mi></mrow><mo stretchy="false">(</mo><mi>F</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\mathrm{ECC}(F)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">E</span><span class="mord mathrm">C</span><span class="mord mathrm">C</span></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mclose">)</span></span></span></span></span>：树网 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span> 中距路径 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi></mrow><annotation encoding="application/x-tex">F</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span> 最远的结点到路径 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi></mrow><annotation encoding="application/x-tex">F</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span> 的距离，即</p><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">E</mi><mi mathvariant="normal">C</mi><mi mathvariant="normal">C</mi></mrow><mo stretchy="false">(</mo><mi>F</mi><mo stretchy="false">)</mo><mo>=</mo><mi>max</mi><mo>⁡</mo><mo stretchy="false">{</mo><mi>d</mi><mo stretchy="false">(</mo><mi>v</mi><mo separator="true">,</mo><mi>F</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mi>v</mi><mo>∈</mo><mi>V</mi><mo stretchy="false">}</mo></mrow><annotation encoding="application/x-tex">\mathrm{ECC}(F)=\max\{d(v, F),v \in V\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathrm">E</span><span class="mord mathrm">C</span><span class="mord mathrm">C</span></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">max</span><span class="mopen">{</span><span class="mord mathdefault">d</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mclose">}</span></span></span></span></span></p><p>任务：对于给定的树网 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo>=</mo><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>E</mi><mo separator="true">,</mo><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T=(V, E, W)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">W</span><span class="mclose">)</span></span></span></span></span> 和非负整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span></span>，求一个路径 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi></mrow><annotation encoding="application/x-tex">F</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span>，他是某直径上的一段路径（该路径两端均为树网中的结点），其长度不超过 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span></span>（可以等于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span></span>），使偏心距 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mi>C</mi><mi>C</mi><mo stretchy="false">(</mo><mi>F</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ECC(F)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span><span class="mclose">)</span></span></span></span></span> 最小。我们称这个路径为树网 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo>=</mo><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>E</mi><mo separator="true">,</mo><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T=(V, E, W)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.22222em;">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">W</span><span class="mclose">)</span></span></span></span></span> 的核（<code>Core</code>）。必要时，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi></mrow><annotation encoding="application/x-tex">F</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span> 可以退化为某个结点。一般来说，在上述定义下，核不一定只有一个，但最小偏心距是唯一的。</p><p>下面的图给出了树网的一个实例。图中，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>−</mo><mi>B</mi></mrow><annotation encoding="application/x-tex">A-B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault">A</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.05017em;">B</span></span></span></span></span> 与 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>−</mo><mi>C</mi></mrow><annotation encoding="application/x-tex">A-C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault">A</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span></span></span></span></span> 是两条直径，长度均为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>20</mn></mrow><annotation encoding="application/x-tex">20</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span><span class="mord">0</span></span></span></span></span>。点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>W</mi></mrow><annotation encoding="application/x-tex">W</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">W</span></span></span></span></span> 是树网的中心，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mi>F</mi></mrow><annotation encoding="application/x-tex">EF</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">E</span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span> 边的长度为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span>。如果指定 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><mn>11</mn></mrow><annotation encoding="application/x-tex">s=11</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">1</span></span></span></span></span>，则树网的核为路径<code>DEFG</code>（也可以取为路径<code>DEF</code>），偏心距为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>8</mn></mrow><annotation encoding="application/x-tex">8</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">8</span></span></span></span></span>。如果指定 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">s=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span>（或 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">s=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span>、<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">s=2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span>），则树网的核为结点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi></mrow><annotation encoding="application/x-tex">F</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">F</span></span></span></span></span>，偏心距为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>12</mn></mrow><annotation encoding="application/x-tex">12</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">2</span></span></span></span></span>。</p><p><img src="https://cdn.luogu.com.cn/upload/pic/20270.png" alt=""></p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>共 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 行。</p><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 行，两个正整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 和 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span></span>，中间用一个空格隔开。其中 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 为树网结点的个数，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">s</span></span></span></span></span> 为树网的核的长度的上界。设结点编号以此为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo>…</mo><mo separator="true">,</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1,2\dots,n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">n</span></span></span></span></span>。</p><p>从第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 行到第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 行，每行给出 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span></span></span></span></span> 个用空格隔开的正整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo separator="true">,</mo><mi>w</mi></mrow><annotation encoding="application/x-tex">u, v, w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span>，依次表示每一条边的两个端点编号和长度。例如，<code>2 4 7</code> 表示连接结点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 与 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>4</mn></mrow><annotation encoding="application/x-tex">4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">4</span></span></span></span></span> 的边的长度为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>7</mn></mrow><annotation encoding="application/x-tex">7</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">7</span></span></span></span></span>。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>一个非负整数，为指定意义下的最小偏心距。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample" show-idx="true"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5 21 2 52 3 22 4 42 5 3</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5</pre></div></div><div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample" show-idx="true"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #2</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">8 61 3 22 3 2 3 4 64 5 34 6 44 7 27 8 3</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #2</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><ul><li>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>40</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">40\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">4</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，保证 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>15</mn></mrow><annotation encoding="application/x-tex">n \le 15</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">5</span></span></span></span></span>。</li><li>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>70</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">70\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">7</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，保证 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>80</mn></mrow><annotation encoding="application/x-tex">n \le 80</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">8</span><span class="mord">0</span></span></span></span></span>。</li><li>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，保证 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>300</mn></mrow><annotation encoding="application/x-tex">n \le 300</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span><span class="mord">0</span><span class="mord">0</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><mi>s</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">0\le s\le10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">s</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo>≤</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1 \leq u, v \leq n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8304100000000001em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>w</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">1 \leq w \leq 10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>。</li></ul></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>因为路径$F$是直径上的一部分，那就变得非常好办了。考虑下图的样子：</p><img src="/2020/09/22/P1099-%E6%A0%91%E7%BD%91%E7%9A%84%E6%A0%B8-%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/image-20190718105500435.png" class=""><p>求出在这种情况之下的子树的最深深度，记为$sd\text{ }secd[i]$，其中$i$为直径上的点，之所以这么表示，因为这个深度是在一个节点所有子树当中第二深的深度，最深的深度$sd\text{ }max[i]$为直径所在的那颗子树的深度。</p><p>在这种情况下，可以在直径上选定一段$F$后，列出$ECC(F)$的方程：</p><script type="math/tex; mode=display">    ECC(F) = \max    \begin {cases}    \text{left of}~F~\text{in diameter}\\    \max \{sd\_secd[i],~i\in F\} \\    \text{right of}~F~\text{in diameter}    \end {cases}</script><p>因为求上面是式子中的第一项和第三项非常容易，在直径求完之后就是$O(1)$了，而第二项是区间最大值，那么我们可以用单调队列维护。</p><h1 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long </span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">305</span>;</span><br><span class="line"><span class="keyword">int</span> h[maxn], ecnt = <span class="number">2</span>, n, s;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[maxn &lt;&lt; <span class="number">1</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, h[u], w &#125;; h[u] = ecnt ++; &#125;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> pos, val; &#125; q[maxn];</span><br><span class="line"></span><br><span class="line"><span class="comment">// sd_max: maximum depth of subtree</span></span><br><span class="line"><span class="comment">// sd_secd: second maximum depth of subtree</span></span><br><span class="line"><span class="keyword">int</span> dis[maxn], sd_max[maxn], sd_secd[maxn], next[maxn], dia[maxn], head, tail; </span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">dfs1</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> alpha = u;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = h[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line"><span class="keyword">int</span> a = dfs1(v, u);</span><br><span class="line"><span class="keyword">if</span> (dis[a] &gt;= dis[alpha]) alpha = a;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> alpha;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs2</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa)</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = h[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">dfs2(v, u);</span><br><span class="line"><span class="keyword">int</span> this_depth = sd_max[v] + g[e].w;</span><br><span class="line"><span class="keyword">if</span> (this_depth &gt;= sd_max[u]) &#123;</span><br><span class="line">sd_secd[u] = sd_max[u];</span><br><span class="line">sd_max[u] = this_depth;</span><br><span class="line">next[u] = v;</span><br><span class="line">&#125; <span class="keyword">else</span> <span class="keyword">if</span> (this_depth &gt; sd_secd[u]) &#123;</span><br><span class="line">sd_secd[u] = this_depth;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">inc</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> &amp;i)</span> </span>&#123;</span><br><span class="line">i ++;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; q[head].pos == i - <span class="number">1</span>) head ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; s;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">add_edge(u, v, w);</span><br><span class="line">add_edge(v, u, w);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">int</span> ds = dfs1(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">dis[ds] = <span class="number">0</span>;</span><br><span class="line">dfs2(ds, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">int</span> k = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> p = ds; p; p = next[p])</span><br><span class="line">dia[++ k] = p;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">//for (int i = 1; i &lt;= k; i ++) cout &lt;&lt; dia[i] &lt;&lt; endl;</span></span><br><span class="line"><span class="comment">//for (int i = 1; i &lt;= k; i ++) cout &lt;&lt; sd_secd[dia[i]] &lt;&lt; endl; </span></span><br><span class="line"><span class="comment">//for (int i = 1; i &lt;= k; i ++) cout &lt;&lt; dis[dia[i]] &lt;&lt; endl; </span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">8e18</span>;</span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>, j = <span class="number">1</span>; i &lt;= k; inc(i)) &#123;</span><br><span class="line"><span class="keyword">int</span> u = dia[i];</span><br><span class="line"><span class="keyword">while</span> (j + <span class="number">1</span> &lt;= k + <span class="number">1</span> &amp;&amp; dis[dia[j]] - dis[u] &lt;= s) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; q[tail - <span class="number">1</span>].val &lt;= sd_secd[dia[j]]) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; j, sd_secd[dia[j]] &#125;;</span><br><span class="line">j ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">int</span> tmp = max(dis[u], dis[dia[k]] - dis[dia[j - <span class="number">1</span>]]);</span><br><span class="line">tmp = max(tmp, q[head].val);</span><br><span class="line">ans = min(ans, tmp);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;st</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="图论" scheme="http://gyrojeff.moe/tags/%E5%9B%BE%E8%AE%BA/"/>
    
    <category term="树的直径" scheme="http://gyrojeff.moe/tags/%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84/"/>
    
    <category term="树形结构" scheme="http://gyrojeff.moe/tags/%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84/"/>
    
    <category term="queue" scheme="http://gyrojeff.moe/tags/queue/"/>
    
    <category term="单调队列" scheme="http://gyrojeff.moe/tags/%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    
  </entry>
  
  <entry>
    <title>HDU 2196 Computers - 树的直径</title>
    <link href="http://gyrojeff.moe/2020/09/22/HDU-2196-Computers-%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84/"/>
    <id>http://gyrojeff.moe/2020/09/22/HDU-2196-Computers-%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84/</id>
    <published>2020-09-22T08:52:54.000Z</published>
    <updated>2020-09-22T09:00:21.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><td align="center"><h2 style="color:#1A5CC8">Computer</h2><font><b><span style="font-family:Arial;font-size:12px;font-weight:bold;color:green">Time Limit: 1000/1000 MS (Java/Others)&nbsp;&nbsp;&nbsp;&nbsp;Memory Limit: 32768/32768 K (Java/Others)<br>Total Submission(s): 43138&nbsp;&nbsp;&nbsp;&nbsp;Accepted Submission(s): 8426<br></span></b></font><br><br><div class="panel_title" align="left">Problem Description</div> <div class="panel_content">A school bought the first computer some time ago(so this computer's id is 1). During the recent years the school bought N-1 new computers. Each new computer was connected to one of settled earlier. Managers of school are anxious about slow functioning of the net and want to know the maximum distance Si for which i-th computer needs to send signal (i.e. length of cable to the most distant computer). You need to provide this information. <br><center><img style="max-width:100%;" src="http://acm.hdu.edu.cn/data/images/C128-1005-1.JPG"></center><br><br>Hint: the example input is corresponding to this graph. And from the graph, you can see that the computer 4 is farthest one from 1, so S1 = 3. Computer 4 and 5 are the farthest ones from 2, so S2 = 2. Computer 5 is the farthest one from 3, so S3 = 3. we also get S4 = 4, S5 = 4.</div><div class="panel_bottom">&nbsp;</div><br><div class="panel_title" align="left">Input</div> <div class="panel_content">Input file contains multiple test cases.In each case there is natural number N (N&lt;=10000) in the first line, followed by (N-1) lines with descriptions of computers. i-th line contains two natural numbers - number of computer, to which i-th computer is connected and length of cable used for connection. Total length of cable does not exceed 10^9. Numbers in lines of input are separated by a space. </div><div class="panel_bottom">&nbsp;</div><br><div class="panel_title" align="left">Output</div> <div class="panel_content">For each case output N lines. i-th line must contain number Si for i-th computer (1&lt;=i&lt;=N). </div><div class="panel_bottom">&nbsp;</div><br><div class="panel_title" align="left">Sample Input</div><div class="panel_content"><pre><div style="font-family:Courier New,Courier,monospace;">51 12 13 11 1</div></pre></div><div class="panel_bottom">&nbsp;</div><br><div class="panel_title" align="left">Sample Output</div><div class="panel_content"><pre><div style="font-family:Courier New,Courier,monospace;">32344</div></pre></div><div class="panel_bottom">&nbsp;</div><br><div class="panel_title" align="left">Author</div> <div class="panel_content">scnu</div></td><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>我们要求每一个端点最远点，其实就是这个端点到任意一条直径两个端点距离较远的那一个。证明过程其实非常的简单，用反证法就可以。那么，我们其实只需要用两遍dfs求一下直径的两个端点和到一个端点的距离数组求出来，再用一遍dfs把到另外一个端点的距离数组求出来。</p><h1 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h1><p>多组数据，用<code>while (scanf(&quot;%d&quot;, &amp;n) != EOF)</code>来做。</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">10005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> head[maxn], ecnt = <span class="number">2</span>, dis[maxn], dis2[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[maxn &lt;&lt; <span class="number">1</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125; </span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">dfs1</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> alpha = u;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line"><span class="keyword">int</span> a = dfs1(v, u);</span><br><span class="line"><span class="keyword">if</span> (dis[a] &gt;= dis[alpha]) alpha = a;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> alpha;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">dfs2</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa)</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">dis2[v] = dis2[u] + g[e].w;</span><br><span class="line">dfs2(v, u);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span> (<span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n) != EOF) &#123;</span><br><span class="line"><span class="built_in">memset</span>(head, <span class="number">0</span>, <span class="keyword">sizeof</span>(head));</span><br><span class="line"><span class="built_in">memset</span>(g, <span class="number">0</span>, <span class="keyword">sizeof</span>(g));</span><br><span class="line">ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">2</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> v, w; <span class="built_in">cin</span> &gt;&gt; v &gt;&gt; w;</span><br><span class="line">add_edge(i, v, w); add_edge(v, i, w);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">int</span> ds = dfs1(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">int</span> tmp = dis[ds];</span><br><span class="line">dis[ds] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> dt = dfs1(ds, <span class="number">0</span>);</span><br><span class="line">dis2[dt] = <span class="number">0</span>;</span><br><span class="line">dfs2(dt, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cout</span> &lt;&lt; max(dis[i], dis2[i]) &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;td align=&quot;center&quot;&gt;&lt;h2 style=&quot;color:#1A5CC8&quot;&gt;Computer&lt;/h2&gt;&lt;font&gt;&lt;b&gt;&lt;span </summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="树" scheme="http://gyrojeff.moe/tags/%E6%A0%91/"/>
    
    <category term="图论" scheme="http://gyrojeff.moe/tags/%E5%9B%BE%E8%AE%BA/"/>
    
    <category term="树的直径" scheme="http://gyrojeff.moe/tags/%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84/"/>
    
    <category term="树形结构" scheme="http://gyrojeff.moe/tags/%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84/"/>
    
    <category term="直径" scheme="http://gyrojeff.moe/tags/%E7%9B%B4%E5%BE%84/"/>
    
  </entry>
  
  <entry>
    <title>P2216 [HAOI2007]理想的正方形 - 单调队列</title>
    <link href="http://gyrojeff.moe/2020/09/21/P2216-HAOI2007-%E7%90%86%E6%83%B3%E7%9A%84%E6%AD%A3%E6%96%B9%E5%BD%A2-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    <id>http://gyrojeff.moe/2020/09/21/P2216-HAOI2007-%E7%90%86%E6%83%B3%E7%9A%84%E6%AD%A3%E6%96%B9%E5%BD%A2-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/</id>
    <published>2020-09-21T15:46:26.000Z</published>
    <updated>2020-09-21T15:50:19.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>有一个a*b的整数组成的矩阵，现请你从中找出一个n*n的正方形区域，使得该区域所有数中的最大值和最小值的差最小。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第一行为3个整数，分别表示a,b,n的值</p><p>第二行至第a+1行每行为b个非负整数，表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>仅一个整数，为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5 4 21 2 5 60 17 16 016 17 2 12 10 2 11 2 2 2</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">1</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>问题规模</p><p>（1）矩阵中的所有数都不超过1,000,000,000</p><p>（2）20%的数据2&lt;=a,b&lt;=100,n&lt;=a,n&lt;=b,n&lt;=10</p><p>（3）100%的数据2&lt;=a,b&lt;=1000,n&lt;=a,n&lt;=b,n&lt;=100</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>要求出一个方块内的极值，我们不妨维护两次单调队列：</p><ul><li>第一次：行，单调队列</li><li>第二次：上面那个单调队列得到的结果按列维护</li></ul><p>这样我们就可以达到目的了</p><p>图片@ｃｈｉｌｌ（洛谷）:</p><img src="/2020/09/21/P2216-HAOI2007-%E7%90%86%E6%83%B3%E7%9A%84%E6%AD%A3%E6%96%B9%E5%BD%A2-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/1.png" class=""><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> a, b, n;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> val, pos; &#125; q[maxn];</span><br><span class="line"><span class="keyword">int</span> <span class="built_in">map</span>[maxn][maxn];</span><br><span class="line"><span class="keyword">int</span> min_val[maxn][maxn], max_val[maxn][maxn];</span><br><span class="line"><span class="keyword">int</span> min_ans[maxn][maxn], max_ans[maxn][maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; a &gt;&gt; b &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a; i ++)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b; j ++)</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; <span class="built_in">map</span>[i][j];</span><br><span class="line"><span class="keyword">int</span> head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="comment">// row max</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a; i ++) &#123;</span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b; j ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; <span class="built_in">map</span>[i][j] &gt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; <span class="built_in">map</span>[i][j], j &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; j - q[head].pos + <span class="number">1</span> &gt; n) head ++;</span><br><span class="line"><span class="keyword">if</span> (j &gt;= n) max_val[i][j - n + <span class="number">1</span>] = q[head].val; </span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// row min</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a; i ++) &#123;</span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b; j ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; <span class="built_in">map</span>[i][j] &lt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; <span class="built_in">map</span>[i][j], j &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; j - q[head].pos + <span class="number">1</span> &gt; n) head ++;</span><br><span class="line"><span class="keyword">if</span> (j &gt;= n) min_val[i][j - n + <span class="number">1</span>] = q[head].val; </span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b - n + <span class="number">1</span>; j ++) &#123;</span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a; i ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; max_val[i][j] &gt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; max_val[i][j], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; n) head ++;</span><br><span class="line"><span class="keyword">if</span> (i &gt;= n) max_ans[i - n + <span class="number">1</span>][j] = q[head].val;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b - n + <span class="number">1</span>; j ++) &#123;</span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a; i ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; min_val[i][j] &lt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; min_val[i][j], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; n) head ++;</span><br><span class="line"><span class="keyword">if</span> (i &gt;= n) min_ans[i - n + <span class="number">1</span>][j] = q[head].val;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">2e9</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= a - n + <span class="number">1</span>; i ++)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= b - n + <span class="number">1</span>; j ++)</span><br><span class="line">ans = min(ans, max_ans[i][j] - min_ans[i][j]);</span><br><span class="line"></span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;h2</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="queue" scheme="http://gyrojeff.moe/tags/queue/"/>
    
    <category term="单调队列" scheme="http://gyrojeff.moe/tags/%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    
  </entry>
  
  <entry>
    <title>P2034 选择数字 - 单调队列</title>
    <link href="http://gyrojeff.moe/2020/09/20/P2034-%E9%80%89%E6%8B%A9%E6%95%B0%E5%AD%97-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    <id>http://gyrojeff.moe/2020/09/20/P2034-%E9%80%89%E6%8B%A9%E6%95%B0%E5%AD%97-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/</id>
    <published>2020-09-20T12:57:34.000Z</published>
    <updated>2020-09-20T13:03:02.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>给定一行n个非负整数a[1]..a[n]。现在你可以选择其中若干个数，但不能有超过k个连续的数字被选择。你的任务是使得选出的数字的和最大。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第一行两个整数n，k</p><p>以下n行，每行一个整数表示a[i]。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出一个值表示答案。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5 212345 </pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">12</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>对于20%的数据，n &lt;= 10</p><p>对于另外20%的数据， k = 1</p><p>对于60%的数据，n &lt;= 1000</p><p>对于100%的数据，1 &lt;= n &lt;= 100000，1 &lt;= k &lt;= n，0 &lt;= 数字大小 &lt;= 1,000,000,000</p><p>时间限制500ms</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>我们要选出和最大的一堆数，但是这非常难，所以我们可以考虑怎么做才能删除最少的数。设$f[i]$表示删除第$i$个数的最小和，那么$f[i]$可以由前$k+1$个$f$转移而来（因为是不超过$k$个），即以下转移方程给出：</p><script type="math/tex; mode=display">    f[i] = a[i] + \min_{i - k - 1 \leq j < i} f[j]</script><p>观察后半段，其实就是个单调队列，直接维护就行了。最后的答案：</p><script type="math/tex; mode=display">    \text{ans} = \text{sum}[n] - \min_{n - k \leq i \leq n} f[i]</script><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"><span class="keyword">int</span> n, k, f[maxn], a[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> val, pos; &#125; q[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line">f[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> head = <span class="number">0</span>, tail = <span class="number">1</span>, sum = <span class="number">0</span>;</span><br><span class="line"><span class="comment">// min -&gt; increase</span></span><br><span class="line">q[head] = (node) &#123; f[<span class="number">0</span>], <span class="number">0</span> &#125;;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line">sum += a[i];</span><br><span class="line">f[i] = a[i] + q[head].val;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; f[i] &lt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; f[i], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; k + <span class="number">1</span>) head ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//for (int i = 0; i &lt;= n; i ++) cout &lt;&lt; f[i] &lt;&lt; &quot; &quot;;</span></span><br><span class="line"><span class="comment">//cout &lt;&lt; endl; </span></span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">8e18</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = n - k; i &lt;= n; i ++) ans = min(ans, f[i]);</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; sum - ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h1><p>十年OI一场空，不开longlong见祖宗。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;st</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="queue" scheme="http://gyrojeff.moe/tags/queue/"/>
    
    <category term="单调队列" scheme="http://gyrojeff.moe/tags/%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    
    <category term="动态规划" scheme="http://gyrojeff.moe/tags/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/"/>
    
  </entry>
  
  <entry>
    <title>P1714 切蛋糕 - 单调队列</title>
    <link href="http://gyrojeff.moe/2020/09/20/P1714-%E5%88%87%E8%9B%8B%E7%B3%95-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    <id>http://gyrojeff.moe/2020/09/20/P1714-%E5%88%87%E8%9B%8B%E7%B3%95-%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/</id>
    <published>2020-09-20T10:02:35.000Z</published>
    <updated>2020-09-20T10:13:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>今天是小Z的生日，同学们为他带来了一块蛋糕。这块蛋糕是一个长方体，被用不同色彩分成了N个相同的小块，每小块都有对应的幸运值。</p><p>小Z作为寿星，自然希望吃到的第一块蛋糕的幸运值总和最大，但小Z最多又只能吃M小块(M≤N)的蛋糕。</p><p>吃东西自然就不想思考了，于是小Z把这个任务扔给了学OI的你，请你帮他从这N小块中找出连续的k块蛋糕(k≤M)，使得其上的幸运值最大。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输入文件cake.in的第一行是两个整数N,M。分别代表共有N小块蛋糕，小Z最多只能吃M小块。</p><p>第二行用空格隔开的N个整数，第i个整数Pi代表第i小块蛋糕的幸运值。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出文件cake.out只有一行，一个整数，为小Z能够得到的最大幸运值。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample" show-idx="true"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5 21 2 3 4 5</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">9</pre></div></div><div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample" show-idx="true"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #2</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">6 31 -2 3 -4 5 -6</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #2</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>对20%的数据，N≤100。</p><p>对100%的数据，N≤500000，|Pi|≤500。答案保证在2^31-1之内。</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>设$f[i]$为以$i$个元素结尾的连续子段的最大值：</p><script type="math/tex; mode=display">    f[i] = \max_{i - m \leq j \leq i - 1} \{\text{sum}[i] - \text{sum}[j]\}</script><p>改写:</p><script type="math/tex; mode=display">    f[i] = \text{sum}[i] - \min_{i - m \leq j \leq i - 1} \text{sum}[j]</script><p>显而易见，我们要维护一个最小值的单调队列，也就是一个递增的单调队列，这样我们就可以得到线性的复杂度。</p><p>不过我的做法有点黑魔法（雾），我想的时候是这么想的：以第$i$个元素开始的连续子段的最大值，这样其实就要维护一个递减的单调队列，不过时间复杂度就变成了$O(m + n) \approx O(n)$</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">500005</span> * <span class="number">2</span>;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> val, pos; &#125; q[maxn];</span><br><span class="line"><span class="keyword">int</span> a[maxn], s[maxn], m, n;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; a[i]; s[i] = s[i - <span class="number">1</span>] + a[i]; </span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = n + <span class="number">1</span>; i &lt;= m + n; i ++) s[i] = s[n];</span><br><span class="line"><span class="keyword">int</span> head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">-8e18</span>;</span><br><span class="line"><span class="comment">// max --&gt; decrease</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n + m; i ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; s[i] &gt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; s[i], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; m) head ++;</span><br><span class="line">ans = max(ans, q[head].val - s[(i - m &gt;= <span class="number">0</span>) ? i - m : <span class="number">0</span>]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;st</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="queue" scheme="http://gyrojeff.moe/tags/queue/"/>
    
    <category term="单调队列" scheme="http://gyrojeff.moe/tags/%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    
  </entry>
  
  <entry>
    <title>P1886 滑动窗口 /【模板】单调队列</title>
    <link href="http://gyrojeff.moe/2020/09/20/P1886-%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3-%E3%80%90%E6%A8%A1%E6%9D%BF%E3%80%91%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    <id>http://gyrojeff.moe/2020/09/20/P1886-%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3-%E3%80%90%E6%A8%A1%E6%9D%BF%E3%80%91%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/</id>
    <published>2020-09-20T08:54:50.000Z</published>
    <updated>2020-09-20T09:06:25.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>再次写下这些东西，真的是感慨万千。从之前的只知道抄别人的，硬理解，到现在的查一下原理然后自己口胡，其中的辛酸大概也只有自己知道了。引用我很喜欢的一位数学老师的话：</p><blockquote><p>只有体系建立起来了，才能办好事情。</p></blockquote><h1 id="单调队列的用途"><a href="#单调队列的用途" class="headerlink" title="单调队列的用途"></a>单调队列的用途</h1><p>一般来说，单调队列用在维护一个区间的极值上，即下面这两个式子：</p><script type="math/tex; mode=display">    dp[i] = \min_{i - m < j \leq i} \{ a[j] \}</script><script type="math/tex; mode=display">    dp[i] = \max_{i - m < j \leq i} \{ a[j] \}</script><p>正常情况下，时间复杂度应该为$O(mn)$。</p><h1 id="单调队列的思想"><a href="#单调队列的思想" class="headerlink" title="单调队列的思想"></a>单调队列的思想</h1><p>单调队列，名为“单调”，意思就是队列当中元素是单调的。有一个很好的比方：你在排队买饭的时候，遇到比你弱的人，你就干掉然后插队，知道前面是比你强的人。这个时候你维护的就是一个单调递减的队列（因为你比你前面的人弱嘛），但是注意：你也在维护一个潜在的最大值的队列。</p><p>原因是这样的：当某个元素已经不在滑动窗口里面时，直接pop掉就行了，所以队首一定是区间最大值。</p><p>而区间最小值，只需要维护一个递增队列就行。</p><h1 id="模板题目"><a href="#模板题目" class="headerlink" title="模板题目"></a>模板题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><style>span.katex-html {    display:none}</style><!----> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>有一个长为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 的序列 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">a</span></span></span></span></span>，以及一个大小为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span></span></span></span></span> 的窗口。现在这个从左边开始向右滑动，每次滑动一个单位，求出每次滑动后窗口中的最大值和最小值。</p><p>例如：</p><p>The array is <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">[</mo><mn>1</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mo>−</mo><mn>1</mn><mo separator="true">,</mo><mo>−</mo><mn>3</mn><mo separator="true">,</mo><mn>5</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mn>6</mn><mo separator="true">,</mo><mn>7</mn><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">[1,3,-1,-3,5,3,6,7]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">−</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">−</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">6</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">7</span><span class="mclose">]</span></span></span></span></span>, and <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">k = 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span></span></span></span></span>。</p><p><img src="https://cdn.luogu.com.cn/upload/pic/688.png" alt=""></p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输入一共有两行，第一行有两个正整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo separator="true">,</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">n,k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">n</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span></span></span></span></span>。第二行 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 个整数，表示序列 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">a</span></span></span></span></span></p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出共两行，第一行为每次窗口滑动的最小值<br>第二行为每次窗口滑动的最大值</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">8 31 3 -1 -3 5 3 6 7</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">-1 -3 -3 -3 3 33 3 5 5 6 7</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>【数据范围】<br>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>50</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">50\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">5</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>5</mn></msup></mrow><annotation encoding="application/x-tex">1 \le n \le 10^5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span></span></span></span></span></span></span></span></span>；<br>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>k</mi><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>6</mn></msup></mrow><annotation encoding="application/x-tex">1\le k \le n \le 10^6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83041em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>a</mi><mi>i</mi></msub><mo>∈</mo><mo stretchy="false">[</mo><mo>−</mo><msup><mn>2</mn><mn>31</mn></msup><mo separator="true">,</mo><msup><mn>2</mn><mn>31</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a_i \in [-2^{31},2^{31})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6891em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.064108em;vertical-align:-0.25em;"></span><span class="mopen">[</span><span class="mord">−</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mtight">1</span></span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>。</p></div> <!----></div><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000006</span>; </span><br><span class="line"><span class="keyword">int</span> n, k, a[maxn];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> val, pos; &#125; q[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line"><span class="keyword">int</span> head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="comment">// find min -&gt; increase</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; a[i] &lt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; a[i], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; k) head ++;</span><br><span class="line"><span class="keyword">if</span> (i &gt;= k) <span class="built_in">cout</span> &lt;&lt; q[head].val &lt;&lt; (i == n ? <span class="string">&quot;\n&quot;</span> : <span class="string">&quot; &quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// find max -&gt; decrease</span></span><br><span class="line">head = <span class="number">0</span>, tail = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; a[i] &gt;= q[tail - <span class="number">1</span>].val) tail --;</span><br><span class="line">q[tail ++] = (node) &#123; a[i], i &#125;;</span><br><span class="line"><span class="keyword">while</span> (head &lt; tail &amp;&amp; i - q[head].pos + <span class="number">1</span> &gt; k) head ++;</span><br><span class="line"><span class="keyword">if</span> (i &gt;= k) <span class="built_in">cout</span> &lt;&lt; q[head].val &lt;&lt; (i == n ? <span class="string">&quot;\n&quot;</span> : <span class="string">&quot; &quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;引言&quot;&gt;&lt;a href=&quot;#引言&quot; class=&quot;headerlink&quot; title=&quot;引言&quot;&gt;&lt;/a&gt;引言&lt;/h1&gt;&lt;p&gt;再次写下这些东西，真的是感慨万千。从之前的只知道抄别人的，硬理解，到现在的查一下原理然后自己口胡，其中的辛酸大概也只有自己知道了。引用我很喜</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="queue" scheme="http://gyrojeff.moe/tags/queue/"/>
    
    <category term="单调队列" scheme="http://gyrojeff.moe/tags/%E5%8D%95%E8%B0%83%E9%98%9F%E5%88%97/"/>
    
    <category term="stl" scheme="http://gyrojeff.moe/tags/stl/"/>
    
    <category term="模板" scheme="http://gyrojeff.moe/tags/%E6%A8%A1%E6%9D%BF/"/>
    
  </entry>
  
  <entry>
    <title>P2850 [USACO06DEC]Wormholes G - SPFA求负环</title>
    <link href="http://gyrojeff.moe/2020/09/20/P2850-USACO06DEC-Wormholes-G-SPFA%E6%B1%82%E8%B4%9F%E7%8E%AF/"/>
    <id>http://gyrojeff.moe/2020/09/20/P2850-USACO06DEC-Wormholes-G-SPFA%E6%B1%82%E8%B4%9F%E7%8E%AF/</id>
    <published>2020-09-20T05:53:06.000Z</published>
    <updated>2020-09-20T05:56:35.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目背景</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p><a href="https://www.luogu.com.cn/paste/mxuf6zpl">英文题面见此链接</a></p></div> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>John 在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边，并可以使你返回到过去的一个时刻（相对你进入虫洞之前）。</p><p>John 的每个农场有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 条小路（无向边）连接着 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 块地（从 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>∼</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1 \sim n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">∼</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 标号），并有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span> 个虫洞。</p><p>现在 John 想借助这些虫洞来回到过去（出发时刻之前），请你告诉他能办到吗。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输入的第一行是一个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span>，代表测试数据的组数。</p><p>每组测试数据的格式如下：</p><p>每组数据的第一行是三个用空格隔开的整数，分别代表农田的个数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span>，小路的条数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span>，以及虫洞的个数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span>。</p><p>每组数据的第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 到第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>m</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(m + 1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span> 行，每行有三个用空格隔开的整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo separator="true">,</mo><mi>p</mi></mrow><annotation encoding="application/x-tex">u, v, p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">p</span></span></span></span></span>，代表有一条连接 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 与 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span></span></span></span></span> 的小路，经过这条路需要花费 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">p</span></span></span></span></span> 的时间。</p><p>每组数据的第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>m</mi><mo>+</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(m + 2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span></span> 到第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>m</mi><mo>+</mo><mi>w</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(m + w + 1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.66666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span> 行，每行三个用空格隔开的整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo separator="true">,</mo><mi>p</mi></mrow><annotation encoding="application/x-tex">u, v, p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">p</span></span></span></span></span>，代表点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 存在一个虫洞，经过这个虫洞会到达点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span></span></span></span></span>，并回到 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">p</span></span></span></span></span> 秒之前。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>对于每组测试数据，输出一行一个字符串，如果能回到出发时刻之前，则输出 <code>YES</code>，否则输出 <code>NO</code>。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">23 3 11 2 21 3 42 3 13 1 33 2 11 2 32 3 43 1 8</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">NOYES</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><h4>样例 2 解释</h4><p>John 只需要沿着 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>→</mo><mn>2</mn><mo>→</mo><mn>3</mn><mo>→</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1 \rightarrow 2 \rightarrow 3 \rightarrow 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 的路径一直转圈即可，每转完一圈，时间就会减少一秒。</p><h4>数据范围与约定</h4><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>T</mi><mo>≤</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">1 \le T \le 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>500</mn></mrow><annotation encoding="application/x-tex">1 \le n \le 500</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span><span class="mord">0</span><span class="mord">0</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>2500</mn></mrow><annotation encoding="application/x-tex">1 \le m \le 2500</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span><span class="mord">5</span><span class="mord">0</span><span class="mord">0</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>w</mi><mo>≤</mo><mn>200</mn></mrow><annotation encoding="application/x-tex">1 \le w \le 200</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span><span class="mord">0</span><span class="mord">0</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>p</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">1 \le p \le 10^4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8304100000000001em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">p</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span>。</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>这里其实很显然，就是要求有没有负环。这里我主要想说的是为什么在这道题当中，从任意一点出发跑SPFA都是可以判断的。首先，在没有虫洞的情况下，图是双向且连同的，那就意味着无论如何我们都可以在节点之间往返。所以，如果在某一点存在一个负环，那必定可以从其他任意一点到达，从而不断优化最短路，达到用SPFA判断负环的目的。</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><p>下面是代码，其实就是裸的SPFA</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxm = <span class="number">25005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">5005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxw = <span class="number">2005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, m, T, w, ecnt = <span class="number">2</span>, head[maxn], dis[maxn], cnt[maxn];</span><br><span class="line"><span class="keyword">bool</span> in[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[(maxm &lt;&lt; <span class="number">1</span>) + maxw];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> dis, pos; &#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">spfa</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) dis[i] = <span class="number">2e9</span>, in[i] = <span class="literal">false</span>;</span><br><span class="line"><span class="built_in">queue</span>&lt;node&gt; q;</span><br><span class="line">dis[<span class="number">1</span>] = <span class="number">0</span>; q.push((node) &#123; dis[<span class="number">1</span>], <span class="number">1</span> &#125;);</span><br><span class="line">in[<span class="number">1</span>] = <span class="literal">true</span>;</span><br><span class="line">cnt[<span class="number">1</span>] = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.front().pos; q.pop(); in[u] = <span class="literal">false</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">cnt[v] = cnt[u] + <span class="number">1</span>;</span><br><span class="line"><span class="keyword">if</span> (cnt[v] &gt;= n) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">if</span> (!in[v]) &#123;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">in[v] = <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; T;</span><br><span class="line"><span class="keyword">while</span> (T --&gt; <span class="number">0</span>) &#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m &gt;&gt; w;</span><br><span class="line">ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="built_in">memset</span>(head, <span class="number">0</span>, <span class="keyword">sizeof</span>(head));</span><br><span class="line"><span class="built_in">memset</span>(g, <span class="number">0</span>, <span class="keyword">sizeof</span>(g));</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, p; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; p;</span><br><span class="line">add_edge(u, v, p);</span><br><span class="line">add_edge(v, u, p); </span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= w; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, p; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; p;</span><br><span class="line">add_edge(u, v, -p);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">bool</span> ans = spfa();</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; (ans ? <span class="string">&quot;YES&quot;</span> : <span class="string">&quot;NO&quot;</span>) &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;style&gt;
spa</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="SPFA" scheme="http://gyrojeff.moe/tags/SPFA/"/>
    
    <category term="负环" scheme="http://gyrojeff.moe/tags/%E8%B4%9F%E7%8E%AF/"/>
    
  </entry>
  
  <entry>
    <title>SAO Alicization: 完结撒花，感谢陪伴</title>
    <link href="http://gyrojeff.moe/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/"/>
    <id>http://gyrojeff.moe/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/</id>
    <published>2020-09-20T02:16:43.000Z</published>
    <updated>2020-09-20T05:20:13.000Z</updated>
    
    <content type="html"><![CDATA[<p>完结撒花，感谢陪伴。</p><p>从初三上的十月七号的24:30到现在，整整两年的Alicization篇终于完结了。</p><p>我至今记得那个国庆假期的最后一天的凌晨，我躺在床上等着SAO开播，之前十点半的一档是终将成为你。</p><p>Alicization见证了我初三上每周六的快乐，见证了我下午买回家的晚上用保温杯里的热水偷偷泡的泡面，见证了我高一上的无忧无虑，也见证了我的当下，和这过去这个让我保守拷打的暑假。她确实见证了我过去的两年，从懵懂和无知，从毫无主见随风而倒，到些许的成熟？（雾</p><p>虽然故事的叙述和对原作的改编让人接受不能，整部作品饱受争议，评分一度走低，但仍不能将作品贬得一无是处。</p><p>纵使经费充足，因为意外，赶工却仍在发生，但无论是作画质量还是画面数量都保持在可以接受的范围之内，甚至说，超乎原有的预估。</p><p>创新性的摄影处理让人大开眼界，让原本就已不错的原画提升了一个层次，极富美感和高级感，属实惊艳。特别是后半段打戏有增无减，在如此密集的工作量下还能保持这样的水准确实让人肃然起敬。这一组动画人，真的让人钦佩。值得尊重。</p><p>以及，最后一集留下了这么多坑，如果真的没有续作的话，我是不信的（否则着胆子也太大了</p><p>此外，进击篇的企划出了，让我们在艾恩葛朗特再会。换了监督，希望桐人和亚丝娜的狗粮能让我吃到饱。</p><p>SAO，yyds</p><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/1.png" class=""><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/2.png" class=""><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/3.png" class=""><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/4.png" class=""><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/5.png" class=""><img src="/2020/09/20/SAO-Alicization-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1%EF%BC%8C%E6%84%9F%E8%B0%A2%E9%99%AA%E4%BC%B4/6.png" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;完结撒花，感谢陪伴。&lt;/p&gt;
&lt;p&gt;从初三上的十月七号的24:30到现在，整整两年的Alicization篇终于完结了。&lt;/p&gt;
&lt;p&gt;我至今记得那个国庆假期的最后一天的凌晨，我躺在床上等着SAO开播，之前十点半的一档是终将成为你。&lt;/p&gt;
&lt;p&gt;Alicization见证</summary>
      
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="SAO" scheme="http://gyrojeff.moe/tags/SAO/"/>
    
    <category term="刀剑神域" scheme="http://gyrojeff.moe/tags/%E5%88%80%E5%89%91%E7%A5%9E%E5%9F%9F/"/>
    
    <category term="Alicization" scheme="http://gyrojeff.moe/tags/Alicization/"/>
    
  </entry>
  
  <entry>
    <title>P3385 【模板】负环 - SPFA模板</title>
    <link href="http://gyrojeff.moe/2020/09/19/P3385-%E3%80%90%E6%A8%A1%E6%9D%BF%E3%80%91%E8%B4%9F%E7%8E%AF-SPFA%E6%A8%A1%E6%9D%BF/"/>
    <id>http://gyrojeff.moe/2020/09/19/P3385-%E3%80%90%E6%A8%A1%E6%9D%BF%E3%80%91%E8%B4%9F%E7%8E%AF-SPFA%E6%A8%A1%E6%9D%BF/</id>
    <published>2020-09-19T15:16:25.000Z</published>
    <updated>2020-09-19T15:27:53.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="关于SPFA"><a href="#关于SPFA" class="headerlink" title="关于SPFA"></a>关于SPFA</h1><div class="note danger">他死了。</div><h1 id="SPFA原理"><a href="#SPFA原理" class="headerlink" title="SPFA原理"></a>SPFA原理</h1><p>还是根据图论基本方程进行松弛操作，当无法继续松弛的时候，其实就已经达到了最优化，求出了单源最短路了。</p><h1 id="为什么SPFA死了"><a href="#为什么SPFA死了" class="headerlink" title="为什么SPFA死了"></a>为什么SPFA死了</h1><p>因为数据很好卡。因为SPFA用的是双端队列，所以对于一些精心构造的图来说，复杂度其实是可以退化到$O(mn)$的。</p><h1 id="为什么SPFA死了还要用"><a href="#为什么SPFA死了还要用" class="headerlink" title="为什么SPFA死了还要用"></a>为什么SPFA死了还要用</h1><ul><li>因为可以求负环</li><li>因为可以求带有负权边的最短路</li></ul><h1 id="SPFA和Dijkstra的区别"><a href="#SPFA和Dijkstra的区别" class="headerlink" title="SPFA和Dijkstra的区别"></a>SPFA和Dijkstra的区别</h1><ul><li>Dijkstra+heap是用小根堆，每次取出$\text {dis}$最小的点，来更新距离，那么这个点来说，最小距离就是当前的d。</li><li>SPFA是用双端队列，每次取出队头，来更新距离，它之后可能还会入队。它是一种动态逼近法，因为每次松弛距离都会减小，所以松弛一定会有结束的。如果一个点入队超过$n$次就是存在负环。</li><li>如果是稠密图，Dijkstra + Heap比SPFA快。稀疏图则SPFA更快。SPFA可以有SLF和LLL两种优化，SLF就是$\text {dis}$比队头小就插入队头，否则插入队尾。</li><li>Dijkstra和Prim也很相似，它们的区别主要是d的含义，前者是到s的临时最短距离，后者是到树的临时最短距离，相同点是，每次找d最小的更新其它点的距离。</li></ul><blockquote><p>Ref: <a href="https://www.cnblogs.com/flipped/p/6830073.html">https://www.cnblogs.com/flipped/p/6830073.html</a></p></blockquote><h1 id="如何用SPFA判断负环"><a href="#如何用SPFA判断负环" class="headerlink" title="如何用SPFA判断负环"></a>如何用SPFA判断负环</h1><p>我们现在来思考一个问题：如果一张图上有$n$个点，那如果一条路径上有超过$n$个点会怎么样？</p><p>根据容斥原理，我们必定可以在路径上找到两个相同的点。换句话说，从一个点出发，又回到了这个点。然而整个过程确实求最短路的过程，路程$\text {dis}$不断在优化，所以这个环一定是负环（即路径和为负数）。而一条路径上有超过$n$个点，等价于一条路径有不少于$n$条边。而判断路径有多少条边其实非常容易，我们只需要在做松弛操作的时候更新记录路径条数的$\text {cnt}$数组就可以了：</p><script type="math/tex; mode=display">    \text {dis}[u] + g[e].w < \text {dis}[v] \Rightarrow \text {cnt} [v] = \text {cnt} [u] + 1</script><h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>给定一个 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 个点的有向图，请求出图中是否存在<strong>从顶点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 出发能到达</strong>的负环。</p><p>负环的定义是：一条边权之和为负数的回路。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p><strong>本题单测试点有多组测试数据</strong>。</p><p>输入的第一行是一个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span></span></span></span></span>，表示测试数据的组数。对于每组数据的格式如下：</p><p>第一行有两个整数，分别表示图的点数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 和接下来给出边信息的条数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span>。</p><p>接下来 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 行，每行三个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo separator="true">,</mo><mi>w</mi></mrow><annotation encoding="application/x-tex">u, v, w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span>。</p><ul><li>若 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">w \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span>，则表示存在一条从 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 至 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span></span></span></span></span> 边权为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span> 的边，还存在一条从 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span></span></span></span></span> 至 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 边权为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span> 的边。</li><li>若 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">w &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span>，则只表示存在一条从 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>u</mi></mrow><annotation encoding="application/x-tex">u</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">u</span></span></span></span></span> 至 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>v</mi></mrow><annotation encoding="application/x-tex">v</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span></span></span></span></span> 边权为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi></mrow><annotation encoding="application/x-tex">w</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span></span></span></span></span> 的边。</li></ul></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>对于每组数据，输出一行一个字符串，若所求负环存在，则输出 <code>YES</code>，否则输出 <code>NO</code>。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">23 41 2 21 3 42 3 13 1 -33 31 2 32 3 43 1 -8</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">NOYES</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><h4>数据规模与约定</h4><p>对于全部的测试点，保证：</p><ul><li><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>2</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">1 \leq n \leq 2 \times 10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>3</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">1 \leq m \leq 3 \times 10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>。</li><li><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>u</mi><mo separator="true">,</mo><mi>v</mi><mo>≤</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">1 \leq u, v \leq n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8304100000000001em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">v</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup><mo>≤</mo><mi>w</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">-10^4 \leq w \leq 10^4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.950078em;vertical-align:-0.13597em;"></span><span class="mord">−</span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.02691em;">w</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span>。</li><li><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><mi>T</mi><mo>≤</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">1 \leq T \leq 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">T</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">0</span></span></span></span></span>。</li></ul><h4>提示</h4><p>请注意，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> <strong>不是</strong>图的边数。</p></div> <!----></div><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxm = <span class="number">3005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">2005</span>;</span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">int</span> n, m;</span><br><span class="line"><span class="keyword">int</span> head[maxn], dis[maxn], cnt[maxn];</span><br><span class="line"><span class="keyword">bool</span> in[maxn];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[maxm &lt;&lt; <span class="number">1</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span> <span class="keyword">int</span> dis, pos; &#125;;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">spfa</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">dis[i] = <span class="number">2e9</span>, in[i] = <span class="literal">false</span>;</span><br><span class="line"><span class="built_in">queue</span>&lt;node&gt; q;</span><br><span class="line">dis[<span class="number">1</span>] = <span class="number">0</span>; q.push((node) &#123; dis[<span class="number">1</span>], <span class="number">1</span> &#125;);</span><br><span class="line">cnt[<span class="number">1</span>] = <span class="number">0</span>; in[<span class="number">1</span>] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.front().pos; q.pop();</span><br><span class="line">in[u] = <span class="literal">false</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">cnt[v] = cnt[u] + <span class="number">1</span>;</span><br><span class="line"><span class="keyword">if</span> (cnt[v] &gt;= n) <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">if</span> (!in[v]) &#123;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">in[v] = <span class="literal">true</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> T; <span class="built_in">cin</span> &gt;&gt; T;</span><br><span class="line"><span class="keyword">while</span> (T --&gt; <span class="number">0</span>) &#123;</span><br><span class="line">ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="built_in">memset</span>(g, <span class="number">0</span>, <span class="keyword">sizeof</span>(g));</span><br><span class="line"><span class="built_in">memset</span>(head, <span class="number">0</span>, <span class="keyword">sizeof</span>(head));</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line"><span class="keyword">if</span> (w &gt;= <span class="number">0</span>) &#123;</span><br><span class="line">add_edge(u, v, w);</span><br><span class="line">add_edge(v, u, w);</span><br><span class="line">&#125; <span class="keyword">else</span> add_edge(u, v, w);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; (spfa() ? <span class="string">&quot;YES&quot;</span> : <span class="string">&quot;NO&quot;</span>) &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;关于SPFA&quot;&gt;&lt;a href=&quot;#关于SPFA&quot; class=&quot;headerlink&quot; title=&quot;关于SPFA&quot;&gt;&lt;/a&gt;关于SPFA&lt;/h1&gt;&lt;div class=&quot;note danger&quot;&gt;他死了。&lt;/div&gt;

&lt;h1 id=&quot;SPFA原理&quot;&gt;&lt;a h</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="SPFA" scheme="http://gyrojeff.moe/tags/SPFA/"/>
    
    <category term="负环" scheme="http://gyrojeff.moe/tags/%E8%B4%9F%E7%8E%AF/"/>
    
    <category term="最短路" scheme="http://gyrojeff.moe/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    
  </entry>
  
  <entry>
    <title>P4011 孤岛营救问题 - 分层图最短路</title>
    <link href="http://gyrojeff.moe/2020/09/19/P4011-%E5%AD%A4%E5%B2%9B%E8%90%A5%E6%95%91%E9%97%AE%E9%A2%98-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    <id>http://gyrojeff.moe/2020/09/19/P4011-%E5%AD%A4%E5%B2%9B%E8%90%A5%E6%95%91%E9%97%AE%E9%A2%98-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/</id>
    <published>2020-09-19T11:29:12.000Z</published>
    <updated>2020-09-19T11:46:02.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----><style>span.katex-html {    display:none}</style> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1944</mn></mrow><annotation encoding="application/x-tex">1944</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">9</span><span class="mord">4</span><span class="mord">4</span></span></span></span></span> 年，特种兵麦克接到国防部的命令，要求立即赶赴太平洋上的一个孤岛，营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里，迷宫地形复杂，但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形，其南北方向被划分为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span></span></span></span></span> 行，东西方向被划分为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>M</mi></mrow><annotation encoding="application/x-tex">M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span></span></span></span></span> 列，于是整个迷宫被划分为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>×</mo><mi>M</mi></mrow><annotation encoding="application/x-tex">N\times M</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span></span></span></span></span> 个单元。每一个单元的位置可用一个有序数对(单元的行号，单元的列号)来表示。南北或东西方向相邻的 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 个单元之间可能互通，也可能有一扇锁着的门，或者是一堵不可逾越的墙。迷宫中有一些单元存放着钥匙，并且所有的门被分成<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span> 类，打开同一类的门的钥匙相同，不同类门的钥匙不同。</p><p>大兵瑞恩被关押在迷宫的东南角，即 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>N</mi><mo separator="true">,</mo><mi>M</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(N,M)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mclose">)</span></span></span></span></span> 单元里，并已经昏迷。迷宫只有一个入口，在西北角。也就是说，麦克可以直接进入 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span> 单元。另外，麦克从一个单元移动到另一个相邻单元的时间为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span>，拿取所在单元的钥匙的时间以及用钥匙开门的时间可忽略不计。</p><p>试设计一个算法，帮助麦克以最快的方式到达瑞恩所在单元，营救大兵瑞恩。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 行有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span></span></span></span></span> 个整数，分别表示 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo separator="true">,</mo><mi>M</mi><mo separator="true">,</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">N,M,P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span> 的值。</p><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn></mrow><annotation encoding="application/x-tex">2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 行是 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span></span></span></span></span>，表示迷宫中门和墙的总数。</p><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><mo>+</mo><mn>2</mn></mrow><annotation encoding="application/x-tex">I+2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">2</span></span></span></span></span> 行<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><mi>I</mi><mo>≤</mo><mi>K</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1\leq I\leq K)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.07847em;">I</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mclose">)</span></span></span></span></span>，有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">5</span></span></span></span></span> 个整数，依次为<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>G</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">X_{i1},Y_{i1},X_{i2},Y_{i2},G_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>：</p><ul><li><p>当 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mi>i</mi></msub><mo>≥</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">G_i \geq 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 时，表示 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(X_{i1},Y_{i1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> 单元与 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(X_{i2},Y_{i2})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> 单元之间有一扇第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">G_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span> 类的门</p></li><li><p>当 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mi>i</mi></msub><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">G_i=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span> 时，表示 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(X_{i1},Y_{i1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> 单元与 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(X_{i2},Y_{i2})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> 单元之间有一堵不可逾越的墙（其中，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mi mathvariant="normal">∣</mi><mo>+</mo><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mi mathvariant="normal">∣</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">|X_{i1}-X_{i2}|+|Y_{i1}-Y_{i2}|=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>≤</mo><msub><mi>G</mi><mi>i</mi></msub><mo>≤</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">0\leq G_i\leq P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span>）。</p></li></ul><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi><mo>+</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">K+3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span></span></span></span></span> 行是一个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span></span></span></span></span>，表示迷宫中存放的钥匙总数。</p><p>第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi><mo>+</mo><mn>3</mn><mo>+</mo><mi>J</mi></mrow><annotation encoding="application/x-tex">K+3+J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.09618em;">J</span></span></span></span></span>  行<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>≤</mo><mi>J</mi><mo>≤</mo><mi>S</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1\leq J\leq S)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.09618em;">J</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>，有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">3</span></span></span></span></span> 个整数，依次为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Q</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">X_{i1},Y_{i1},Q_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault">Q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span>：表示第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>J</mi></mrow><annotation encoding="application/x-tex">J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.09618em;">J</span></span></span></span></span> 把钥匙存放在 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo separator="true">,</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(X_{i1},Y_{i1})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>单元里，并且第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>J</mi></mrow><annotation encoding="application/x-tex">J</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.09618em;">J</span></span></span></span></span> 把钥匙是用来开启第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>Q</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">Q_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault">Q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span></span> 类门的。（其中<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><msub><mi>Q</mi><mi>i</mi></msub><mo>≤</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">1\leq Q_i\leq P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault">Q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span>）。</p><p>输入数据中同一行各相邻整数之间用一个空格分隔。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>将麦克营救到大兵瑞恩的最短时间的值输出。如果问题无解，则输出 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">−</span><span class="mord">1</span></span></span></span></span>。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">4 4 991 2 1 3 21 2 2 2 02 1 2 2 02 1 3 1 02 3 3 3 02 4 3 4 13 2 3 3 03 3 4 3 04 3 4 4 022 1 24 2 1</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">14</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mi mathvariant="normal">∣</mi><mo>+</mo><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mo>−</mo><msub><mi>Y</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mi mathvariant="normal">∣</mi><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mn>0</mn><mo>≤</mo><msub><mi>G</mi><mi>i</mi></msub><mo>≤</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">|X_{i1}-X_{i2}|+|Y_{i1}-Y_{i2}|=1,0\leq G_i\leq P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.07847em;">X</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.07847em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:-0.22222em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathdefault">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span></p><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>≤</mo><msub><mi>Q</mi><mi>i</mi></msub><mo>≤</mo><mi>P</mi></mrow><annotation encoding="application/x-tex">1\leq Q_i\leq P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord"><span class="mord mathdefault">Q</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.31166399999999994em;"><span style="top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span></span></span></span></span></p><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo separator="true">,</mo><mi>M</mi><mo separator="true">,</mo><mi>P</mi><mo>≤</mo><mn>10</mn><mo separator="true">,</mo><mi>K</mi><mo>&lt;</mo><mn>150</mn><mo separator="true">,</mo><mi>S</mi><mo>≤</mo><mn>14</mn></mrow><annotation encoding="application/x-tex">N,M,P\leq10, K&lt;150,S\leq 14</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">M</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.13889em;">P</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord">5</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05764em;">S</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">4</span></span></span></span></span></p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>题目中问要花费的最短时间，那其实就可以联想到最短路问题或者直接BFS。那记下来的问题就在于如何建图。我们可以发现，这里有着$p$把钥匙，要处理好这些钥匙是问题的关键。所以，我们可以建立分层图，而且分层图的层数是当前所有的钥匙的状态压缩。</p><p>形象地解释的话：如果现在是$i$层，那么我们先将$i$转换为二进制（假设一共有4种钥匙种类，那么$i$可能是：</p><script type="math/tex; mode=display">(1101)_2</script><p>意思就是有着第一种、第三种、第四种钥匙的层（从后往前看）。如果无法理解分层图，那么不妨看看前两篇博文，都是分层图的题。</p><p>所以接下来，我们只需要关心如何建立图，图建立好之后我们就可以扔给堆优化过的Dijkstra直接算就行了。</p><p>我们根据以下几点建图：</p><ul><li>如果有不可逾越的墙，不连边</li><li>如果输入中没有提到这条边，在每层都连</li><li>如果输入中提到了，且需要钥匙，那么先循环，然后按位运算匹配当前层是否拥有开门钥匙。若有则连边</li><li>如果这一点有钥匙，那么在这个点，从所有没有钥匙的层，可以转移到有钥匙的层，连边。</li></ul><p>最后答案其实就是把每一层的$(N, M)$遍历一遍去一个最小。</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxg = <span class="number">10</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxk = <span class="number">155</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxs = <span class="number">15</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">11</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxm = <span class="number">11</span>;</span><br><span class="line"><span class="keyword">int</span> n, m, p, k, s;</span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">int</span> head[maxn * maxm * (<span class="number">1</span> &lt;&lt; maxg)], dis[maxn * maxm * (<span class="number">1</span> &lt;&lt; maxg)];</span><br><span class="line"><span class="keyword">bool</span> vis[maxn * maxm * (<span class="number">1</span> &lt;&lt; maxg)];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[(<span class="number">1</span> &lt;&lt; maxg) * (maxk * <span class="number">2</span> * <span class="number">4</span> + maxs)];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125; </span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> x1, <span class="keyword">int</span> y1, <span class="keyword">int</span> l1, <span class="keyword">int</span> x2, <span class="keyword">int</span> y2, <span class="keyword">int</span> l2, <span class="keyword">int</span> w)</span> </span>&#123;</span><br><span class="line">add_edge(y1 + (x1 - <span class="number">1</span>) * m + m * n * l1, </span><br><span class="line"> y2 + (x2 - <span class="number">1</span>) * m + m * n * l2, w);</span><br><span class="line">&#125;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">id</span> <span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> (x - <span class="number">1</span>) * m + y ;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">int</span> <span class="built_in">map</span>[<span class="number">200</span>][<span class="number">200</span>];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> dis, pos;</span><br><span class="line"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123; <span class="keyword">return</span> a.dis &gt; b.dis; &#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;node&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m * n * (<span class="number">1</span> &lt;&lt; p); i ++) dis[i] = <span class="number">2e9</span>;</span><br><span class="line">dis[<span class="number">1</span>] = <span class="number">0</span>;</span><br><span class="line">q.push((node) &#123; dis[<span class="number">1</span>], <span class="number">1</span> &#125;);</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.top().pos; q.pop();</span><br><span class="line"><span class="keyword">if</span> (vis[u]) <span class="keyword">continue</span>;</span><br><span class="line">vis[u] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m &gt;&gt; p &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= k; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> x1, x2, y1, y2, g;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; x1 &gt;&gt; y1 &gt;&gt; x2 &gt;&gt; y2 &gt;&gt; g;</span><br><span class="line"><span class="keyword">if</span> (g == <span class="number">0</span>) g = <span class="number">-1</span>;</span><br><span class="line"><span class="built_in">map</span>[id(x1, y1)][id(x2, y2)] = g;</span><br><span class="line"><span class="built_in">map</span>[id(x2, y2)][id(x1, y1)] = g;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">0</span>; l &lt; (<span class="number">1</span> &lt;&lt; p); l ++) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123; <span class="comment">// x</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= m; j ++) &#123; <span class="comment">// y</span></span><br><span class="line"><span class="comment">// right</span></span><br><span class="line"><span class="keyword">if</span> (j &lt; m) &#123;</span><br><span class="line"><span class="keyword">int</span> g = <span class="built_in">map</span>[id(i, j)][id(i, j + <span class="number">1</span>)];</span><br><span class="line"><span class="keyword">if</span> (g == <span class="number">0</span>) &#123;</span><br><span class="line">add_edge(i, j, l, i, j + <span class="number">1</span>, l, <span class="number">1</span>);</span><br><span class="line">add_edge(i, j + <span class="number">1</span>, l, i, j, l, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span> ((l &amp; (<span class="number">1</span> &lt;&lt; (g - <span class="number">1</span>))) &amp;&amp; (g != <span class="number">0</span>) &amp;&amp; (g != <span class="number">-1</span>)) &#123;</span><br><span class="line">add_edge(i, j, l, i, j + <span class="number">1</span>, l, <span class="number">1</span>);</span><br><span class="line">add_edge(i, j + <span class="number">1</span>, l, i, j, l, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// down</span></span><br><span class="line"><span class="keyword">if</span> (i &lt; n) &#123;</span><br><span class="line"><span class="keyword">int</span> g = <span class="built_in">map</span>[id(i, j)][id(i + <span class="number">1</span>, j)];</span><br><span class="line"><span class="keyword">if</span> (g == <span class="number">0</span>) &#123;</span><br><span class="line">add_edge(i, j, l, i + <span class="number">1</span>, j, l, <span class="number">1</span>);</span><br><span class="line">add_edge(i + <span class="number">1</span>, j, l, i, j, l, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">if</span> ((l &amp; (<span class="number">1</span> &lt;&lt; (g - <span class="number">1</span>))) &amp;&amp; (g != <span class="number">0</span>) &amp;&amp; (g != <span class="number">-1</span>)) &#123;</span><br><span class="line">add_edge(i, j, l, i + <span class="number">1</span>, j, l, <span class="number">1</span>);</span><br><span class="line">add_edge(i + <span class="number">1</span>, j, l, i, j, l, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125; </span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; s;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= s; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> x, y, q; <span class="built_in">cin</span> &gt;&gt; x &gt;&gt; y &gt;&gt; q;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">0</span>; l &lt; (<span class="number">1</span> &lt;&lt; p); l ++) &#123;</span><br><span class="line"><span class="keyword">if</span> (l &amp; (<span class="number">1</span> &lt;&lt; (q - <span class="number">1</span>))) <span class="keyword">continue</span>;</span><br><span class="line">add_edge(x, y, l, x, y, (l | (<span class="number">1</span> &lt;&lt; (q - <span class="number">1</span>))), <span class="number">0</span>);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">dijkstra();</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">2e9</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= (<span class="number">1</span> &lt;&lt; p); i ++) ans = min(ans, dis[m * n * i]);</span><br><span class="line"><span class="keyword">if</span> (ans == <span class="number">2e9</span>) ans = <span class="number">-1</span>;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="感谢"><a href="#感谢" class="headerlink" title="感谢"></a>感谢</h1><p>感谢@nwt（在右边的友链里 wennitao），在debug的时候提供了莫大的帮助。（qhy是屑）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt;&lt;sty</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="堆" scheme="http://gyrojeff.moe/tags/%E5%A0%86/"/>
    
    <category term="Dijkstra" scheme="http://gyrojeff.moe/tags/Dijkstra/"/>
    
    <category term="最短路" scheme="http://gyrojeff.moe/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    
    <category term="分层图" scheme="http://gyrojeff.moe/tags/%E5%88%86%E5%B1%82%E5%9B%BE/"/>
    
  </entry>
  
  <entry>
    <title>P4009 汽车加油行驶问题 - 分层图最短路</title>
    <link href="http://gyrojeff.moe/2020/09/18/P4009-%E6%B1%BD%E8%BD%A6%E5%8A%A0%E6%B2%B9%E8%A1%8C%E9%A9%B6%E9%97%AE%E9%A2%98-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    <id>http://gyrojeff.moe/2020/09/18/P4009-%E6%B1%BD%E8%BD%A6%E5%8A%A0%E6%B2%B9%E8%A1%8C%E9%A9%B6%E9%97%AE%E9%A2%98-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/</id>
    <published>2020-09-18T14:50:07.000Z</published>
    <updated>2020-09-19T11:36:05.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----> <style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>给定一个 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>×</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">N \times N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span></span></span></span></span> 的方形网格，设其左上角为起点◎，坐标<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07847em;">X</span></span></span></span></span> 轴向右为正， <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Y</mi></mrow><annotation encoding="application/x-tex">Y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span></span></span></span></span> 轴向下为正，每个方格边长为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> ，如图所示。</p><p><img src="https://cdn.luogu.com.cn/upload/pic/12156.png" alt=""></p><p>一辆汽车从起点◎出发驶向右下角终点▲，其坐标为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>N</mi><mo separator="true">,</mo><mi>N</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(N,N)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mclose">)</span></span></span></span></span>。</p><p>在若干个网格交叉点处，设置了油库，可供汽车在行驶途中加油。汽车在行驶过程中应遵守如下规则:</p><ol><li><p>汽车只能沿网格边行驶，装满油后能行驶 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span></span></span></span></span> 条网格边。出发时汽车已装满油，在起点与终点处不设油库。</p></li><li><p>汽车经过一条网格边时，若其 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>X</mi></mrow><annotation encoding="application/x-tex">X</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07847em;">X</span></span></span></span></span> 坐标或 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Y</mi></mrow><annotation encoding="application/x-tex">Y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.22222em;">Y</span></span></span></span></span> 坐标减小，则应付费用 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi></mrow><annotation encoding="application/x-tex">B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.05017em;">B</span></span></span></span></span> ，否则免付费用。</p></li><li><p>汽车在行驶过程中遇油库则应加满油并付加油费用 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault">A</span></span></span></span></span>。</p></li><li><p>在需要时可在网格点处增设油库，并付增设油库费用 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>C</mi></mrow><annotation encoding="application/x-tex">C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span></span></span></span></span>(不含加油费用<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault">A</span></span></span></span></span> )。</p></li><li><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo separator="true">,</mo><mi>K</mi><mo separator="true">,</mo><mi>A</mi><mo separator="true">,</mo><mi>B</mi><mo separator="true">,</mo><mi>C</mi></mrow><annotation encoding="application/x-tex">N,K,A,B,C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05017em;">B</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span></span></span></span></span> 均为正整数， 且满足约束: <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>N</mi><mo>≤</mo><mn>100</mn><mo separator="true">,</mo><mn>2</mn><mo>≤</mo><mi>K</mi><mo>≤</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">2\leq N\leq 100,2 \leq K \leq 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8193em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">0</span></span></span></span></span>。</p></li></ol><p>设计一个算法，求出汽车从起点出发到达终点所付的最小费用。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>文件的第一行是 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo separator="true">,</mo><mi>K</mi><mo separator="true">,</mo><mi>A</mi><mo separator="true">,</mo><mi>B</mi><mo separator="true">,</mo><mi>C</mi></mrow><annotation encoding="application/x-tex">N,K,A,B,C</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">K</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05017em;">B</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.07153em;">C</span></span></span></span></span> 的值。</p><p>第二行起是一个<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>×</mo><mi>N</mi></mrow><annotation encoding="application/x-tex">N\times N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span></span></span></span></span> 的 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">0-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 方阵,每行 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi></mrow><annotation encoding="application/x-tex">N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span></span></span></span></span> 个值,至 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>N</mi><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">N+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.76666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault" style="margin-right:0.10903em;">N</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 行结束。</p><p>方阵的第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.65952em;vertical-align:0em;"></span><span class="mord mathdefault">i</span></span></span></span></span> 行第 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>j</mi></mrow><annotation encoding="application/x-tex">j</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.85396em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.05724em;">j</span></span></span></span></span> 列处的值为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 表示在网格交叉点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>i</mi><mo separator="true">,</mo><mi>j</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(i,j)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathdefault">i</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.05724em;">j</span><span class="mclose">)</span></span></span></span></span> 处设置了一个油库,为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span> 时表示未设油库。各行相邻两个数以空格分隔。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>程序运行结束时,输出最小费用。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">9 3 2 3 60 0 0 0 1 0 0 0 00 0 0 1 0 1 1 0 01 0 1 0 0 0 0 1 00 0 0 0 0 1 0 0 11 0 0 1 0 0 1 0 00 1 0 0 0 0 0 1 00 0 0 0 1 0 0 0 11 0 0 1 0 0 0 1 00 1 0 0 0 0 0 0 0</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">12</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p><span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>100</mn><mo separator="true">,</mo><mn>2</mn><mo>≤</mo><mi>k</mi><mo>≤</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">2 \leq n \leq 100,2 \leq k \leq 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83041em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">0</span></span></span></span></span></p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>这道题一开始分层图的建立着实没有想出来，甚至看了题解都没想出来（我，菜）。所以特此记录。其实是这样的，因为一辆车总共只有$k$格油，所以我们可以建立$k + 1$层图，第$i$层图代表已经用掉了多少油。</p><p>接下来，我们考虑这个图如何构建：</p><ul><li>我们用三元组$(i, j, l)$来表示点，意为：第$l$层中的$(i, j)$</li><li>因为题目中说不消耗钱的话只能向右或者向下，所以：<script type="math/tex; mode=display">(i, j, l) \rightarrow (i, j + 1, l + 1), w = 0</script><script type="math/tex; mode=display">(i, j, l) \rightarrow (i + 1, j + 1, l), w = 0</script></li><li>因为题目中说向左或者向上要花钱，所以：<script type="math/tex; mode=display">(i, j, l) \rightarrow (i - 1, j, l + 1), w = b</script><script type="math/tex; mode=display">(i, j, l) \rightarrow (i, j - 1, l + 1), w = b</script></li><li>在加油站的时候，情况和上面的就不太一样了，加油站的点应该都要指向该点的第$0$层（因为油必须加满），而且费用为$A$:<script type="math/tex; mode=display">(i, j, l) \rightarrow (i, j, 0), w = A</script></li><li>还有就是不在加油站时可以随意添加油站，就是要花钱罢了：<script type="math/tex; mode=display">(i, j, l) \rightarrow (i, j, 0), w = A + C</script></li></ul><p>在图建立完之后，我们就可以发现：求最小费用其实就是求最短路，然后最后无论剩多少油都是可能的，所以我们要把$(n, n, l)$都遍历一下取一个最小。</p><p><strong>还有一点：要注意不要数组越界，这就是为什么代码里有好多<code>if</code></strong></p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> MAXN = <span class="number">105</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> MAXK = <span class="number">15</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, k, a, b, c;</span><br><span class="line"><span class="keyword">int</span> head[MAXN * MAXN * MAXK], dis[MAXN * MAXN * MAXK], ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">bool</span> vis[MAXN * MAXN * MAXK];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[<span class="number">2</span> * <span class="number">7</span> * MAXK * MAXN * MAXN];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> x1, <span class="keyword">int</span> y1, <span class="keyword">int</span> l1, <span class="keyword">int</span> x2, <span class="keyword">int</span> y2, <span class="keyword">int</span> l2, <span class="keyword">int</span> w)</span> </span>&#123;</span><br><span class="line">add_edge((y1 - <span class="number">1</span>) * n + x1 + l1 * n * n, (y2 - <span class="number">1</span>) * n + x2 + l2 * n * n, w);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> dis, pos;</span><br><span class="line"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123; <span class="keyword">return</span> a.dis &gt; b.dis; &#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;node&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n * n * (k + <span class="number">1</span>); i ++) dis[i] = ((<span class="number">1</span> &lt;&lt; <span class="number">30</span>) - <span class="number">1</span>) * <span class="number">2</span>;</span><br><span class="line">dis[<span class="number">1</span>] = <span class="number">0</span>;</span><br><span class="line">q.push((node) &#123; dis[<span class="number">1</span>], <span class="number">1</span> &#125;);</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.top().pos; q.pop();</span><br><span class="line"><span class="keyword">if</span> (vis[u]) <span class="keyword">continue</span>;</span><br><span class="line">vis[u] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k &gt;&gt; a &gt;&gt; b &gt;&gt; c;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++) &#123;</span><br><span class="line"><span class="keyword">int</span> oil = <span class="number">0</span>; <span class="built_in">cin</span> &gt;&gt; oil;</span><br><span class="line"><span class="keyword">if</span> (oil) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">1</span>; l &lt;= k; l ++)</span><br><span class="line">add_edge(j, i, l, j, i, <span class="number">0</span>, a);</span><br><span class="line"><span class="keyword">if</span> (i &lt; n) add_edge(j, i, <span class="number">0</span>, j, i + <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">if</span> (j &lt; n) add_edge(j, i, <span class="number">0</span>, j + <span class="number">1</span>, i, <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">if</span> (i &gt; <span class="number">1</span>) add_edge(j, i, <span class="number">0</span>, j, i - <span class="number">1</span>, <span class="number">1</span>, b);</span><br><span class="line"><span class="keyword">if</span> (j &gt; <span class="number">1</span>) add_edge(j, i, <span class="number">0</span>, j - <span class="number">1</span>, i, <span class="number">1</span>, b);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">0</span>; l &lt; k; l ++) &#123;</span><br><span class="line"><span class="keyword">if</span> (i &lt; n) add_edge(j, i, l, j, i + <span class="number">1</span>, l + <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">if</span> (j &lt; n) add_edge(j, i, l, j + <span class="number">1</span>, i, l + <span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">if</span> (i &gt; <span class="number">1</span>) add_edge(j, i, l, j, i - <span class="number">1</span>, l + <span class="number">1</span>, b);</span><br><span class="line"><span class="keyword">if</span> (j &gt; <span class="number">1</span>) add_edge(j, i, l, j - <span class="number">1</span>, i, l + <span class="number">1</span>, b);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">1</span>; l &lt;= k; l ++)</span><br><span class="line">add_edge(j, i, l, j, i, <span class="number">0</span>, c + a);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">dijkstra();</span><br><span class="line"><span class="keyword">int</span> ans = ((<span class="number">1</span> &lt;&lt; <span class="number">30</span>) - <span class="number">1</span>) * <span class="number">2</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">0</span>; l &lt;= k; l ++) ans = min(ans, dis[n * n * (<span class="number">1</span> + l)]);</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;st</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="堆" scheme="http://gyrojeff.moe/tags/%E5%A0%86/"/>
    
    <category term="Dijkstra" scheme="http://gyrojeff.moe/tags/Dijkstra/"/>
    
    <category term="最短路" scheme="http://gyrojeff.moe/tags/%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    
    <category term="分层图" scheme="http://gyrojeff.moe/tags/%E5%88%86%E5%B1%82%E5%9B%BE/"/>
    
  </entry>
  
  <entry>
    <title>P4568 [JLOI2011]飞行路线 - 分层图最短路</title>
    <link href="http://gyrojeff.moe/2020/09/18/P4568-JLOI2011-%E9%A3%9E%E8%A1%8C%E8%B7%AF%E7%BA%BF-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    <id>http://gyrojeff.moe/2020/09/18/P4568-JLOI2011-%E9%A3%9E%E8%A1%8C%E8%B7%AF%E7%BA%BF-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/</id>
    <published>2020-09-18T09:12:22.000Z</published>
    <updated>2020-09-19T11:35:05.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><div data-v-4b38bb56="" data-v-7b37eb95="" data-v-796309f8=""><!----><style>span.katex-html {    display:none}</style> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>Alice 和 Bob 现在要乘飞机旅行，他们选择了一家相对便宜的航空公司。该航空公司一共在nn个城市设有业务，设这些城市分别标记为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn></mrow><annotation encoding="application/x-tex">0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span> 到 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.66666em;vertical-align:-0.08333em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span>，一共有 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 种航线，每种航线连接两个城市，并且航线有一定的价格。</p><p>Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市，途中可以进行转机。航空公司对他们这次旅行也推出优惠，他们可以免费在最多 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span></span></span></span></span> 种航线上搭乘飞机。那么 Alice 和 Bob 这次出行最少花费多少？</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第一行三个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo separator="true">,</mo><mi>m</mi><mo separator="true">,</mo><mi>k</mi></mrow><annotation encoding="application/x-tex">n,m,k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">n</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">m</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span></span></span></span></span>，分别表示城市数，航线数和免费乘坐次数。</p><p>接下来一行两个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo separator="true">,</mo><mi>t</mi></mrow><annotation encoding="application/x-tex">s,t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80952em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">s</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">t</span></span></span></span></span>，分别表示他们出行的起点城市编号和终点城市编号。</p><p>接下来 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 行，每行三个整数<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo separator="true">,</mo><mi>c</mi></mrow><annotation encoding="application/x-tex">a,b,c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">c</span></span></span></span></span>，表示存在一种航线，能从城市 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">a</span></span></span></span></span> 到达城市 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault">b</span></span></span></span></span>，或从城市 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.69444em;vertical-align:0em;"></span><span class="mord mathdefault">b</span></span></span></span></span> 到达城市 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">a</span></span></span></span></span>，价格为 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">c</span></span></span></span></span>。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出一行一个整数，为最少花费。</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">5 6 10 40 1 51 2 52 3 53 4 52 3 30 2 100</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">8</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><h4>数据规模与约定</h4><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>30</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">30\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">3</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>50</mn><mo separator="true">,</mo><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>300</mn><mo separator="true">,</mo><mi>k</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">2 \le n \le 50,1 \le m \le 300,k=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">5</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord">3</span><span class="mord">0</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">0</span></span></span></span></span>。</p><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>50</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">50\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">5</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>600</mn><mo separator="true">,</mo><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>6</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup><mo separator="true">,</mo><mn>0</mn><mo>≤</mo><mi>k</mi><mo>≤</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">2 \le n \le 600,1 \le m \le 6\times10^3,0 \le k \le 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">6</span><span class="mord">0</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">6</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1.008548em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83041em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span>。</p><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mo>≤</mo><mi>n</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup><mo separator="true">,</mo><mn>1</mn><mo>≤</mo><mi>m</mi><mo>≤</mo><mn>5</mn><mo>×</mo><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup><mo separator="true">,</mo><mn>0</mn><mo>≤</mo><mi>k</mi><mo>≤</mo><mn>10</mn><mo separator="true">,</mo><mn>0</mn><mo>≤</mo><mi>s</mi><mo separator="true">,</mo><mi>t</mi><mo separator="true">,</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>≤</mo><mi>n</mi><mo separator="true">,</mo><mi>a</mi><mo mathvariant="normal">≠</mo><mi>b</mi><mo separator="true">,</mo><mn>0</mn><mo>≤</mo><mi>c</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">2 \le n \le 10^4,1 \le m \le 5\times 10^4,0 \le k \le 10,0\le s,t,a,b\le n,a\ne b,0\le c\le 10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.78041em;vertical-align:-0.13597em;"></span><span class="mord">2</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:1.008548em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.72777em;vertical-align:-0.08333em;"></span><span class="mord">5</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1.008548em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.83041em;vertical-align:-0.13597em;"></span><span class="mord mathdefault" style="margin-right:0.03148em;">k</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8388800000000001em;vertical-align:-0.19444em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">s</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">t</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">b</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">n</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord mathdefault">a</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel"><span class="mrel"><span class="mord"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.69444em;"><span style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="rlap"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="inner"><span class="mrel"></span></span><span class="fix"></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.19444em;"><span></span></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="mord mathdefault">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.16666666666666666em;"></span><span class="mord">0</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">c</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>。</p><p>另外存在一组 hack 数据。</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>由于可以有$k$次免费，这里构建分层图：</p><ul><li>有$k+1$层完全一样的图</li><li>每条边在层与层之间单向连接，但是费用为0</li></ul><p>那么这样构建的图的第$i$层的$t$点就是免费了$i - 1$次的最小费用。</p><p>方程：</p><script type="math/tex; mode=display">    \text {ans} = \min _ {0 \leq i \leq k} \text {dis} [t_i]</script><h1 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h1><ul><li>如何防止从下面的层去上面？<strong>单向</strong></li><li>如何建图？<strong>思考一下OpenCV当中的图像，其实他们的内存地址是连续的，所以我们可以把他们放在一个一维数组当中，只不过开了$n\times k$个点罢了。</strong></li></ul><h1 id="图片（Ref-SuperJvRuo）"><a href="#图片（Ref-SuperJvRuo）" class="headerlink" title="图片（Ref @SuperJvRuo）"></a>图片（Ref @SuperJvRuo）</h1><img src="/2020/09/18/P4568-JLOI2011-%E9%A3%9E%E8%A1%8C%E8%B7%AF%E7%BA%BF-%E5%88%86%E5%B1%82%E5%9B%BE%E6%9C%80%E7%9F%AD%E8%B7%AF/1.png" class=""><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>;</span><br><span class="line"><span class="keyword">int</span> n, m, k, s, t;</span><br><span class="line"><span class="keyword">int</span> head[<span class="number">150005</span>], dis[<span class="number">150005</span>], vis[<span class="number">150005</span>];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[<span class="number">3000001</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w, <span class="keyword">int</span> l)</span> </span>&#123; add_edge(u + l * n, v + l * n, w); &#125;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> dis, pos;</span><br><span class="line"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123; <span class="keyword">return</span> a.dis &gt; b.dis; &#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;node&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt;= n * (k + <span class="number">1</span>) + <span class="number">100</span>; i ++) dis[i] = <span class="number">8e18</span>;</span><br><span class="line">dis[s] = <span class="number">0</span>; q.push((node) &#123; dis[s], s &#125;);</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.top().pos; q.pop();</span><br><span class="line"><span class="keyword">if</span> (vis[u]) <span class="keyword">continue</span>;</span><br><span class="line">vis[u] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m &gt;&gt; k &gt;&gt; s &gt;&gt; t;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt;= k; j ++) &#123;</span><br><span class="line">add_edge(u, v, w, j);</span><br><span class="line">add_edge(v, u, w, j);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; k; j ++) &#123;</span><br><span class="line">add_edge(u + j * n, v + (j + <span class="number">1</span>) * n, <span class="number">0</span>);</span><br><span class="line">add_edge(v + j * n, u + (j + <span class="number">1</span>) * n, <span class="number">0</span>);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">dijkstra();</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">8e18</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt;= k; i ++)</span><br><span class="line">ans = min(ans, dis[t + i * n]);</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt;&lt;sty</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="堆" scheme="http://gyrojeff.moe/tags/%E5%A0%86/"/>
    
    <category term="Dijkstra" scheme="http://gyrojeff.moe/tags/Dijkstra/"/>
    
  </entry>
  
  <entry>
    <title>P2384 最短路</title>
    <link href="http://gyrojeff.moe/2020/09/18/P2384-%E6%9C%80%E7%9F%AD%E8%B7%AF/"/>
    <id>http://gyrojeff.moe/2020/09/18/P2384-%E6%9C%80%E7%9F%AD%E8%B7%AF/</id>
    <published>2020-09-18T09:02:15.000Z</published>
    <updated>2020-09-19T11:34:48.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><p>（直接从洛谷网站上复制的div）</p><div data-v-4b38bb56="" data-v-7b37eb95=""><style>span.katex-html {    display:none}</style><h2 data-v-4b38bb56="" class="lfe-h2">题目背景</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>狗哥做烂了最短路，突然机智的考了 Bosh 一道，没想到把 Bosh 考住了...你能帮 Bosh 解决吗？</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">题目描述</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>给定 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 个点的带权有向图，求从 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span></span></span></span></span> 到 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 的路径中边权之积最小的简单路径。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输入格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>第一行读入两个整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span>，表示共 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">n</span></span></span></span></span> 个点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 条边。 接下来 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">m</span></span></span></span></span> 行，每行三个正整数 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">x</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">y</span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>z</mi></mrow><annotation encoding="application/x-tex">z</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault" style="margin-right:0.04398em;">z</span></span></span></span></span>，表示点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathdefault">x</span></span></span></span></span> 到点 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathdefault" style="margin-right:0.03588em;">y</span></span></span></span></span> 有一条边权为z的边。</p></div> <h2 data-v-4b38bb56="" class="lfe-h2">输出格式</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>输出仅包括一行，记为所求路径的边权之积，由于答案可能很大，因此狗哥仁慈地让你输出它模 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>9987</mn></mrow><annotation encoding="application/x-tex">9987</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">9</span><span class="mord">9</span><span class="mord">8</span><span class="mord">7</span></span></span></span></span> 的余数即可。</p><p>废话当然是一个数了w</p><p>//谢fyszzhouzj指正w</p></div> <!----> <h2 data-v-4b38bb56="" class="lfe-h2">输入输出样例</h2> <div data-v-36768c72="" data-v-4b38bb56="" class="sample-wrap sample"><div data-v-52f2d52f="" data-v-36768c72="" class="input"><strong data-v-52f2d52f="">输入 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">3 31 2 3 2 3 3 1 3 10</pre></div> <div data-v-52f2d52f="" data-v-36768c72="" class="output"><strong data-v-52f2d52f="">输出 #1</strong> <button data-v-370e72e2="" data-v-52f2d52f="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-52f2d52f="">9</pre></div></div> <h2 data-v-4b38bb56="" class="lfe-h3">说明/提示</h2> <div data-v-5a58a989="" data-v-4b38bb56="" class="marked"><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>20</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">20\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">2</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>10</mn></mrow><annotation encoding="application/x-tex">n\leq 10</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.64444em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord">0</span></span></span></span></span>。</p><p>对于 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>100</mn><mi mathvariant="normal">%</mi></mrow><annotation encoding="application/x-tex">100\%</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.80556em;vertical-align:-0.05556em;"></span><span class="mord">1</span><span class="mord">0</span><span class="mord">0</span><span class="mord">%</span></span></span></span></span> 的数据，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>3</mn></msup></mrow><annotation encoding="application/x-tex">n\leq 10^3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">n</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span></span></span></span></span>，<span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi><mo>≤</mo><mn>1</mn><msup><mn>0</mn><mn>6</mn></msup></mrow><annotation encoding="application/x-tex">m\leq 10^6</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7719400000000001em;vertical-align:-0.13597em;"></span><span class="mord mathdefault">m</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2777777777777778em;"></span></span><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">6</span></span></span></span></span></span></span></span></span></span></span></span>。边权不超过 <span><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><msup><mn>0</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">10^4</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141079999999999em;vertical-align:0em;"></span><span class="mord">1</span><span class="mord"><span class="mord">0</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span></span></span></span></span></span></span></span></span>。</p></div> <!----></div><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><p>这道题注意点：乘积。一般有两种解决方式：</p><ul><li>对数</li><li>记录路径</li></ul><p>对数的话涉及到$\log$然后再还原到<code>int</code>可能会出现问题（反正我是失败了，我，菜），所以这里介绍第二种方法：直接记录路径，下面是具体分析。</p><h2 id="记录路径"><a href="#记录路径" class="headerlink" title="记录路径"></a>记录路径</h2><p>我们可以发现，在<code>dijkstra</code>的<code>void</code>里更新判断的<code>if</code>里面更新时，更新的情况一定是优于原来的的。那么就在更新时记录前继呗。然后由于我们是邻接表存图，所以再记录一下边权就完事了。</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt; </span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> head[maxn];</span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>, n, m;</span><br><span class="line"><span class="keyword">double</span> dis[maxn];</span><br><span class="line"><span class="keyword">int</span> pre[maxn];</span><br><span class="line"><span class="keyword">int</span> pre_weight[maxn];</span><br><span class="line"><span class="keyword">bool</span> vis[maxn];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> to, next, w;</span><br><span class="line">&#125; g[maxn &lt;&lt; <span class="number">1</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123;</span><br><span class="line">g[ecnt] = (edge) &#123; v, head[u], w &#125;;</span><br><span class="line">head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">double</span> dis, pos;</span><br><span class="line"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123;</span><br><span class="line"><span class="keyword">return</span> a.dis &gt; b.dis;</span><br><span class="line">&#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;node&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) dis[i] = <span class="number">8e18</span>;</span><br><span class="line">dis[<span class="number">1</span>] = <span class="number">0</span>; q.push((node) &#123; <span class="number">0</span>, <span class="number">1</span> &#125;);</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.top().pos; q.pop();</span><br><span class="line"><span class="keyword">if</span> (vis[u]) <span class="keyword">continue</span>;</span><br><span class="line">vis[u] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + log2(g[e].w)) &#123;</span><br><span class="line">dis[v] = dis[u] + log2(g[e].w);</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">pre[v] = u;</span><br><span class="line">pre_weight[v] = g[e].w;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> x, y, z; <span class="built_in">cin</span> &gt;&gt; x &gt;&gt; y &gt;&gt; z;</span><br><span class="line">add_edge(x, y, z);</span><br><span class="line"><span class="keyword">if</span> (z == <span class="number">0</span>) &#123;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="number">0</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125; </span><br><span class="line">&#125;</span><br><span class="line">dijkstra();</span><br><span class="line"><span class="keyword">int</span> i = n;</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span> (pre[i] != <span class="number">0</span>) &#123;</span><br><span class="line">ans = ans * pre_weight[i];</span><br><span class="line">ans = ans % <span class="number">9987</span>;</span><br><span class="line">i = pre[i];</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>; </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目&quot;&gt;&lt;a href=&quot;#题目&quot; class=&quot;headerlink&quot; title=&quot;题目&quot;&gt;&lt;/a&gt;题目&lt;/h1&gt;&lt;p&gt;（直接从洛谷网站上复制的div）&lt;/p&gt;
&lt;div data-v-4b38bb56=&quot;&quot; data-v-7b37eb95=&quot;&quot;&gt;&lt;style</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="Dijkstra" scheme="http://gyrojeff.moe/tags/Dijkstra/"/>
    
  </entry>
  
  <entry>
    <title>堆优化的Dijkstra</title>
    <link href="http://gyrojeff.moe/2020/09/18/%E5%A0%86%E4%BC%98%E5%8C%96%E7%9A%84Dijkstra/"/>
    <id>http://gyrojeff.moe/2020/09/18/%E5%A0%86%E4%BC%98%E5%8C%96%E7%9A%84Dijkstra/</id>
    <published>2020-09-18T08:44:29.000Z</published>
    <updated>2020-09-18T09:11:27.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="核心-图论的基本方程"><a href="#核心-图论的基本方程" class="headerlink" title="核心 - 图论的基本方程"></a>核心 - 图论的基本方程</h1><p>问：在图中，$s\rightarrow t$最短路径是多少。</p><p>每一个点有一个$d(u)$（Distance），则对于所有边，有</p><script type="math/tex; mode=display">d(u) = \min\{d(v) + w(v, u)\}</script><h1 id="算法解释"><a href="#算法解释" class="headerlink" title="算法解释"></a>算法解释</h1><ul><li>上述方程可以展开写成$n$个方程构成的方程组，而Dijkstra算法则完成了这一过程。</li><li>Dijkstra方法可以理解为：从已知点出发，不断地从已知量计算未知量，因为是$\min$操作，我们每次都先取最小的值。</li><li>具体如下图：</li></ul><img src="/2020/09/18/%E5%A0%86%E4%BC%98%E5%8C%96%E7%9A%84Dijkstra/1.gif" class=""><blockquote><p><a href="https://image.baidu.com/search/detail?ct=503316480&amp;z=0&amp;ipn=d&amp;word=dijkstra%E5%8A%A8%E5%9B%BE&amp;step_word=&amp;hs=0&amp;pn=0&amp;spn=0&amp;di=1540&amp;pi=0&amp;rn=1&amp;tn=baiduimagedetail&amp;is=0%2C0&amp;istype=0&amp;ie=utf-8&amp;oe=utf-8&amp;in=&amp;cl=2&amp;lm=-1&amp;st=undefined&amp;cs=166932153%2C225082871&amp;os=753601029%2C627599378&amp;simid=4210753688%2C512890609&amp;adpicid=0&amp;lpn=0&amp;ln=20&amp;fr=&amp;fmq=1600419264528_R&amp;fm=&amp;ic=undefined&amp;s=undefined&amp;hd=undefined&amp;latest=undefined&amp;copyright=undefined&amp;se=&amp;sme=&amp;tab=0&amp;width=undefined&amp;height=undefined&amp;face=undefined&amp;ist=&amp;jit=&amp;cg=&amp;bdtype=0&amp;oriquery=&amp;objurl=http%3A%2F%2Fgss1.bdstatic.com%2F9vo3dSag_xI4khGkpoWK1HF6hhy%2Fbaike%2Fs%3D220%2Fsign%3Dc4ffc53a7b899e517c8e3d1672a6d990%2F8ad4b31c8701a18b76d304889e2f07082838fe39.jpg&amp;fromurl=ippr_z2C%24qAzdH3FAzdH3Fkwthj_z%26e3Bkwt17_z%26e3Bv54AzdH3Ftpj4AzdH3FDt3hfp6w%25E0%25BB%25Aa%25Em%25Ac%25b8%25E0%25A8%25Bm&amp;gsm=1&amp;rpstart=0&amp;rpnum=0&amp;islist=&amp;querylist=&amp;force=undefined">Ref 地址</a></p></blockquote><h1 id="关于堆优化"><a href="#关于堆优化" class="headerlink" title="关于堆优化"></a>关于堆优化</h1><p>堆优化用在每次寻找当前<code>dis</code>数组中最小值的时候。所以我们需要维护一个<code>小根堆</code>，这将时间复杂度从$O(n^2)$降到了$O(n\log n)$</p><h1 id="关于小根堆的实现"><a href="#关于小根堆的实现" class="headerlink" title="关于小根堆的实现"></a>关于小根堆的实现</h1><ol><li>黑魔法：放入相反数，别忘了取的时候乘-1</li><li>正常人做法：<code>priority_queue&lt;int, vector&lt;int&gt;, greater&lt;int&gt; &gt; q;</code></li><li>详见我的代码（直接在结构体当中重新定义运算符）</li></ol><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>; <span class="comment">// 这也是黑魔法，直接0就行了</span></span><br><span class="line"><span class="keyword">int</span> n, m, k, s, t;</span><br><span class="line"><span class="keyword">int</span> head[<span class="number">150005</span>], dis[<span class="number">150005</span>], vis[<span class="number">150005</span>];</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span> <span class="keyword">int</span> to, next, w; &#125; g[<span class="number">300010</span>];</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123; g[ecnt] = (edge) &#123; v, head[u], w &#125;; head[u] = ecnt ++; &#125;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> dis, pos;</span><br><span class="line">    <span class="comment">// 前文提到的黑魔法</span></span><br><span class="line"><span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123; <span class="keyword">return</span> a.dis &gt; b.dis; &#125;</span><br><span class="line">&#125;;</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;node&gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dijkstra</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt;= n; i ++) dis[i] = <span class="number">8e18</span>;</span><br><span class="line">dis[s] = <span class="number">0</span>; q.push((node) &#123; dis[s], s &#125;);</span><br><span class="line"><span class="keyword">while</span> (!q.empty()) &#123;</span><br><span class="line"><span class="keyword">int</span> u = q.top().pos; q.pop();</span><br><span class="line"><span class="keyword">if</span> (vis[u]) <span class="keyword">continue</span>;</span><br><span class="line">vis[u] = <span class="literal">true</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line">            <span class="comment">// 图论基本方程</span></span><br><span class="line"><span class="keyword">if</span> (dis[v] &gt; dis[u] + g[e].w) &#123;</span><br><span class="line">dis[v] = dis[u] + g[e].w;</span><br><span class="line">q.push((node) &#123; dis[v], v &#125;);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>注：其中，单源最短路的<code>源</code>是<code>s</code>。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;核心-图论的基本方程&quot;&gt;&lt;a href=&quot;#核心-图论的基本方程&quot; class=&quot;headerlink&quot; title=&quot;核心 - 图论的基本方程&quot;&gt;&lt;/a&gt;核心 - 图论的基本方程&lt;/h1&gt;&lt;p&gt;问：在图中，$s\rightarrow t$最短路径是多少。&lt;/p&gt;</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="堆" scheme="http://gyrojeff.moe/tags/%E5%A0%86/"/>
    
    <category term="Dijkstra" scheme="http://gyrojeff.moe/tags/Dijkstra/"/>
    
  </entry>
  
  <entry>
    <title>IAI88 - 区间的最大交集</title>
    <link href="http://gyrojeff.moe/2020/09/17/IAI88-%E5%8C%BA%E9%97%B4%E7%9A%84%E6%9C%80%E5%A4%A7%E4%BA%A4%E9%9B%86/"/>
    <id>http://gyrojeff.moe/2020/09/17/IAI88-%E5%8C%BA%E9%97%B4%E7%9A%84%E6%9C%80%E5%A4%A7%E4%BA%A4%E9%9B%86/</id>
    <published>2020-09-17T11:38:27.000Z</published>
    <updated>2020-09-17T11:59:27.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题目链接"><a href="#题目链接" class="headerlink" title="题目链接"></a>题目链接</h1><p><a href="https://iai.sh.cn/problem/88">https://iai.sh.cn/problem/88</a></p><h1 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h1><p>给定$n$个区间，请挑出$k$个区间，使得他们的交集长度达到最大。区间的长度定义为这个区间的右端点和左端点的差。</p><h1 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h1><ul><li>不难得出，我们可以先按照<code>区间的开始</code>进行排序。</li><li>然后维护一个有$k$个元素的堆（小根堆），里面存的是<code>区间的结束</code></li><li>统计答案：当堆里有$k$个元素时，答案就是<code>堆顶</code>减去<code>当前区间的开始</code>(因为区间的开始已经是升序的了)</li></ul><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt; </span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"></span><br><span class="line"><span class="built_in">pair</span>&lt;<span class="keyword">int</span>, <span class="keyword">int</span>&gt; t[maxn];</span><br><span class="line"><span class="built_in">priority_queue</span>&lt;<span class="keyword">int</span>, <span class="built_in">vector</span>&lt;<span class="keyword">int</span>&gt;, greater&lt;<span class="keyword">int</span>&gt; &gt; q;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> n, k;</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; t[i].first &gt;&gt; t[i].second;</span><br><span class="line">sort(t, t + n);</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">q.push(t[i].second);</span><br><span class="line"><span class="keyword">if</span> (q.size() &gt; k)</span><br><span class="line">q.pop();</span><br><span class="line"><span class="keyword">if</span> (q.size() == k)</span><br><span class="line">ans = max(ans, q.top() - t[i].first);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;题目链接&quot;&gt;&lt;a href=&quot;#题目链接&quot; class=&quot;headerlink&quot; title=&quot;题目链接&quot;&gt;&lt;/a&gt;题目链接&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://iai.sh.cn/problem/88&quot;&gt;https://iai.sh.cn/probl</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="堆" scheme="http://gyrojeff.moe/tags/%E5%A0%86/"/>
    
  </entry>
  
  <entry>
    <title>博客园与Hexo同步发布的方法</title>
    <link href="http://gyrojeff.moe/2020/09/15/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E4%B8%8EHexo%E5%90%8C%E6%AD%A5%E5%8F%91%E5%B8%83%E7%9A%84%E6%96%B9%E6%B3%95/"/>
    <id>http://gyrojeff.moe/2020/09/15/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E4%B8%8EHexo%E5%90%8C%E6%AD%A5%E5%8F%91%E5%B8%83%E7%9A%84%E6%96%B9%E6%B3%95/</id>
    <published>2020-09-14T16:31:57.000Z</published>
    <updated>2020-09-18T16:14:51.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h1><p>之前想到：博客一次写作，多地发布，于是边有了这个项目：选择性同步Hexo与博客园。</p><p>GitHub链接：<a href="https://github.com/JeffersonQin/hexo-cnblogs-sync">https://github.com/JeffersonQin/hexo-cnblogs-sync</a></p><h1 id="魔改Next模板，增加标题栏提醒"><a href="#魔改Next模板，增加标题栏提醒" class="headerlink" title="魔改Next模板，增加标题栏提醒"></a>魔改Next模板，增加标题栏提醒</h1><p>在<code>themes/next/layout/_macro/post.swig</code>中，选择合适的地方加入：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#123;% if post.cnblogs %&#125;</span><br><span class="line">    &lt;br&gt;</span><br><span class="line">    &lt;span class&#x3D;&quot;post-meta-item&quot;&gt;</span><br><span class="line">        &lt;span class&#x3D;&quot;post-meta-item-icon&quot;&gt;</span><br><span class="line">            &lt;i class&#x3D;&quot;fas fa-rss&quot;&gt;&lt;&#x2F;i&gt;</span><br><span class="line">        &lt;&#x2F;span&gt;</span><br><span class="line">    &lt;span class&#x3D;&quot;post-meta-item-text&quot; id&#x3D;&quot;cnblogs_sync_text&quot;&gt;&lt;a href&#x3D;&quot;https:&#x2F;&#x2F;www.cnblogs.com&#x2F;jeffersonqin&#x2F;&quot;&gt;博客园&lt;&#x2F;a&gt; 同步已开启&lt;&#x2F;span&gt;</span><br><span class="line">    &lt;&#x2F;span&gt;</span><br><span class="line">&#123;% endif %&#125;</span><br></pre></td></tr></table></figure><p>这样的话，如果要同步，只需要控制文件头就可以了，类似于本文：<br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 博客园与Hexo同步发布的方法</span><br><span class="line">date: 2020-09-15 00:31:57</span><br><span class="line">tags:</span><br><span class="line"><span class="bullet">-</span> Hexo</span><br><span class="line"><span class="bullet">-</span> Blog</span><br><span class="line"><span class="bullet">-</span> cnblogs</span><br><span class="line"><span class="bullet">-</span> python</span><br><span class="line"><span class="bullet">-</span> html</span><br><span class="line"><span class="bullet">-</span> css</span><br><span class="line">categories: Hexo</span><br><span class="line">cnblogs: true</span><br><span class="line">---</span><br></pre></td></tr></table></figure></p><h1 id="BS4微调Hexo生成的HTML"><a href="#BS4微调Hexo生成的HTML" class="headerlink" title="BS4微调Hexo生成的HTML"></a>BS4微调Hexo生成的HTML</h1><p>先扫描一遍<code>public</code>文件夹里的输出文件：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">orig_dir = <span class="string">&quot;../public/&quot;</span></span><br><span class="line">repo_dir = <span class="string">&quot;../public_cnblogs/&quot;</span></span><br><span class="line">ignore_files = [<span class="string">&quot;../public/index.html&quot;</span>]</span><br><span class="line">ignore_dirs = [<span class="string">&quot;../public/page/&quot;</span>, <span class="string">&quot;../public/archives&quot;</span>]</span><br><span class="line"><span class="comment"># Filtering the files needed to post</span></span><br><span class="line"><span class="keyword">for</span> root, dirs, files <span class="keyword">in</span> os.walk(orig_dir):</span><br><span class="line">    <span class="keyword">for</span> file <span class="keyword">in</span> files:</span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            file_name = str(file)</span><br><span class="line">            file_path = os.path.join(root, file)</span><br><span class="line">            file_dir = root.replace(<span class="string">&#x27;\\&#x27;</span>, <span class="string">&#x27;/&#x27;</span>)</span><br><span class="line">            file_path = file_path.replace(<span class="string">&#x27;\\&#x27;</span>, <span class="string">&#x27;/&#x27;</span>)</span><br><span class="line">            </span><br><span class="line">            flag = <span class="literal">True</span></span><br><span class="line">            </span><br><span class="line">            <span class="keyword">for</span> ignore_dir <span class="keyword">in</span> ignore_dirs:</span><br><span class="line">                <span class="keyword">if</span> file_dir.startswith(ignore_dir):</span><br><span class="line">                    flag = <span class="literal">False</span></span><br><span class="line">                    <span class="keyword">break</span></span><br><span class="line">            <span class="keyword">for</span> ignore_file <span class="keyword">in</span> ignore_files:</span><br><span class="line">                <span class="keyword">if</span> file_path == ignore_file:</span><br><span class="line">                    flag = <span class="literal">False</span></span><br><span class="line">                    <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> (file_name == <span class="string">&#x27;index.html&#x27;</span> <span class="keyword">and</span> flag):</span><br><span class="line">                index_files.append(file_path)</span><br><span class="line">                print(<span class="string">&#x27;\033[42m\033[37m[LOGG]\033[0m File Detected:&#x27;</span>, file_path)</span><br><span class="line">            </span><br><span class="line">        <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">            <span class="keyword">raise</span> e</span><br><span class="line"></span><br><span class="line">print(<span class="string">&#x27;\033[44m\033[37m[INFO]\033[0m File Detection Ended.&#x27;</span>)</span><br></pre></td></tr></table></figure><p>然后使用BS4来操作HTML和CSS</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Filter the articles that are to be synced</span></span><br><span class="line"></span><br><span class="line">resource_dict = &#123;&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> index_file <span class="keyword">in</span> index_files:</span><br><span class="line">    post_body = <span class="string">&quot;&quot;</span></span><br><span class="line">    <span class="keyword">with</span> open(index_file, <span class="string">&#x27;r&#x27;</span>, encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        html_doc = f.read()</span><br><span class="line">        soup = BeautifulSoup(html_doc, <span class="string">&quot;html.parser&quot;</span>)</span><br><span class="line">        check_msg = soup.select(<span class="string">&#x27;span[id=cnblogs_sync_text]&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> (len(check_msg) == <span class="number">0</span>): <span class="keyword">continue</span></span><br><span class="line">        post_body_list = soup.select(<span class="string">&#x27;div[class=post-body]&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> (len(post_body_list) == <span class="number">0</span>): <span class="keyword">continue</span></span><br><span class="line">        print(<span class="string">&#x27;\033[42m\033[37m[LOGG]\033[0m Target Detected:&#x27;</span>, index_file)</span><br><span class="line">        <span class="keyword">for</span> child <span class="keyword">in</span> soup.descendants:</span><br><span class="line">            <span class="keyword">if</span> (child.name == <span class="string">&#x27;img&#x27;</span>):</span><br><span class="line">                <span class="keyword">if</span> (<span class="string">&#x27;data-original&#x27;</span> <span class="keyword">in</span> child.attrs <span class="keyword">and</span> <span class="string">&#x27;src&#x27;</span> <span class="keyword">in</span> child.attrs):</span><br><span class="line">                    child[<span class="string">&#x27;src&#x27;</span>] = <span class="string">&#x27;https://gyrojeff.moe&#x27;</span> + child[<span class="string">&#x27;data-original&#x27;</span>]</span><br><span class="line">                <span class="keyword">elif</span> (<span class="string">&#x27;src&#x27;</span> <span class="keyword">in</span> child.attrs):</span><br><span class="line">                    child[<span class="string">&#x27;src&#x27;</span>] = <span class="string">&#x27;https://gyrojeff.moe&#x27;</span> + child[<span class="string">&#x27;src&#x27;</span>]</span><br><span class="line">            <span class="keyword">if</span> (child.name == <span class="string">&#x27;a&#x27;</span>):</span><br><span class="line">                <span class="keyword">if</span> (<span class="string">&#x27;href&#x27;</span> <span class="keyword">in</span> child.attrs):</span><br><span class="line">                    <span class="keyword">if</span> (str(child[<span class="string">&#x27;href&#x27;</span>]).startswith(<span class="string">&#x27;/&#x27;</span>) <span class="keyword">and</span> <span class="keyword">not</span> str(child[<span class="string">&#x27;href&#x27;</span>]).startswith(<span class="string">&#x27;//&#x27;</span>)):</span><br><span class="line">                        child[<span class="string">&#x27;href&#x27;</span>] = <span class="string">&#x27;https://gyrojeff.moe&#x27;</span> + child[<span class="string">&#x27;href&#x27;</span>]</span><br><span class="line">        post_body = soup.select(<span class="string">&#x27;div[class=post-body]&#x27;</span>)[<span class="number">0</span>]</span><br><span class="line">        math_blocks = post_body.select(<span class="string">&#x27;script[type=&quot;math/tex; mode=display&quot;]&#x27;</span>)</span><br><span class="line">        <span class="keyword">for</span> math_block <span class="keyword">in</span> math_blocks:</span><br><span class="line">            math_string = str(math_block).replace(<span class="string">&#x27;&lt;script type=&quot;math/tex; mode=display&quot;&gt;&#x27;</span>, <span class="string">&#x27;&lt;p&gt;$$&#x27;</span>).replace(<span class="string">&#x27;&lt;/script&gt;&#x27;</span>, <span class="string">&#x27;\n$$&lt;/p&gt;&#x27;</span>)</span><br><span class="line">            math_block.replace_with(BeautifulSoup(math_string, <span class="string">&#x27;html.parser&#x27;</span>))</span><br><span class="line">    save_dir = os.path.join(repo_dir, index_file[len(orig_dir):-len(<span class="string">&quot;index.html&quot;</span>)])</span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> os.path.exists(save_dir): os.makedirs(save_dir)</span><br><span class="line">    copyright_div = str(soup.select(<span class="string">&#x27;div[class=my_post_copyright]&#x27;</span>)[<span class="number">0</span>])</span><br><span class="line">    <span class="keyword">with</span> open(save_dir + <span class="string">&#x27;index.html&#x27;</span>, <span class="string">&#x27;w&#x27;</span>, encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="keyword">as</span> f:</span><br><span class="line">        f.write(header + <span class="string">&#x27;\n&#x27;</span> + copyright_div + <span class="string">&#x27;\n&#x27;</span> + str(post_body))</span><br><span class="line">    tags = soup.select(<span class="string">&#x27;div[class=post-tags]&#x27;</span>)</span><br><span class="line">    tags_text = []</span><br><span class="line">    <span class="keyword">if</span> len(tags) != <span class="number">0</span>:</span><br><span class="line">        tags_div = tags[<span class="number">0</span>].select(<span class="string">&#x27;a&#x27;</span>)</span><br><span class="line">        <span class="keyword">if</span> len(tags_div) &gt; <span class="number">0</span>:</span><br><span class="line">            <span class="keyword">for</span> tag <span class="keyword">in</span> tags_div:</span><br><span class="line">                tags_text.append(tag.contents[<span class="number">1</span>][<span class="number">1</span>:])</span><br><span class="line">    </span><br><span class="line">    resource_dict[save_dir + <span class="string">&#x27;index.html&#x27;</span>] = &#123;</span><br><span class="line">        <span class="string">&#x27;tags&#x27;</span>: tags_text, </span><br><span class="line">        <span class="string">&#x27;title&#x27;</span>: soup.select(<span class="string">&#x27;meta[property=&quot;og:title&quot;]&#x27;</span>)[<span class="number">0</span>][<span class="string">&#x27;content&#x27;</span>]</span><br><span class="line">    &#125;</span><br><span class="line">    print(<span class="string">&#x27;\033[44m\033[37m[INFO]\033[0m File Generated:&#x27;</span>, save_dir + <span class="string">&#x27;index.html&#x27;</span>)</span><br><span class="line"></span><br><span class="line">print(<span class="string">&#x27;\033[44m\033[37m[INFO]\033[0m File Generation Ended.&#x27;</span>)</span><br></pre></td></tr></table></figure><p>上面的大多数代码基本上都需要具体情况具体分析，分析生成的HTML和我们需要的代码之间的关系。值得注意的是，<code>math_blocks</code>的那一段代码是巧妙地解决数学公式<code>mathjax</code>只渲染到<code>&lt;script&gt;</code>的问题的。（直接匹配再用$$$$替换，这样可以直接使用博客园的markdown进行渲染，毕竟markdown可以兼容html）这里面，<code>header</code>是我根据这套Next主题自己扒的，源码在我的GitHub上有（链接在本文文末）</p><h1 id="MetaWeblog发布博文"><a href="#MetaWeblog发布博文" class="headerlink" title="MetaWeblog发布博文"></a>MetaWeblog发布博文</h1><p>博客园可以使用MetaWeblog接口，不过categories有点问题，不太能使用。</p><p>原作：<a href="https://github.com/1024th/cnblogs_githook">https://github.com/1024th/cnblogs_githook</a></p><p>但是在删除接口方面存在问题，这里进行了更改。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> xmlrpc.client <span class="keyword">as</span> xmlrpclib</span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> getpass</span><br><span class="line"></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">配置字典：</span></span><br><span class="line"><span class="string">type | description(example)</span></span><br><span class="line"><span class="string">str  | metaWeblog url, 博客设置中有(&#x27;https://rpc.cnblogs.com/metaweblog/1024th&#x27;)</span></span><br><span class="line"><span class="string">str  | appkey, Blog地址名(&#x27;1024th&#x27;)</span></span><br><span class="line"><span class="string">str  | blogid, 这个无需手动输入，通过getUsersBlogs得到</span></span><br><span class="line"><span class="string">str  | usr, 登录用户名</span></span><br><span class="line"><span class="string">str  | passwd, 登录密码</span></span><br><span class="line"><span class="string">str  | rootpath, 博文存放根路径（添加git管理）</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">POST:</span></span><br><span class="line"><span class="string">dateTimedateCreated - Required when posting.</span></span><br><span class="line"><span class="string">stringdescription - Required when posting.</span></span><br><span class="line"><span class="string">stringtitle - Required when posting.</span></span><br><span class="line"><span class="string">array of stringcategories (optional)</span></span><br><span class="line"><span class="string">struct Enclosureenclosure (optional)</span></span><br><span class="line"><span class="string">stringlink (optional)</span></span><br><span class="line"><span class="string">stringpermalink (optional)</span></span><br><span class="line"><span class="string">anypostid (optional)</span></span><br><span class="line"><span class="string">struct Sourcesource (optional)</span></span><br><span class="line"><span class="string">stringuserid (optional)</span></span><br><span class="line"><span class="string">anymt_allow_comments (optional)</span></span><br><span class="line"><span class="string">anymt_allow_pings (optional)</span></span><br><span class="line"><span class="string">anymt_convert_breaks (optional)</span></span><br><span class="line"><span class="string">stringmt_text_more (optional)</span></span><br><span class="line"><span class="string">stringmt_excerpt (optional)</span></span><br><span class="line"><span class="string">stringmt_keywords (optional)</span></span><br><span class="line"><span class="string">stringwp_slug (optional)</span></span><br><span class="line"><span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MetaWebBlogClient</span>():</span></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">__init__</span>(<span class="params">self, configpath</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        @configpath: 指定配置文件路径</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        self._configpath = configpath</span><br><span class="line">        self._config = <span class="literal">None</span></span><br><span class="line">        self._server = <span class="literal">None</span></span><br><span class="line">        self._mwb = <span class="literal">None</span></span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">createConfig</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        创建配置</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">            cfg = &#123;&#125;</span><br><span class="line">            <span class="keyword">for</span> item <span class="keyword">in</span> [(<span class="string">&quot;url&quot;</span>, <span class="string">&quot;MetaWebBlog URL: &quot;</span>),</span><br><span class="line">                        (<span class="string">&quot;appkey&quot;</span>, <span class="string">&quot;博客地址名(网址的用户部分): &quot;</span>),</span><br><span class="line">                        (<span class="string">&quot;usr&quot;</span>, <span class="string">&quot;登录用户名: &quot;</span>)]:</span><br><span class="line">                cfg[item[<span class="number">0</span>]] = input(<span class="string">&quot;输入&quot;</span> + item[<span class="number">1</span>])</span><br><span class="line">            cfg[<span class="string">&#x27;passwd&#x27;</span>] = getpass.getpass(<span class="string">&#x27;输入登录密码: &#x27;</span>)</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                server = xmlrpclib.ServerProxy(cfg[<span class="string">&quot;url&quot;</span>])</span><br><span class="line">                userInfo = server.blogger.getUsersBlogs(cfg[<span class="string">&quot;appkey&quot;</span>], cfg[<span class="string">&quot;usr&quot;</span>], cfg[<span class="string">&quot;passwd&quot;</span>])</span><br><span class="line">                print(userInfo[<span class="number">0</span>])</span><br><span class="line">                <span class="comment"># &#123;&#x27;blogid&#x27;: &#x27;xxx&#x27;, &#x27;url&#x27;: &#x27;xxx&#x27;, &#x27;blogName&#x27;: &#x27;xxx&#x27;&#125;</span></span><br><span class="line">                cfg[<span class="string">&quot;blogid&quot;</span>] = userInfo[<span class="number">0</span>][<span class="string">&quot;blogid&quot;</span>]</span><br><span class="line">                <span class="keyword">break</span></span><br><span class="line">            <span class="keyword">except</span>:</span><br><span class="line">                print(<span class="string">&quot;发生错误！&quot;</span>)</span><br><span class="line">        <span class="keyword">with</span> open(self._configpath, <span class="string">&quot;w&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">                json.dump(cfg, f, indent=<span class="number">4</span>, ensure_ascii=<span class="literal">False</span>)</span><br><span class="line">        </span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">existConfig</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        返回配置是否存在</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            <span class="keyword">with</span> open(self._configpath, <span class="string">&quot;r&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">                <span class="keyword">try</span>:</span><br><span class="line">                    cfg = json.load(f)</span><br><span class="line">                    <span class="keyword">if</span> cfg == &#123;&#125;:</span><br><span class="line">                        <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">                    <span class="keyword">else</span>:</span><br><span class="line">                        <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line">                <span class="keyword">except</span> json.decoder.JSONDecodeError:  <span class="comment"># 文件为空</span></span><br><span class="line">                    <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line">        <span class="keyword">except</span>:</span><br><span class="line">            <span class="keyword">with</span> open(self._configpath, <span class="string">&quot;w&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">                json.dump(&#123;&#125;, f)</span><br><span class="line">                <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">readConfig</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        读取配置</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">if</span> <span class="keyword">not</span> self.existConfig():</span><br><span class="line">            self.createConfig()</span><br><span class="line"></span><br><span class="line">        <span class="keyword">with</span> open(self._configpath, <span class="string">&quot;r&quot;</span>, encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">            self._config = json.load(f)</span><br><span class="line">            self._server = xmlrpclib.ServerProxy(self._config[<span class="string">&quot;url&quot;</span>])</span><br><span class="line">            self._mwb = self._server.metaWeblog</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">getUsersBlogs</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        获取博客信息</span></span><br><span class="line"><span class="string">        @return: &#123;</span></span><br><span class="line"><span class="string">            string  blogid</span></span><br><span class="line"><span class="string">            stringurl</span></span><br><span class="line"><span class="string">            stringblogName</span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        userInfo = self._server.blogger.getUsersBlogs(self._config[<span class="string">&quot;appkey&quot;</span>], self._config[<span class="string">&quot;usr&quot;</span>], self._config[<span class="string">&quot;passwd&quot;</span>])</span><br><span class="line">        <span class="keyword">return</span> userInfo</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">getRecentPosts</span>(<span class="params">self, num</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        读取最近的博文信息</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._mwb.getRecentPosts(self._config[<span class="string">&quot;blogid&quot;</span>], self._config[<span class="string">&quot;usr&quot;</span>], self._config[<span class="string">&quot;passwd&quot;</span>], num)</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">newPost</span>(<span class="params">self, post, publish</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        发布新博文</span></span><br><span class="line"><span class="string">        @post: 发布内容</span></span><br><span class="line"><span class="string">        @publish: 是否公开</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                postid = self._mwb.newPost(self._config[<span class="string">&#x27;blogid&#x27;</span>], self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>], post, publish)</span><br><span class="line">                <span class="keyword">break</span></span><br><span class="line">            <span class="keyword">except</span>:</span><br><span class="line">                time.sleep(<span class="number">5</span>)</span><br><span class="line">        <span class="keyword">return</span> postid</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">editPost</span>(<span class="params">self, postid, post, publish</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        更新已存在的博文</span></span><br><span class="line"><span class="string">        @postid: 已存在博文ID</span></span><br><span class="line"><span class="string">        @post: 发布内容</span></span><br><span class="line"><span class="string">        @publish: 是否公开发布</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        self._mwb.editPost(postid, self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>], post, publish)</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">deletePost</span>(<span class="params">self, postid, publish</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        删除博文</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._server.blogger.deletePost(self._config[<span class="string">&#x27;appkey&#x27;</span>], postid, self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>], publish)</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">getCategories</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        获取博文分类</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._mwb.getCategories(self._config[<span class="string">&#x27;blogid&#x27;</span>], self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>])</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">getPost</span>(<span class="params">self, postid</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        读取博文信息</span></span><br><span class="line"><span class="string">        @postid: 博文ID</span></span><br><span class="line"><span class="string">        @return: POST</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._mwb.getPost(postid, self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>])</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">newMediaObject</span>(<span class="params">self, file</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        资源文件（图片，音频，视频...)上传</span></span><br><span class="line"><span class="string">        @file: &#123;</span></span><br><span class="line"><span class="string">            base64bits</span></span><br><span class="line"><span class="string">            stringname</span></span><br><span class="line"><span class="string">            stringtype</span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string">        @return: URL</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._mwb.newMediaObject(self._config[<span class="string">&#x27;blogid&#x27;</span>], self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>], file)</span><br><span class="line">    </span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">newCategory</span>(<span class="params">self, categoray</span>):</span></span><br><span class="line">        <span class="string">&#x27;&#x27;&#x27;</span></span><br><span class="line"><span class="string">        新建分类</span></span><br><span class="line"><span class="string">        @categoray: &#123;</span></span><br><span class="line"><span class="string">            stringname</span></span><br><span class="line"><span class="string">            stringslug (optional)</span></span><br><span class="line"><span class="string">            integerparent_id</span></span><br><span class="line"><span class="string">            stringdescription (optional)</span></span><br><span class="line"><span class="string">        &#125;</span></span><br><span class="line"><span class="string">        @return : categorayid</span></span><br><span class="line"><span class="string">        &#x27;&#x27;&#x27;</span></span><br><span class="line">        <span class="keyword">return</span> self._server.wp.newCategory(self._config[<span class="string">&#x27;blogid&#x27;</span>], self._config[<span class="string">&#x27;usr&#x27;</span>], self._config[<span class="string">&#x27;passwd&#x27;</span>], categoray)</span><br></pre></td></tr></table></figure><h1 id="GitPython版本管理"><a href="#GitPython版本管理" class="headerlink" title="GitPython版本管理"></a>GitPython版本管理</h1><p>在生成新的html文档之前，先删除旧的（除了<code>.git</code>目录）:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span> os.path.exists(repo_dir):</span><br><span class="line">    <span class="keyword">for</span> sub_dir <span class="keyword">in</span> os.listdir(repo_dir):</span><br><span class="line">        <span class="keyword">if</span> os.path.isdir(os.path.join(repo_dir, sub_dir)) <span class="keyword">and</span> sub_dir != <span class="string">&#x27;.git&#x27;</span>: </span><br><span class="line">            shutil.rmtree(os.path.join(repo_dir, sub_dir))</span><br><span class="line">        <span class="keyword">if</span> os.path.isfile(os.path.join(repo_dir, sub_dir)):</span><br><span class="line">            os.remove(os.path.join(repo_dir, sub_dir))</span><br></pre></td></tr></table></figure><p>下面是封装好的<code>gitpython</code>的<code>class</code>:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> git</span><br><span class="line"><span class="keyword">import</span> os</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">RepoScanner</span>():</span></span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">__init__</span>(<span class="params">self, repopath</span>):</span></span><br><span class="line">        self._root = repopath</span><br><span class="line">        <span class="keyword">try</span>:</span><br><span class="line">            self._repo = git.Repo(self._root)</span><br><span class="line">        <span class="keyword">except</span>:</span><br><span class="line">            <span class="comment"># <span class="doctag">TODO:</span> color log</span></span><br><span class="line">            print(<span class="string">&#x27;\033[44m\033[37m[INFO]\033[0m Fail to open git repo at: %s&#x27;</span> % (repopath))</span><br><span class="line">            <span class="keyword">while</span> (<span class="literal">True</span>):</span><br><span class="line">                in_content = input(<span class="string">&#x27;\033[44m\033[37m[INFO]\033[0m Try to create a new repo? [y/n]: &#x27;</span>)</span><br><span class="line">                <span class="keyword">if</span> (in_content == <span class="string">&#x27;y&#x27;</span> <span class="keyword">or</span> in_content == <span class="string">&#x27;Y&#x27;</span>):</span><br><span class="line">                    <span class="keyword">break</span></span><br><span class="line">                <span class="keyword">if</span> (in_content == <span class="string">&#x27;n&#x27;</span> <span class="keyword">or</span> in_content == <span class="string">&#x27;N&#x27;</span>):</span><br><span class="line">                    <span class="keyword">return</span></span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                self._repo = git.Repo.init(path=self._root)</span><br><span class="line">            <span class="keyword">except</span> Exception <span class="keyword">as</span> e:</span><br><span class="line">                <span class="keyword">raise</span> e</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">getNewFiles</span>(<span class="params">self</span>):</span></span><br><span class="line">        <span class="keyword">return</span> self._repo.untracked_files</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">def</span> <span class="title">scan</span>(<span class="params">self</span>):</span></span><br><span class="line">        diff = [ item.a_path <span class="keyword">for</span> item <span class="keyword">in</span> self._repo.index.diff(<span class="literal">None</span>) ]</span><br><span class="line">        deleted = []</span><br><span class="line">        changed = []</span><br><span class="line">        <span class="keyword">for</span> item <span class="keyword">in</span> diff:</span><br><span class="line">            <span class="keyword">if</span> <span class="keyword">not</span> os.path.exists(os.path.join(self._root, item)):</span><br><span class="line">                deleted.append(item)</span><br><span class="line">            <span class="keyword">else</span>: changed.append(item)</span><br><span class="line">        <span class="keyword">return</span> &#123;<span class="string">&#x27;new&#x27;</span>: self.getNewFiles(), <span class="string">&#x27;deleted&#x27;</span>: deleted, <span class="string">&#x27;changed&#x27;</span>: changed&#125;</span><br></pre></td></tr></table></figure><p>剩下还有一些细节：包括本地化文章ID等就不在本文内过多赘述，这里只提供大致思路，具体代码详见Github</p><h1 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h1><p>如果发现中文转码出现问题，记得运行下面这行命令：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global core.quotepath <span class="literal">false</span></span><br></pre></td></tr></table></figure></p><h1 id="GitHub"><a href="#GitHub" class="headerlink" title="GitHub"></a>GitHub</h1><p><a href="https://github.com/JeffersonQin/hexo-cnblogs-sync">https://github.com/JeffersonQin/hexo-cnblogs-sync</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;介绍&quot;&gt;&lt;a href=&quot;#介绍&quot; class=&quot;headerlink&quot; title=&quot;介绍&quot;&gt;&lt;/a&gt;介绍&lt;/h1&gt;&lt;p&gt;之前想到：博客一次写作，多地发布，于是边有了这个项目：选择性同步Hexo与博客园。&lt;/p&gt;
&lt;p&gt;GitHub链接：&lt;a href=&quot;htt</summary>
      
    
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/categories/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/tags/Hexo/"/>
    
    <category term="Blog" scheme="http://gyrojeff.moe/tags/Blog/"/>
    
    <category term="cnblogs" scheme="http://gyrojeff.moe/tags/cnblogs/"/>
    
    <category term="python" scheme="http://gyrojeff.moe/tags/python/"/>
    
    <category term="html" scheme="http://gyrojeff.moe/tags/html/"/>
    
    <category term="css" scheme="http://gyrojeff.moe/tags/css/"/>
    
  </entry>
  
  <entry>
    <title>git出现中文转码问题的解决方法</title>
    <link href="http://gyrojeff.moe/2020/09/14/git%E5%87%BA%E7%8E%B0%E4%B8%AD%E6%96%87%E8%BD%AC%E7%A0%81%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/"/>
    <id>http://gyrojeff.moe/2020/09/14/git%E5%87%BA%E7%8E%B0%E4%B8%AD%E6%96%87%E8%BD%AC%E7%A0%81%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</id>
    <published>2020-09-14T06:26:35.000Z</published>
    <updated>2020-09-15T00:00:28.000Z</updated>
    
    <content type="html"><![CDATA[<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global core.quotepath <span class="literal">false</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span clas</summary>
      
    
    
    
    <category term="Git" scheme="http://gyrojeff.moe/categories/Git/"/>
    
    
    <category term="git" scheme="http://gyrojeff.moe/tags/git/"/>
    
    <category term="编码" scheme="http://gyrojeff.moe/tags/%E7%BC%96%E7%A0%81/"/>
    
    <category term="转码" scheme="http://gyrojeff.moe/tags/%E8%BD%AC%E7%A0%81/"/>
    
  </entry>
  
  <entry>
    <title>阴霾</title>
    <link href="http://gyrojeff.moe/2020/09/12/%E9%98%B4%E9%9C%BE/"/>
    <id>http://gyrojeff.moe/2020/09/12/%E9%98%B4%E9%9C%BE/</id>
    <published>2020-09-12T01:44:21.000Z</published>
    <updated>2020-09-12T01:49:16.000Z</updated>
    
    <content type="html"><![CDATA[<p>自从被生下来开始，就是欠别人的。</p><p>要是没被生下来就好了呢。</p><p>自己如何努力到头来会被一句“还不是因为我 xxx”全部掩盖</p><p>就算努力让自我提高了</p><p>这样活着好累啊。</p><p>好累啊。</p><p>提前社会教育对吧。</p><p>属实强。</p><p>但做了那么多有用吗。</p><p>结果还不是一样吗。</p><p>达不到目的发泄在我身上。</p><p>我从一开始就没什么指望。</p><p>从最开始就已经看到了结束。</p><p>所以我什么都没说。</p><p>但是不需要我说还是发生了。</p><p>所以都无所谓了。</p><hr><p>本来都决定了要好好学习的呢。</p><p>被骂了以后又不想学了。</p><p>明明是自己的事情才对。</p><p>为什么那么容易被别人影响呢。</p><p>好烦啊。</p><p>为什么出生之前没有人询问过我的意见问我想不想被生下来。</p><p>没被生下来就好了呢。</p><p>什么都不用做什么都不用想。</p><p>消失了就好了呢。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;自从被生下来开始，就是欠别人的。&lt;/p&gt;
&lt;p&gt;要是没被生下来就好了呢。&lt;/p&gt;
&lt;p&gt;自己如何努力到头来会被一句“还不是因为我 xxx”全部掩盖&lt;/p&gt;
&lt;p&gt;就算努力让自我提高了&lt;/p&gt;
&lt;p&gt;这样活着好累啊。&lt;/p&gt;
&lt;p&gt;好累啊。&lt;/p&gt;
&lt;p&gt;提前社会教育对吧。&lt;</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="压力" scheme="http://gyrojeff.moe/tags/%E5%8E%8B%E5%8A%9B/"/>
    
  </entry>
  
  <entry>
    <title>博客评论功能升级 - Gitalk</title>
    <link href="http://gyrojeff.moe/2020/09/11/%E5%8D%9A%E5%AE%A2%E8%AF%84%E8%AE%BA%E5%8A%9F%E8%83%BD%E5%8D%87%E7%BA%A7/"/>
    <id>http://gyrojeff.moe/2020/09/11/%E5%8D%9A%E5%AE%A2%E8%AF%84%E8%AE%BA%E5%8A%9F%E8%83%BD%E5%8D%87%E7%BA%A7/</id>
    <published>2020-09-11T10:01:18.000Z</published>
    <updated>2020-09-15T00:00:16.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>之前使用<code>Valine</code>，但是一直苦于别人评论我并不能第一时间知道，便倒腾了一个早上的<code>Valine</code>邮件提醒功能。但但但但是，免费版的<code>Valine</code>会强制休眠，我便另寻他道。</p><h1 id="Gitalk"><a href="#Gitalk" class="headerlink" title="Gitalk"></a>Gitalk</h1><p>项目主页：<a href="https://github.com/gitalk/gitalk">https://github.com/gitalk/gitalk</a></p><p>引用：</p><blockquote><p>Gitalk is a modern comment component based on GitHub Issue and Preact.</p></blockquote><h1 id="Hexo-amp-Next-适配"><a href="#Hexo-amp-Next-适配" class="headerlink" title="Hexo &amp; Next 适配"></a>Hexo &amp; Next 适配</h1><p>打开<code>themes/next/_config.yml</code>，找到<code>Gitalk</code>部分：<br><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">gitalk:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">github_id:</span> <span class="string">&lt;repo-owner&gt;</span> <span class="comment"># GitHub repo owner</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">&lt;repo-name&gt;</span> <span class="comment"># Repository name to store issues</span></span><br><span class="line">  <span class="attr">client_id:</span> <span class="string">&lt;client-id&gt;</span> <span class="comment"># GitHub Application Client ID</span></span><br><span class="line">  <span class="attr">client_secret:</span> <span class="string">&lt;app-secret&gt;</span> <span class="comment"># GitHub Application Client Secret</span></span><br><span class="line">  <span class="attr">admin_user:</span> <span class="string">&lt;admin&gt;</span> <span class="comment"># GitHub repo owner and collaborators, only these guys can initialize gitHub issues</span></span><br><span class="line">  <span class="attr">distraction_free_mode:</span> <span class="literal">true</span> <span class="comment"># Facebook-like distraction free mode</span></span><br><span class="line">  <span class="comment"># Gitalk&#x27;s display language depends on user&#x27;s browser or system environment</span></span><br><span class="line">  <span class="comment"># If you want everyone visiting your site to see a uniform language, you can set a force language value</span></span><br><span class="line">  <span class="comment"># Available values: en | es-ES | fr | ru | zh-CN | zh-TW</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">zh-CN</span></span><br></pre></td></tr></table></figure></p><ul><li><code>github_id</code>：储存项目的用户的GitHub用户名</li><li><code>repo</code>：储存<code>issue</code>的<code>repo</code></li><li><code>client_id</code> &amp; <code>client_secret</code>：<a href="https://github.com/settings/applications/new">这里申请</a> </li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;引言&quot;&gt;&lt;a href=&quot;#引言&quot; class=&quot;headerlink&quot; title=&quot;引言&quot;&gt;&lt;/a&gt;引言&lt;/h1&gt;&lt;p&gt;之前使用&lt;code&gt;Valine&lt;/code&gt;，但是一直苦于别人评论我并不能第一时间知道，便倒腾了一个早上的&lt;code&gt;Valine&lt;/co</summary>
      
    
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/categories/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/tags/Hexo/"/>
    
    <category term="Blog" scheme="http://gyrojeff.moe/tags/Blog/"/>
    
    <category term="Gitalk" scheme="http://gyrojeff.moe/tags/Gitalk/"/>
    
    <category term="Comment" scheme="http://gyrojeff.moe/tags/Comment/"/>
    
  </entry>
  
  <entry>
    <title>git撤销commit和更改commit注释的方法</title>
    <link href="http://gyrojeff.moe/2020/09/11/git%E6%92%A4%E9%94%80commit%E5%92%8C%E6%9B%B4%E6%94%B9commit%E6%B3%A8%E9%87%8A%E7%9A%84%E6%96%B9%E6%B3%95/"/>
    <id>http://gyrojeff.moe/2020/09/11/git%E6%92%A4%E9%94%80commit%E5%92%8C%E6%9B%B4%E6%94%B9commit%E6%B3%A8%E9%87%8A%E7%9A%84%E6%96%B9%E6%B3%95/</id>
    <published>2020-09-11T02:11:55.000Z</published>
    <updated>2020-09-18T15:13:42.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="撤回commit并保留代码"><a href="#撤回commit并保留代码" class="headerlink" title="撤回commit并保留代码"></a>撤回commit并保留代码</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git reset --soft HEAD^</span><br></pre></td></tr></table></figure><h1 id="更改commit注释"><a href="#更改commit注释" class="headerlink" title="更改commit注释"></a>更改commit注释</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit --amend</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;撤回commit并保留代码&quot;&gt;&lt;a href=&quot;#撤回commit并保留代码&quot; class=&quot;headerlink&quot; title=&quot;撤回commit并保留代码&quot;&gt;&lt;/a&gt;撤回commit并保留代码&lt;/h1&gt;&lt;figure class=&quot;highlight bash</summary>
      
    
    
    
    <category term="Git" scheme="http://gyrojeff.moe/categories/Git/"/>
    
    
    <category term="Git" scheme="http://gyrojeff.moe/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>git的submodule用法</title>
    <link href="http://gyrojeff.moe/2020/09/11/git%E7%9A%84submodule%E7%94%A8%E6%B3%95/"/>
    <id>http://gyrojeff.moe/2020/09/11/git%E7%9A%84submodule%E7%94%A8%E6%B3%95/</id>
    <published>2020-09-11T02:11:28.000Z</published>
    <updated>2020-09-15T00:00:32.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="submodule介绍"><a href="#submodule介绍" class="headerlink" title="submodule介绍"></a><code>submodule</code>介绍</h1><p><code>submodule</code>，即子模块，在项目中添加一个<code>submodule</code>就相当于引用了一个别的<code>repo</code>，记下来我将分别针对不同的情形展开讨论</p><h1 id="添加submodule"><a href="#添加submodule" class="headerlink" title="添加submodule"></a>添加<code>submodule</code></h1><p>在<code>main project</code>当中：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule add &lt;submodule_url&gt; &lt;path&gt;</span><br></pre></td></tr></table></figure><br>其中，<code>submodule_url</code>为<code>submodule</code>的<code>repo</code>地址，<code>path</code>为接下来<code>clone</code>的地址。运行之后，会发现目录下多出了<code>.gitmodule</code>文件。</p><h1 id="已经clone了一个项目，添加为submodule"><a href="#已经clone了一个项目，添加为submodule" class="headerlink" title="已经clone了一个项目，添加为submodule"></a>已经<code>clone</code>了一个项目，添加为<code>submodule</code></h1><p>和上面一样：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule add &lt;submodule_url&gt; &lt;path&gt;</span><br></pre></td></tr></table></figure></p><h1 id="改动了submodule内的代码"><a href="#改动了submodule内的代码" class="headerlink" title="改动了submodule内的代码"></a>改动了<code>submodule</code>内的代码</h1><p>首先明确一个概念：<code>submodule</code>是一个独立、完整的<code>repo</code>。这意味着，你可以像往常一样在<code>submodule</code>的根目录下进行<code>add/commit/push</code>，这都是完全没有问题的。但是，如果<code>submodule</code>没有<code>commit</code>，主项目是无法<code>commit</code>的，所以如果要<code>commit</code>主项目，首先要确保<code>submodule</code>内各个项目都没有问题。在此之外，当<code>submodule</code>内已经好了之后，我们便可以<code>commit</code>主项目，并可以发现主项目当中<code>submodule</code>是作为一个整体来计算的。</p><h1 id="删除submodule"><a href="#删除submodule" class="headerlink" title="删除submodule"></a>删除<code>submodule</code></h1><p>写在一个子模块：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule deinit</span><br></pre></td></tr></table></figure><br>如果：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule deinit --force</span><br></pre></td></tr></table></figure><br>那么即使本地<code>repo</code>有未提交的更改也会被移除. 上述命令是删除<code>.git/config</code>中的配置文件，若要继续删除本地的文件：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git rm &lt;submodule&gt;</span><br></pre></td></tr></table></figure><br>来删除。</p><p>操作完毕之后我们发现主项目就有更改了，进行<code>commit</code>来提交更改：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git commit -m <span class="string">&quot;Deleted the submodule project.&quot;</span></span><br></pre></td></tr></table></figure></p><h1 id="submodule有远程更新"><a href="#submodule有远程更新" class="headerlink" title="submodule有远程更新"></a><code>submodule</code>有远程更新</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> &lt;path&gt;</span><br><span class="line">git pull origin master</span><br></pre></td></tr></table></figure><p>如果有多个<code>submodule</code>，可以：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git submodule foreach <span class="string">&#x27;git pull origin master&#x27;</span></span><br></pre></td></tr></table></figure></p><h1 id="clone带有submodule的项目"><a href="#clone带有submodule的项目" class="headerlink" title="clone带有submodule的项目"></a><code>clone</code>带有<code>submodule</code>的项目</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> &lt;repo-url&gt; --recurse-submodules</span><br></pre></td></tr></table></figure><p>或者：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">clone</span> &lt;repo-url&gt;</span><br><span class="line">git submodule init</span><br><span class="line">git submodule update</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;submodule介绍&quot;&gt;&lt;a href=&quot;#submodule介绍&quot; class=&quot;headerlink&quot; title=&quot;submodule介绍&quot;&gt;&lt;/a&gt;&lt;code&gt;submodule&lt;/code&gt;介绍&lt;/h1&gt;&lt;p&gt;&lt;code&gt;submodule&lt;/code</summary>
      
    
    
    
    <category term="Git" scheme="http://gyrojeff.moe/categories/Git/"/>
    
    
    <category term="GitHub" scheme="http://gyrojeff.moe/tags/GitHub/"/>
    
    <category term="Git" scheme="http://gyrojeff.moe/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>Hexo博客升级和版本管理</title>
    <link href="http://gyrojeff.moe/2020/09/11/Hexo%E5%8D%9A%E5%AE%A2%E5%8D%87%E7%BA%A7%E5%92%8C%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/"/>
    <id>http://gyrojeff.moe/2020/09/11/Hexo%E5%8D%9A%E5%AE%A2%E5%8D%87%E7%BA%A7%E5%92%8C%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86/</id>
    <published>2020-09-11T02:11:05.000Z</published>
    <updated>2020-09-18T15:11:31.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>之前在做文件备份的时候，对于博客文件夹总是十分烦恼。由于一直在更改，百度云热备可能会出问题，然而我这个人冷备这种事绝对会忘，遂出现了本文。</p><h1 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h1><p>一开始我是准备整个项目直接扔到<code>GitHub</code>上面去的，但是很不巧，出现了报错，提示了<code>submodule</code>问题。出现了这个问题之后，我就决定好好整理之前杂乱不堪的工程文件。</p><h1 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h1><h2 id="第一步-重新Hexo-init"><a href="#第一步-重新Hexo-init" class="headerlink" title="第一步 重新Hexo init"></a>第一步 重新Hexo init</h2><p>按照之前的教程（在Hexo分类下的建站指南），新建Hexo项目</p><h2 id="第二步-重新导入之前的配置"><a href="#第二步-重新导入之前的配置" class="headerlink" title="第二步 重新导入之前的配置"></a>第二步 重新导入之前的配置</h2><p>包括<code>_config.yml</code>等，同步一下，注意版本之间的差异</p><h2 id="第三步-git-init"><a href="#第三步-git-init" class="headerlink" title="第三步 git init"></a>第三步 git init</h2><p>在博客的工程文件下，直接进行<code>git init</code>，到现在位置的话应该还不会产生问题。</p><h2 id="第四步-Fork-Next主题"><a href="#第四步-Fork-Next主题" class="headerlink" title="第四步 Fork Next主题"></a>第四步 Fork Next主题</h2><p>由于Next主题是开源的，我们不妨直接Fork。这里建议是私有Clone一下，因为毕竟要储存一些密钥啥的。</p><h2 id="第五步-添加Submodule"><a href="#第五步-添加Submodule" class="headerlink" title="第五步 添加Submodule"></a>第五步 添加Submodule</h2><p>在<code>博客</code>工程文件的<code>git</code>里面<code>add submodule</code>，详细用法参加之前写过的一篇<code>git submodule</code>文章（在<code>git</code>分类下）</p><h2 id="第六步-重新配置Next"><a href="#第六步-重新配置Next" class="headerlink" title="第六步 重新配置Next"></a>第六步 重新配置Next</h2><p>由于升级之后和原来的版本差异较大，这里就可以利用<code>git</code>的版本控制优势，良好地筛选出配置文件变动很大的地方。</p><h2 id="第七步-文件全部导入"><a href="#第七步-文件全部导入" class="headerlink" title="第七步 文件全部导入"></a>第七步 文件全部导入</h2><p>就是把之前所有的文件直接copy/paste，不会遇到什么大问题。</p><h1 id="版本控制"><a href="#版本控制" class="headerlink" title="版本控制"></a>版本控制</h1><p>接下来其实就和平时使用<code>git</code>没什么区别了，只不过<code>submodule</code>也是一个独立的<code>git</code>，所以我们要分别进行版本控制。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;之前在做文件备份的时候，对于博客文件夹总是十分烦恼。由于一直在更改，百度云热备可能会出问题，然而我这个人冷备这种事绝对会忘，遂出现了本文。&lt;</summary>
      
    
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/categories/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/tags/Hexo/"/>
    
    <category term="Git" scheme="http://gyrojeff.moe/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>WPF实现通知的两种方式（NuGet）</title>
    <link href="http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0%E9%80%9A%E7%9F%A5%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E5%BC%8F%EF%BC%88NuGet%EF%BC%89/"/>
    <id>http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0%E9%80%9A%E7%9F%A5%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E5%BC%8F%EF%BC%88NuGet%EF%BC%89/</id>
    <published>2020-09-10T05:08:43.000Z</published>
    <updated>2020-09-18T15:21:11.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Hardcodet-NotifyIcon-Wpf"><a href="#Hardcodet-NotifyIcon-Wpf" class="headerlink" title="Hardcodet.NotifyIcon.Wpf"></a><code>Hardcodet.NotifyIcon.Wpf</code></h1><p>这个是使用系统托盘图标来完成通知的推送的，前半段请参照<a href="/2020/09/10/WPF实现系统托盘/">这里</a></p><p>推送通知的例子：<br><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">App.TaskbarIcon.ShowBalloonTip(<span class="string">&quot;UIToy Notification&quot;</span>, <span class="string">&quot;Window Rect is null.&quot;</span>, Hardcodet.Wpf.TaskbarNotification.BalloonIcon.Error);</span><br></pre></td></tr></table></figure></p><p>这里我直接把<code>TaskbarIcon</code>当作全局的静态变量定义在<code>App.xaml.cs</code>里面了。</p><h1 id="Notifications-Wpf"><a href="#Notifications-Wpf" class="headerlink" title="Notifications.Wpf"></a><code>Notifications.Wpf</code></h1><p>具体用法可以参见作者GitHub：<a href="https://github.com/Federerer/Notifications.Wpf">https://github.com/Federerer/Notifications.Wpf</a></p><p>例子：<br><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">MaskWindowManager.notificationManager.Show(</span><br><span class="line">    <span class="keyword">new</span> NotificationContent </span><br><span class="line">    &#123; </span><br><span class="line">        Title = <span class="string">&quot;UIToy Notification&quot;</span>, </span><br><span class="line">        Message = <span class="string">&quot;UI Analyzation Started.&quot;</span>, </span><br><span class="line">        Type = NotificationType.Information </span><br><span class="line">    &#125;, areaName: <span class="string">&quot;WindowArea&quot;</span>);</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Hardcodet-NotifyIcon-Wpf&quot;&gt;&lt;a href=&quot;#Hardcodet-NotifyIcon-Wpf&quot; class=&quot;headerlink&quot; title=&quot;Hardcodet.NotifyIcon.Wpf&quot;&gt;&lt;/a&gt;&lt;code&gt;Hardcode</summary>
      
    
    
    
    <category term=".NET" scheme="http://gyrojeff.moe/categories/NET/"/>
    
    
    <category term="C#" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term=".NET" scheme="http://gyrojeff.moe/tags/NET/"/>
    
    <category term="WPF" scheme="http://gyrojeff.moe/tags/WPF/"/>
    
    <category term="NuGet" scheme="http://gyrojeff.moe/tags/NuGet/"/>
    
  </entry>
  
  <entry>
    <title>WPF实现Win10系统截图的模拟</title>
    <link href="http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0Win10%E7%B3%BB%E7%BB%9F%E6%88%AA%E5%9B%BE%E7%9A%84%E6%A8%A1%E6%8B%9F/"/>
    <id>http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0Win10%E7%B3%BB%E7%BB%9F%E6%88%AA%E5%9B%BE%E7%9A%84%E6%A8%A1%E6%8B%9F/</id>
    <published>2020-09-10T05:08:18.000Z</published>
    <updated>2020-09-15T00:00:47.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>在项目中想要直接调用系统的截图工具，毕竟这样感觉有原生的流畅丝滑般的感觉（雾），但是几经查找并未找到API，所以便萌生了直接模拟系统快捷键进行实现。在Windows10当中，截图工具的快捷键为<code>Shift + Win + S</code>，故模拟即可。为了以后方便调用，我将这些函数抽象成了工具类</p><h1 id="VirtualKey"><a href="#VirtualKey" class="headerlink" title="VirtualKey"></a>VirtualKey</h1><p>由于在C#当中，系统提供的Key的数值和ASCII码里的不太一样（当初就在这里被坑了），所以就Enumerate了一下。（码分之所以前后有区别是因为前半段是使用代码直接生成的，C++的语法糖好好吃）</p><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">using</span> System;</span><br><span class="line"><span class="keyword">using</span> System.Collections.Generic;</span><br><span class="line"><span class="keyword">using</span> System.Text;</span><br><span class="line"></span><br><span class="line"><span class="keyword">namespace</span> <span class="title">Elegant.Keyboard</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">enum</span> VirtualKey</span><br><span class="line">    &#123;</span><br><span class="line">        VK_a = <span class="number">97</span>,</span><br><span class="line">        VK_b = <span class="number">98</span>,</span><br><span class="line">        VK_c = <span class="number">99</span>,</span><br><span class="line">        VK_d = <span class="number">100</span>,</span><br><span class="line">        VK_e = <span class="number">101</span>,</span><br><span class="line">        VK_f = <span class="number">102</span>,</span><br><span class="line">        VK_g = <span class="number">103</span>,</span><br><span class="line">        VK_h = <span class="number">104</span>,</span><br><span class="line">        VK_i = <span class="number">105</span>,</span><br><span class="line">        VK_j = <span class="number">106</span>,</span><br><span class="line">        VK_k = <span class="number">107</span>,</span><br><span class="line">        VK_l = <span class="number">108</span>,</span><br><span class="line">        VK_m = <span class="number">109</span>,</span><br><span class="line">        VK_n = <span class="number">110</span>,</span><br><span class="line">        VK_o = <span class="number">111</span>,</span><br><span class="line">        VK_p = <span class="number">112</span>,</span><br><span class="line">        VK_q = <span class="number">113</span>,</span><br><span class="line">        VK_r = <span class="number">114</span>,</span><br><span class="line">        VK_s = <span class="number">115</span>,</span><br><span class="line">        VK_t = <span class="number">116</span>,</span><br><span class="line">        VK_u = <span class="number">117</span>,</span><br><span class="line">        VK_v = <span class="number">118</span>,</span><br><span class="line">        VK_w = <span class="number">119</span>,</span><br><span class="line">        VK_x = <span class="number">120</span>,</span><br><span class="line">        VK_y = <span class="number">121</span>,</span><br><span class="line">        VK_z = <span class="number">122</span>,</span><br><span class="line">        VK_A = <span class="number">65</span>,</span><br><span class="line">        VK_B = <span class="number">66</span>,</span><br><span class="line">        VK_C = <span class="number">67</span>,</span><br><span class="line">        VK_D = <span class="number">68</span>,</span><br><span class="line">        VK_E = <span class="number">69</span>,</span><br><span class="line">        VK_F = <span class="number">70</span>,</span><br><span class="line">        VK_G = <span class="number">71</span>,</span><br><span class="line">        VK_H = <span class="number">72</span>,</span><br><span class="line">        VK_I = <span class="number">73</span>,</span><br><span class="line">        VK_J = <span class="number">74</span>,</span><br><span class="line">        VK_K = <span class="number">75</span>,</span><br><span class="line">        VK_L = <span class="number">76</span>,</span><br><span class="line">        VK_M = <span class="number">77</span>,</span><br><span class="line">        VK_N = <span class="number">78</span>,</span><br><span class="line">        VK_O = <span class="number">79</span>,</span><br><span class="line">        VK_P = <span class="number">80</span>,</span><br><span class="line">        VK_Q = <span class="number">81</span>,</span><br><span class="line">        VK_R = <span class="number">82</span>,</span><br><span class="line">        VK_S = <span class="number">83</span>,</span><br><span class="line">        VK_T = <span class="number">84</span>,</span><br><span class="line">        VK_U = <span class="number">85</span>,</span><br><span class="line">        VK_V = <span class="number">86</span>,</span><br><span class="line">        VK_W = <span class="number">87</span>,</span><br><span class="line">        VK_X = <span class="number">88</span>,</span><br><span class="line">        VK_Y = <span class="number">89</span>,</span><br><span class="line">        VK_Z = <span class="number">90</span>,</span><br><span class="line">        VK_0 = <span class="number">48</span>,</span><br><span class="line">        VK_1 = <span class="number">49</span>,</span><br><span class="line">        VK_2 = <span class="number">50</span>,</span><br><span class="line">        VK_3 = <span class="number">51</span>,</span><br><span class="line">        VK_4 = <span class="number">52</span>,</span><br><span class="line">        VK_5 = <span class="number">53</span>,</span><br><span class="line">        VK_6 = <span class="number">54</span>,</span><br><span class="line">        VK_7 = <span class="number">55</span>,</span><br><span class="line">        VK_8 = <span class="number">56</span>,</span><br><span class="line">        VK_9 = <span class="number">57</span>,</span><br><span class="line">        VK_LBUTTON = <span class="number">0x01</span>, </span><br><span class="line">        VK_RBUTTON = <span class="number">0x02</span>, </span><br><span class="line">        VK_CANCEL = <span class="number">0x03</span>, </span><br><span class="line">        VK_MBUTTON = <span class="number">0x04</span>, </span><br><span class="line">        VK_BACK = <span class="number">0x08</span>, </span><br><span class="line">        VK_TAB = <span class="number">0x09</span>, </span><br><span class="line">        VK_CLEAR = <span class="number">0x0C</span>,</span><br><span class="line">        VK_RETURN = <span class="number">0x0D</span>, </span><br><span class="line">        VK_SHIFT = <span class="number">0x10</span>,</span><br><span class="line">        VK_CONTROL = <span class="number">0x11</span>,</span><br><span class="line">        VK_MENU = <span class="number">0x12</span>, </span><br><span class="line">        VK_PAUSE = <span class="number">0x13</span>,</span><br><span class="line">        VK_CAPITAL = <span class="number">0x14</span>, </span><br><span class="line">        VK_KANA = <span class="number">0x15</span>,</span><br><span class="line">        VK_HANGEUL = <span class="number">0x15</span>,</span><br><span class="line">        VK_HANGUL = <span class="number">0x15</span>,</span><br><span class="line">        VK_JUNJA = <span class="number">0x17</span>,</span><br><span class="line">        VK_FINAL = <span class="number">0x18</span>,</span><br><span class="line">        VK_HANJA = <span class="number">0x19</span>,</span><br><span class="line">        VK_KANJI = <span class="number">0x19</span>,</span><br><span class="line">        VK_ESCAPE = <span class="number">0x1B</span>, </span><br><span class="line">        VK_CONVERT = <span class="number">0x1C</span>,</span><br><span class="line">        VK_NONCONVERT = <span class="number">0x1D</span>,</span><br><span class="line">        VK_ACCEPT = <span class="number">0x1E</span>,</span><br><span class="line">        VK_MODECHANGE = <span class="number">0x1F</span>,</span><br><span class="line">        VK_SPACE = <span class="number">0x20</span>, </span><br><span class="line">        VK_PRIOR = <span class="number">0x21</span>, </span><br><span class="line">        VK_NEXT = <span class="number">0x22</span>, </span><br><span class="line">        VK_END = <span class="number">0x23</span>, </span><br><span class="line">        VK_HOME = <span class="number">0x24</span>, </span><br><span class="line">        VK_LEFT = <span class="number">0x25</span>,</span><br><span class="line">        VK_UP = <span class="number">0x26</span>,</span><br><span class="line">        VK_RIGHT = <span class="number">0x27</span>,</span><br><span class="line">        VK_DOWN = <span class="number">0x28</span>,</span><br><span class="line">        VK_SELECT = <span class="number">0x29</span>,</span><br><span class="line">        VK_PRINT = <span class="number">0x2A</span>,</span><br><span class="line">        VK_EXECUTE = <span class="number">0x2B</span>,</span><br><span class="line">        VK_SNAPSHOT = <span class="number">0x2C</span>, </span><br><span class="line">        VK_INSERT = <span class="number">0x2D</span>, </span><br><span class="line">        VK_DELETE = <span class="number">0x2E</span>, </span><br><span class="line">        VK_HELP = <span class="number">0x2F</span>,</span><br><span class="line">        VK_LWIN = <span class="number">0x5B</span>, </span><br><span class="line">        VK_RWIN = <span class="number">0x5C</span>, </span><br><span class="line">        VK_APPS = <span class="number">0x5D</span>, </span><br><span class="line">        VK_NUMPAD0 = <span class="number">0x60</span>, </span><br><span class="line">        VK_NUMPAD1 = <span class="number">0x61</span>,</span><br><span class="line">        VK_NUMPAD2 = <span class="number">0x62</span>,</span><br><span class="line">        VK_NUMPAD3 = <span class="number">0x63</span>,</span><br><span class="line">        VK_NUMPAD4 = <span class="number">0x64</span>,</span><br><span class="line">        VK_NUMPAD5 = <span class="number">0x65</span>,</span><br><span class="line">        VK_NUMPAD6 = <span class="number">0x66</span>,</span><br><span class="line">        VK_NUMPAD7 = <span class="number">0x67</span>,</span><br><span class="line">        VK_NUMPAD8 = <span class="number">0x68</span>,</span><br><span class="line">        VK_NUMPAD9 = <span class="number">0x69</span>,</span><br><span class="line">        VK_MULTIPLY = <span class="number">0x6A</span>, </span><br><span class="line">        VK_ADD = <span class="number">0x6B</span>, </span><br><span class="line">        VK_SEPARATOR = <span class="number">0x6C</span>, </span><br><span class="line">        VK_SUBTRACT = <span class="number">0x6D</span>, </span><br><span class="line">        VK_DECIMAL = <span class="number">0x6E</span>, </span><br><span class="line">        VK_DIVIDE = <span class="number">0x6F</span>,</span><br><span class="line">        VK_F1 = <span class="number">0x70</span>, </span><br><span class="line">        VK_F2 = <span class="number">0x71</span>,</span><br><span class="line">        VK_F3 = <span class="number">0x72</span>,</span><br><span class="line">        VK_F4 = <span class="number">0x73</span>,</span><br><span class="line">        VK_F5 = <span class="number">0x74</span>,</span><br><span class="line">        VK_F6 = <span class="number">0x75</span>,</span><br><span class="line">        VK_F7 = <span class="number">0x76</span>,</span><br><span class="line">        VK_F8 = <span class="number">0x77</span>,</span><br><span class="line">        VK_F9 = <span class="number">0x78</span>,</span><br><span class="line">        VK_F10 = <span class="number">0x79</span>,</span><br><span class="line">        VK_F11 = <span class="number">0x7A</span>,</span><br><span class="line">        VK_F12 = <span class="number">0x7B</span>,</span><br><span class="line">        VK_F13 = <span class="number">0x7C</span>,</span><br><span class="line">        VK_F14 = <span class="number">0x7D</span>,</span><br><span class="line">        VK_F15 = <span class="number">0x7E</span>,</span><br><span class="line">        VK_F16 = <span class="number">0x7F</span>,</span><br><span class="line">        VK_F17 = <span class="number">0x80</span>,</span><br><span class="line">        VK_F18 = <span class="number">0x81</span>,</span><br><span class="line">        VK_F19 = <span class="number">0x82</span>,</span><br><span class="line">        VK_F20 = <span class="number">0x83</span>,</span><br><span class="line">        VK_F21 = <span class="number">0x84</span>,</span><br><span class="line">        VK_F22 = <span class="number">0x85</span>,</span><br><span class="line">        VK_F23 = <span class="number">0x86</span>,</span><br><span class="line">        VK_F24 = <span class="number">0x87</span>,</span><br><span class="line">        VK_NUMLOCK = <span class="number">0x90</span>, </span><br><span class="line">        VK_SCROLL = <span class="number">0x91</span>, </span><br><span class="line">        VK_LSHIFT = <span class="number">0xA0</span>,</span><br><span class="line">        VK_RSHIFT = <span class="number">0xA1</span>,</span><br><span class="line">        VK_LCONTROL = <span class="number">0xA2</span>,</span><br><span class="line">        VK_RCONTROL = <span class="number">0xA3</span>,</span><br><span class="line">        VK_LMENU = <span class="number">0xA4</span>,</span><br><span class="line">        VK_RMENU = <span class="number">0xA5</span>,</span><br><span class="line">        VK_PROCESSKEY = <span class="number">0xE5</span>,</span><br><span class="line">        VK_ATTN = <span class="number">0xF6</span>,</span><br><span class="line">        VK_CRSEL = <span class="number">0xF7</span>,</span><br><span class="line">        VK_EXSEL = <span class="number">0xF8</span>,</span><br><span class="line">        VK_EREOF = <span class="number">0xF9</span>,</span><br><span class="line">        VK_PLAY = <span class="number">0xFA</span>,</span><br><span class="line">        VK_ZOOM = <span class="number">0xFB</span>,</span><br><span class="line">        VK_NONAME = <span class="number">0xFC</span>,</span><br><span class="line">        VK_PA1 = <span class="number">0xFD</span>,</span><br><span class="line">        VK_OEM_CLEAR = <span class="number">0xFE</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="VirtualKeyHelper"><a href="#VirtualKeyHelper" class="headerlink" title="VirtualKeyHelper"></a>VirtualKeyHelper</h1><p>直接使用<code>char</code>来获得<code>VirtualKey</code>：</p><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">using</span> System;</span><br><span class="line"><span class="keyword">using</span> System.Collections.Generic;</span><br><span class="line"><span class="keyword">using</span> System.Text;</span><br><span class="line"></span><br><span class="line"><span class="keyword">namespace</span> <span class="title">Elegant.Keyboard</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title">VirtualKeyHelper</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> VirtualKey <span class="title">GetVirtualKey</span>(<span class="params"><span class="keyword">char</span> Key</span>)</span></span><br><span class="line"><span class="function"></span>        &#123;</span><br><span class="line">            <span class="keyword">if</span> (Key &gt; <span class="number">127</span>) &#123; <span class="keyword">throw</span> <span class="keyword">new</span> Exception(<span class="string">&quot;Not Valid Char.&quot;</span>); &#125;</span><br><span class="line">            <span class="keyword">return</span> (VirtualKey)Key;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="KeyboardSimulator"><a href="#KeyboardSimulator" class="headerlink" title="KeyboardSimulator"></a>KeyboardSimulator</h1><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">using</span> System;</span><br><span class="line"><span class="keyword">using</span> System.Collections.Generic;</span><br><span class="line"><span class="keyword">using</span> System.Runtime.InteropServices;</span><br><span class="line"><span class="keyword">using</span> System.Text;</span><br><span class="line"></span><br><span class="line"><span class="keyword">namespace</span> <span class="title">Elegant.Keyboard</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="title">KeyboardSimulator</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="meta">#<span class="meta-keyword">region</span> Win32API调用</span></span><br><span class="line">        [<span class="meta">DllImport(<span class="meta-string">&quot;user32.dll&quot;</span>, EntryPoint = <span class="meta-string">&quot;keybd_event&quot;</span>, SetLastError = true)</span>]</span><br><span class="line">        <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">extern</span> <span class="keyword">void</span> <span class="title">keybd_event</span>(<span class="params"><span class="keyword">byte</span> bVk, <span class="keyword">byte</span> bScan, <span class="keyword">uint</span> dwFlags, <span class="keyword">uint</span> dwExtraInfo</span>)</span>;</span><br><span class="line">        <span class="meta">#<span class="meta-keyword">endregion</span></span></span><br><span class="line"></span><br><span class="line">        <span class="meta">#<span class="meta-keyword">region</span> 常量声明</span></span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">const</span> <span class="keyword">int</span> KEYEVENTF_KEY_DOWN = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">public</span> <span class="keyword">const</span> <span class="keyword">int</span> KEYEVENTF_KEY_UP = <span class="number">2</span>;</span><br><span class="line">        <span class="meta">#<span class="meta-keyword">endregion</span></span></span><br><span class="line"></span><br><span class="line">        <span class="meta">#<span class="meta-keyword">region</span> 模拟方法</span></span><br><span class="line">        <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">KeyPress</span>(<span class="params">VirtualKey Key</span>)</span></span><br><span class="line"><span class="function"></span>        &#123;</span><br><span class="line">            keybd_event((<span class="keyword">byte</span>)Key, <span class="number">0</span>, KEYEVENTF_KEY_DOWN, <span class="number">0</span>);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">KeyRelease</span>(<span class="params">VirtualKey Key</span>)</span></span><br><span class="line"><span class="function"></span>        &#123;</span><br><span class="line">            keybd_event((<span class="keyword">byte</span>)Key, <span class="number">0</span>, KEYEVENTF_KEY_UP, <span class="number">0</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="meta">#<span class="meta-keyword">endregion</span></span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="实现截图"><a href="#实现截图" class="headerlink" title="实现截图"></a>实现截图</h1><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">KeyPress(VirtualKey.VK_LSHIFT);</span><br><span class="line">KeyPress(VirtualKey.VK_LWIN);</span><br><span class="line">KeyPress(VirtualKey.VK_S);</span><br><span class="line">KeyRelease(VirtualKey.VK_S);</span><br><span class="line">KeyRelease(VirtualKey.VK_LWIN);</span><br><span class="line">KeyRelease(VirtualKey.VK_LSHIFT);</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;引言&quot;&gt;&lt;a href=&quot;#引言&quot; class=&quot;headerlink&quot; title=&quot;引言&quot;&gt;&lt;/a&gt;引言&lt;/h1&gt;&lt;p&gt;在项目中想要直接调用系统的截图工具，毕竟这样感觉有原生的流畅丝滑般的感觉（雾），但是几经查找并未找到API，所以便萌生了直接模拟系统快捷键进</summary>
      
    
    
    
    <category term=".NET" scheme="http://gyrojeff.moe/categories/NET/"/>
    
    
    <category term="C#" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term=".NET" scheme="http://gyrojeff.moe/tags/NET/"/>
    
    <category term="WPF" scheme="http://gyrojeff.moe/tags/WPF/"/>
    
    <category term="Win32API" scheme="http://gyrojeff.moe/tags/Win32API/"/>
    
  </entry>
  
  <entry>
    <title>WPF实现Win32API的调用</title>
    <link href="http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0Win32API%E7%9A%84%E8%B0%83%E7%94%A8/"/>
    <id>http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0Win32API%E7%9A%84%E8%B0%83%E7%94%A8/</id>
    <published>2020-09-10T05:08:00.000Z</published>
    <updated>2020-09-15T00:00:51.000Z</updated>
    
    <content type="html"><![CDATA[<p>之前在暑假的时候学了FDU的SoC课程，故对编译时的情况有了一定的了解。在WPF当中，如果我们要调用Win32API（这里以<code>keybd_event</code>为例）：<br><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[<span class="meta">DllImport(<span class="meta-string">&quot;user32.dll&quot;</span>, EntryPoint = <span class="meta-string">&quot;keybd_event&quot;</span>, SetLastError = true)</span>]</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">extern</span> <span class="keyword">void</span> <span class="title">keybd_event</span>(<span class="params"><span class="keyword">byte</span> bVk, <span class="keyword">byte</span> bScan, <span class="keyword">uint</span> dwFlags, <span class="keyword">uint</span> dwExtraInfo</span>)</span>;</span><br></pre></td></tr></table></figure><br>上述代码的意思也显而易见，<code>DllImport</code>是一个<code>attribute</code>标签。值得注意的是下面的<code>extern</code>关键词。众所周知，<code>.dll</code>的全称是<code>Dynamic Link Library</code>，即在编译时编译器会根据代码中的声明对库中的方法动态链接。这里的<code>extern</code>即，是对<code>keybd_event</code>做了声明，并明确是在<code>user32.dll</code>当中。其他<code>Win32API</code>的调用同理。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;之前在暑假的时候学了FDU的SoC课程，故对编译时的情况有了一定的了解。在WPF当中，如果我们要调用Win32API（这里以&lt;code&gt;keybd_event&lt;/code&gt;为例）：&lt;br&gt;&lt;figure class=&quot;highlight c#&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td</summary>
      
    
    
    
    <category term=".NET" scheme="http://gyrojeff.moe/categories/NET/"/>
    
    
    <category term="C#" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term=".NET" scheme="http://gyrojeff.moe/tags/NET/"/>
    
    <category term="WPF" scheme="http://gyrojeff.moe/tags/WPF/"/>
    
    <category term="Win32API" scheme="http://gyrojeff.moe/tags/Win32API/"/>
    
    <category term="Compiler" scheme="http://gyrojeff.moe/tags/Compiler/"/>
    
  </entry>
  
  <entry>
    <title>WPF实现系统托盘</title>
    <link href="http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0%E7%B3%BB%E7%BB%9F%E6%89%98%E7%9B%98/"/>
    <id>http://gyrojeff.moe/2020/09/10/WPF%E5%AE%9E%E7%8E%B0%E7%B3%BB%E7%BB%9F%E6%89%98%E7%9B%98/</id>
    <published>2020-09-10T05:07:42.000Z</published>
    <updated>2020-09-15T00:00:45.000Z</updated>
    
    <content type="html"><![CDATA[<p>在WinForm当中，我们可以使用非常轻松地实现系统托盘，在.NET Core的WPF当中，<code>System.Windows.Form</code>并不能作为命名空间引用，本文将讲述如何在WPF中实现系统托盘，以及如何将窗口最小化到系统托盘。</p><h1 id="安装NuGet包"><a href="#安装NuGet包" class="headerlink" title="安装NuGet包"></a>安装NuGet包</h1><p>搜索<code>Hardcodet.NotifyIcon.Wpf</code>并安装：</p><img src="/2020/09/10/WPF%E5%AE%9E%E7%8E%B0%E7%B3%BB%E7%BB%9F%E6%89%98%E7%9B%98/1.jpg" class=""><h1 id="编写ViewModel"><a href="#编写ViewModel" class="headerlink" title="编写ViewModel"></a>编写ViewModel</h1><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title">NotifyIconViewModel</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;summary&gt;</span></span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> 激活窗口</span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;/summary&gt;</span></span></span><br><span class="line">    <span class="keyword">public</span> ICommand ShowWindowCommand</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">get</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> DelegateCommand</span><br><span class="line">            &#123;</span><br><span class="line">                CommandAction = () =&gt;</span><br><span class="line">                &#123;</span><br><span class="line">                    Application.Current.MainWindow.Activate();</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;summary&gt;</span></span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> 隐藏窗口</span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;/summary&gt;</span></span></span><br><span class="line">    <span class="keyword">public</span> ICommand HideWindowCommand</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">get</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> DelegateCommand</span><br><span class="line">            &#123;</span><br><span class="line">                CommandAction = () =&gt; Application.Current.MainWindow.Hide()</span><br><span class="line">            &#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;summary&gt;</span></span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> 关闭软件</span></span><br><span class="line">    <span class="comment"><span class="doctag">///</span> <span class="doctag">&lt;/summary&gt;</span></span></span><br><span class="line">    <span class="keyword">public</span> ICommand ExitApplicationCommand</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">get</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> DelegateCommand &#123; CommandAction = () =&gt; Application.Current.Shutdown() &#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中，虽然代码中用到了<code>DelegateCommand</code>类，但实际上并未实际发生作用，只是为了更好地封装代码，增加某些特定条件下的可读性，读者也可自行将其更改为普通的Command。下面为<code>DelegateCommand</code>类代码：</p><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title">DelegateCommand</span> : <span class="title">ICommand</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">public</span> Action CommandAction &#123; <span class="keyword">get</span>; <span class="keyword">set</span>; &#125;</span><br><span class="line">    <span class="keyword">public</span> Func&lt;<span class="keyword">bool</span>&gt; CanExecuteFunc &#123; <span class="keyword">get</span>; <span class="keyword">set</span>; &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">Execute</span>(<span class="params"><span class="keyword">object</span> parameter</span>)</span></span><br><span class="line"><span class="function"></span>    &#123;</span><br><span class="line">        CommandAction();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">bool</span> <span class="title">CanExecute</span>(<span class="params"><span class="keyword">object</span> parameter</span>)</span></span><br><span class="line"><span class="function"></span>    &#123;</span><br><span class="line">        <span class="keyword">return</span> CanExecuteFunc == <span class="literal">null</span> || CanExecuteFunc();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">event</span> EventHandler CanExecuteChanged</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">add</span> &#123; CommandManager.RequerySuggested += <span class="keyword">value</span>; &#125;</span><br><span class="line">        <span class="keyword">remove</span> &#123; CommandManager.RequerySuggested -= <span class="keyword">value</span>; &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="在App-xaml中添加托盘信息并关联ViewModel"><a href="#在App-xaml中添加托盘信息并关联ViewModel" class="headerlink" title="在App.xaml中添加托盘信息并关联ViewModel"></a>在App.xaml中添加托盘信息并关联ViewModel</h1><p>在App.xaml添加命名空间：<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xmlns:tb&#x3D;&quot;http:&#x2F;&#x2F;www.hardcodet.net&#x2F;taskbar&quot;</span><br></pre></td></tr></table></figure><br>如果策略并不是隐藏窗口而是直接关闭窗口，那么为了防止所有窗口都退出导致的程序关闭，我们需要添加额外的一行属性：<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ShutdownMode&#x3D;&quot;OnExplicitShutdown&quot;</span><br></pre></td></tr></table></figure><br>而不是原来的<code>OnLastWindowClose</code>。接下来，我们在<code>Application.Resource</code>标签内添加系统托盘：<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">&lt;Application.Resources&gt;</span><br><span class="line">    &lt;ContextMenu x:Shared&#x3D;&quot;false&quot; x:Key&#x3D;&quot;SysTrayMenu&quot;&gt;</span><br><span class="line">        &lt;MenuItem Header&#x3D;&quot;显示窗口&quot; Command&#x3D;&quot;&#123;Binding ShowWindowCommand&#125;&quot; &#x2F;&gt;</span><br><span class="line">        &lt;MenuItem Header&#x3D;&quot;关闭窗口&quot; Command&#x3D;&quot;&#123;Binding HideWindowCommand&#125;&quot; &#x2F;&gt;</span><br><span class="line">        &lt;Separator &#x2F;&gt;</span><br><span class="line">        &lt;MenuItem Header&#x3D;&quot;退出&quot; Command&#x3D;&quot;&#123;Binding ExitApplicationCommand&#125;&quot; &#x2F;&gt;</span><br><span class="line">    &lt;&#x2F;ContextMenu&gt;</span><br><span class="line">    &lt;tb:TaskbarIcon x:Key&#x3D;&quot;Taskbar&quot;</span><br><span class="line">                    ToolTipText&#x3D;&quot;UIToy by Haoyun Qin&quot;</span><br><span class="line">                    DoubleClickCommand&#x3D;&quot;&#123;Binding ShowWindowCommand&#125;&quot;</span><br><span class="line">                    ContextMenu&#x3D;&quot;&#123;StaticResource SysTrayMenu&#125;&quot;</span><br><span class="line">                    IconSource&#x3D;&quot;UIToy.ico&quot;&gt;</span><br><span class="line">        &lt;tb:TaskbarIcon.DataContext&gt;</span><br><span class="line">            &lt;local:NotifyIconViewModel &#x2F;&gt;</span><br><span class="line">        &lt;&#x2F;tb:TaskbarIcon.DataContext&gt;</span><br><span class="line">    &lt;&#x2F;tb:TaskbarIcon&gt;</span><br><span class="line">&lt;&#x2F;Application.Resources&gt;</span><br></pre></td></tr></table></figure><br>上面，我们针对不同的操作，绑定了相关的命令。还需要添加一个<code>ico</code>文件（这里我添加的是<code>UIToy.ico</code>）</p><h1 id="在启动时显示系统托盘"><a href="#在启动时显示系统托盘" class="headerlink" title="在启动时显示系统托盘"></a>在启动时显示系统托盘</h1><p>在<code>App.xaml.cs</code>当中初始化<code>Taskbar</code>：<br><figure class="highlight c#"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">partial</span> <span class="keyword">class</span> <span class="title">App</span> : <span class="title">Application</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">static</span> TaskbarIcon TaskbarIcon;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">protected</span> <span class="keyword">override</span> <span class="keyword">void</span> <span class="title">OnStartup</span>(<span class="params">StartupEventArgs e</span>)</span></span><br><span class="line"><span class="function"></span>    &#123;</span><br><span class="line">        <span class="keyword">base</span>.OnStartup(e);</span><br><span class="line">        TaskbarIcon = (TaskbarIcon)FindResource(<span class="string">&quot;Taskbar&quot;</span>);</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>然后我们就可以发现，图标已经在系统托盘当中显示了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在WinForm当中，我们可以使用非常轻松地实现系统托盘，在.NET Core的WPF当中，&lt;code&gt;System.Windows.Form&lt;/code&gt;并不能作为命名空间引用，本文将讲述如何在WPF中实现系统托盘，以及如何将窗口最小化到系统托盘。&lt;/p&gt;
&lt;h1 id=</summary>
      
    
    
    
    <category term=".NET" scheme="http://gyrojeff.moe/categories/NET/"/>
    
    
    <category term="C#" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term=".NET" scheme="http://gyrojeff.moe/tags/NET/"/>
    
    <category term="WPF" scheme="http://gyrojeff.moe/tags/WPF/"/>
    
    <category term="系统托盘" scheme="http://gyrojeff.moe/tags/%E7%B3%BB%E7%BB%9F%E6%89%98%E7%9B%98/"/>
    
    <category term="NuGet" scheme="http://gyrojeff.moe/tags/NuGet/"/>
    
  </entry>
  
  <entry>
    <title>20年OI刷题(1) - 归并排序</title>
    <link href="http://gyrojeff.moe/2020/09/04/20%E5%B9%B4OI%E5%88%B7%E9%A2%98-1-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/"/>
    <id>http://gyrojeff.moe/2020/09/04/20%E5%B9%B4OI%E5%88%B7%E9%A2%98-1-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/</id>
    <published>2020-09-04T02:18:16.000Z</published>
    <updated>2020-09-15T00:00:13.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h1><p>不做赘述，细看下图：</p><img src="/2020/09/04/20%E5%B9%B4OI%E5%88%B7%E9%A2%98-1-%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/1.gif" class=""><h1 id="复杂度"><a href="#复杂度" class="headerlink" title="复杂度"></a>复杂度</h1><p>时间复杂度：$O(n\log n)$<br>空间复杂度：$O(n)$</p><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><p>（码风不好看，不喜勿碰）<br><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> MAXN = <span class="number">100005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="keyword">int</span> a[MAXN], temp[MAXN];</span><br><span class="line"></span><br><span class="line"><span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge_sort</span><span class="params">(T arr, T temp, <span class="keyword">int</span> l, <span class="keyword">int</span> r)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (l &gt;= r) <span class="keyword">return</span>;</span><br><span class="line">    <span class="keyword">int</span> mid = (l + r) &gt;&gt; <span class="number">1</span>;</span><br><span class="line">    merge_sort(arr, temp, l, mid);</span><br><span class="line">    merge_sort(arr, temp, mid + <span class="number">1</span>, r);</span><br><span class="line">    <span class="keyword">int</span> i = l, j = mid + <span class="number">1</span>, k = l;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= mid &amp;&amp; j &lt;= r)</span><br><span class="line">        temp[k ++] = arr[i] &lt; arr[j] ? arr[i ++] : arr[j ++];</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= mid)</span><br><span class="line">        temp[k ++] = arr[i ++];</span><br><span class="line">    <span class="keyword">while</span> (j &lt;= r)</span><br><span class="line">        temp[k ++] = arr[j ++];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">register</span> <span class="keyword">int</span> i = l; i &lt;= r; i ++) arr[i] = temp[i];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line">    merge_sort(a, temp, <span class="number">1</span>, n);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cout</span> &lt;&lt; a[i] &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>当然了，你也可以：<br><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line">    sort(a + <span class="number">1</span>, a + <span class="number">1</span> + n);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cout</span> &lt;&lt; a[i] &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><h1 id="测试传送门"><a href="#测试传送门" class="headerlink" title="测试传送门"></a>测试传送门</h1><p><a href="https://www.luogu.com.cn/problem/P1177">https://www.luogu.com.cn/problem/P1177</a></p><h1 id="代码下载"><a href="#代码下载" class="headerlink" title="代码下载"></a>代码下载</h1><p><a href="/2020/09/04/20年OI刷题-1-归并排序/MergeSort-1.cpp">Download</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;原理&quot;&gt;&lt;a href=&quot;#原理&quot; class=&quot;headerlink&quot; title=&quot;原理&quot;&gt;&lt;/a&gt;原理&lt;/h1&gt;&lt;p&gt;不做赘述，细看下图：&lt;/p&gt;
&lt;img src=&quot;/2020/09/04/20%E5%B9%B4OI%E5%88%B7%E9%A2%98-1</summary>
      
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Sort" scheme="http://gyrojeff.moe/tags/Sort/"/>
    
    <category term="归并排序" scheme="http://gyrojeff.moe/tags/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/"/>
    
    <category term="排序" scheme="http://gyrojeff.moe/tags/%E6%8E%92%E5%BA%8F/"/>
    
  </entry>
  
  <entry>
    <title>累。</title>
    <link href="http://gyrojeff.moe/2020/09/04/%E7%B4%AF%E3%80%82/"/>
    <id>http://gyrojeff.moe/2020/09/04/%E7%B4%AF%E3%80%82/</id>
    <published>2020-09-03T23:59:09.000Z</published>
    <updated>2020-09-11T11:22:32.000Z</updated>
    
    <content type="html"><![CDATA[<p>当热情散退之后，世界空无一物。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;当热情散退之后，世界空无一物。&lt;/p&gt;
</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
  </entry>
  
  <entry>
    <title>VBA实现日期自动标记以及表格数据更新</title>
    <link href="http://gyrojeff.moe/2020/09/02/VBA%E5%AE%9E%E7%8E%B0%E6%97%A5%E6%9C%9F%E8%87%AA%E5%8A%A8%E6%A0%87%E8%AE%B0%E4%BB%A5%E5%8F%8A%E8%A1%A8%E6%A0%BC%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/"/>
    <id>http://gyrojeff.moe/2020/09/02/VBA%E5%AE%9E%E7%8E%B0%E6%97%A5%E6%9C%9F%E8%87%AA%E5%8A%A8%E6%A0%87%E8%AE%B0%E4%BB%A5%E5%8F%8A%E8%A1%A8%E6%A0%BC%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/</id>
    <published>2020-09-02T01:40:38.000Z</published>
    <updated>2020-09-15T00:00:38.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="需求"><a href="#需求" class="headerlink" title="需求"></a>需求</h1><ul><li>自动标记当前日期所在的列，高亮</li><li>自动更新图标数据源</li></ul><h1 id="实现"><a href="#实现" class="headerlink" title="实现"></a>实现</h1><p>使用ActiveX控件实现</p><figure class="highlight vb"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">&#x27;Get English Name of Column</span></span><br><span class="line"><span class="keyword">Public</span> <span class="keyword">Function</span> Fun_GetEngName(<span class="keyword">ByVal</span> argColumn <span class="keyword">As</span> <span class="built_in">Integer</span>) <span class="keyword">As</span> <span class="built_in">String</span></span><br><span class="line">    <span class="keyword">Dim</span> strEngName <span class="keyword">As</span> <span class="built_in">String</span></span><br><span class="line">    <span class="keyword">Dim</span> iNum, iMod <span class="keyword">As</span> <span class="built_in">Integer</span></span><br><span class="line"></span><br><span class="line">    iNum = argColumn \ <span class="number">26</span></span><br><span class="line">    iMod = argColumn <span class="keyword">Mod</span> <span class="number">26</span></span><br><span class="line">    <span class="keyword">If</span> (iMod = <span class="number">0</span>) <span class="keyword">Then</span></span><br><span class="line">        <span class="keyword">If</span> (iNum = <span class="number">1</span>) <span class="keyword">Then</span></span><br><span class="line">            strEngName = Chr(<span class="number">90</span>)</span><br><span class="line">        <span class="keyword">Else</span></span><br><span class="line">            strEngName = Chr(<span class="number">65</span> + iNum - <span class="number">2</span>) + Chr(<span class="number">90</span>)</span><br><span class="line">        <span class="keyword">End</span> <span class="keyword">If</span></span><br><span class="line">    <span class="keyword">Else</span></span><br><span class="line">        <span class="keyword">If</span> (iNum = <span class="number">0</span>) <span class="keyword">Then</span></span><br><span class="line">            strEngName = Chr(<span class="number">65</span> + iMod - <span class="number">1</span>)</span><br><span class="line">        <span class="keyword">Else</span></span><br><span class="line">            strEngName = Chr(<span class="number">65</span> + iNum - <span class="number">1</span>) + Chr(<span class="number">65</span> + iMod - <span class="number">1</span>)</span><br><span class="line">        <span class="keyword">End</span> <span class="keyword">If</span></span><br><span class="line">    <span class="keyword">End</span> <span class="keyword">If</span></span><br><span class="line">    Fun_GetEngName = strEngName</span><br><span class="line"><span class="keyword">End</span> <span class="keyword">Function</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">Private</span> <span class="keyword">Sub</span> CommandButton1_Click()</span><br><span class="line">    <span class="comment">&#x27;Clear Background Color</span></span><br><span class="line">    Rows(<span class="string">&quot;1:1&quot;</span>).Interior.ColorIndex = <span class="number">2</span></span><br><span class="line">    Rows(<span class="string">&quot;2:2&quot;</span>).Interior.ColorIndex = <span class="number">2</span></span><br><span class="line">    <span class="comment">&#x27;Get Current Date</span></span><br><span class="line">    <span class="keyword">Dim</span> idate <span class="keyword">As</span> <span class="built_in">Date</span></span><br><span class="line">    idate = Format(Now, <span class="string">&quot;yyyy/m/d&quot;</span>)</span><br><span class="line">    MsgBox <span class="string">&quot;Today is &quot;</span> &amp; idate &amp; <span class="string">&quot;, have a nice day!&quot;</span>, , <span class="string">&quot;Auto Dater, by H.Q.&quot;</span></span><br><span class="line">    <span class="comment">&#x27;Set the bgcolor of the cell of current date</span></span><br><span class="line">    Worksheets(<span class="number">1</span>).Cells(<span class="number">171</span>, <span class="number">3</span>).Value = idate</span><br><span class="line">    <span class="keyword">Dim</span> i</span><br><span class="line">    i = Worksheets(<span class="number">1</span>).Cells(<span class="number">171</span>, <span class="number">5</span>).Value</span><br><span class="line">    Worksheets(<span class="number">1</span>).Cells(<span class="number">2</span>, i).Interior.ColorIndex = <span class="number">8</span></span><br><span class="line">    Worksheets(<span class="number">1</span>).Cells(<span class="number">1</span>, i).Interior.ColorIndex = <span class="number">8</span></span><br><span class="line">    <span class="comment">&#x27;Set data source of charts (till yesterday)</span></span><br><span class="line">    <span class="keyword">Dim</span> s <span class="keyword">As</span> <span class="built_in">String</span></span><br><span class="line">    s = Fun_GetEngName(i - <span class="number">1</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;TimingStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$107:$&quot;</span> &amp; s &amp; <span class="string">&quot;$111&quot;</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;SleepingStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$107:$&quot;</span> &amp; s &amp; <span class="string">&quot;$107&quot;</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;EntertainmentStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$110:$&quot;</span> &amp; s &amp; <span class="string">&quot;$110&quot;</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;StudyStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$108:$&quot;</span> &amp; s &amp; <span class="string">&quot;$108&quot;</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;NormalStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$109:$&quot;</span> &amp; s &amp; <span class="string">&quot;$109&quot;</span>)</span><br><span class="line">    ActiveSheet.ChartObjects(<span class="string">&quot;TechStatistics&quot;</span>).Activate</span><br><span class="line">    ActiveChart.SetSourceData Source:=Range(<span class="string">&quot;Main!$A$2:$&quot;</span> &amp; s &amp; <span class="string">&quot;$2,Main!$A$111:$&quot;</span> &amp; s &amp; <span class="string">&quot;$111&quot;</span>)</span><br><span class="line"><span class="keyword">End</span> <span class="keyword">Sub</span></span><br></pre></td></tr></table></figure><h1 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h1><ul><li>图表名称需要命名，具体方法：<a href="https://www.xuexila.com/excel/biaoge/1647271.html">https://www.xuexila.com/excel/biaoge/1647271.html</a></li><li>日期的减法时使用Excel内置函数的<code>-</code>实现的</li></ul><h1 id="效果"><a href="#效果" class="headerlink" title="效果"></a>效果</h1><img src="/2020/09/02/VBA%E5%AE%9E%E7%8E%B0%E6%97%A5%E6%9C%9F%E8%87%AA%E5%8A%A8%E6%A0%87%E8%AE%B0%E4%BB%A5%E5%8F%8A%E8%A1%A8%E6%A0%BC%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/1.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;需求&quot;&gt;&lt;a href=&quot;#需求&quot; class=&quot;headerlink&quot; title=&quot;需求&quot;&gt;&lt;/a&gt;需求&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;自动标记当前日期所在的列，高亮&lt;/li&gt;
&lt;li&gt;自动更新图标数据源&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;实现&quot;&gt;&lt;a hre</summary>
      
    
    
    
    <category term="VBA" scheme="http://gyrojeff.moe/categories/VBA/"/>
    
    
    <category term="VBA" scheme="http://gyrojeff.moe/tags/VBA/"/>
    
    <category term="Excel" scheme="http://gyrojeff.moe/tags/Excel/"/>
    
    <category term="Office" scheme="http://gyrojeff.moe/tags/Office/"/>
    
    <category term="Microsoft" scheme="http://gyrojeff.moe/tags/Microsoft/"/>
    
  </entry>
  
  <entry>
    <title>关于内网穿透</title>
    <link href="http://gyrojeff.moe/2020/08/21/%E5%85%B3%E4%BA%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/"/>
    <id>http://gyrojeff.moe/2020/08/21/%E5%85%B3%E4%BA%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/</id>
    <published>2020-08-21T11:29:43.000Z</published>
    <updated>2020-09-15T00:00:01.000Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>于2020年5月就已实现此功能，特此记录。</p></blockquote><h1 id="设备列表"><a href="#设备列表" class="headerlink" title="设备列表"></a>设备列表</h1><ul><li>中国电信SDN网关</li><li><a href="https://www.mi.com/r3600">小米AIoT路由器 AX3600</a></li></ul><h1 id="基本原理"><a href="#基本原理" class="headerlink" title="基本原理"></a>基本原理</h1><p>由于在广域网上是无法直接访问家里局域网的设备的，所以我们需要将我们局域网当中的设备映射到公网IP（光猫）的某些端口上，一般有两种方式实现：</p><ul><li>DMZ虚拟主机</li><li>端口转发</li></ul><p>由于我们家里到我电脑经过了二级路由，我才用了在二级路由（小米路由器）上进行端口转发，然后直接将路由器的所有端口都映射到光猫上（DMZ虚拟主机）</p><h1 id="配置过程"><a href="#配置过程" class="headerlink" title="配置过程"></a>配置过程</h1><p>在浏览器中输入路由器的IP地址（或者小米路由器可以输入miwifi.com）进入配置页面，输入WiFi密码登陆：</p><img src="/2020/08/21/%E5%85%B3%E4%BA%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/1.jpg" class=""><p>接下来进入高级设置，设置端口转发。参数意义如下：</p><ul><li>名称：随意</li><li>协议：即支持的协议类型，建议TCP/UDP</li><li>外部端口：即映射到路由器上的端口</li><li>内部IP地址：你要做穿透的计算机主机IP地址</li><li>内部端口：计算机服务端口</li></ul><p>配置完毕之后，进入SDN网关的App（网络管家）进行操作，打开DMZ虚拟主机功能，并将IP地址设置为路由器IP地址。</p><h1 id="常见端口"><a href="#常见端口" class="headerlink" title="常见端口"></a>常见端口</h1><ul><li>8888：Jupyter Notebook的端口</li><li>3389：Remote Desktop Protocol</li><li>4000：Hexo</li></ul><h1 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h1><p>尽量不要将外部端口设为一些常用端口，更不能设置成80这样的端口（当心网警找上门）</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;于2020年5月就已实现此功能，特此记录。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;设备列表&quot;&gt;&lt;a href=&quot;#设备列表&quot; class=&quot;headerlink&quot; title=&quot;设备列表&quot;&gt;&lt;/a&gt;设备列表&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;</summary>
      
    
    
    
    <category term="网络" scheme="http://gyrojeff.moe/categories/%E7%BD%91%E7%BB%9C/"/>
    
    
    <category term="网络" scheme="http://gyrojeff.moe/tags/%E7%BD%91%E7%BB%9C/"/>
    
    <category term="IP" scheme="http://gyrojeff.moe/tags/IP/"/>
    
    <category term="公网IP" scheme="http://gyrojeff.moe/tags/%E5%85%AC%E7%BD%91IP/"/>
    
    <category term="中国电信" scheme="http://gyrojeff.moe/tags/%E4%B8%AD%E5%9B%BD%E7%94%B5%E4%BF%A1/"/>
    
  </entry>
  
  <entry>
    <title>对RCF网络的理解</title>
    <link href="http://gyrojeff.moe/2020/08/20/%E5%AF%B9RCF%E7%BD%91%E7%BB%9C%E7%9A%84%E7%90%86%E8%A7%A3/"/>
    <id>http://gyrojeff.moe/2020/08/20/%E5%AF%B9RCF%E7%BD%91%E7%BB%9C%E7%9A%84%E7%90%86%E8%A7%A3/</id>
    <published>2020-08-20T08:15:37.000Z</published>
    <updated>2020-09-22T09:41:39.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="原论文"><a href="#原论文" class="headerlink" title="原论文"></a>原论文</h1><blockquote><p>原论文：<br><a href="https://mmcheng.net/rcfEdge/">https://mmcheng.net/rcfEdge/</a></p></blockquote><h1 id="网络架构"><a href="#网络架构" class="headerlink" title="网络架构"></a>网络架构</h1><p>下图为RCF网络架构：</p><img src="/2020/08/20/%E5%AF%B9RCF%E7%BD%91%E7%BB%9C%E7%9A%84%E7%90%86%E8%A7%A3/rcf.svg" class=""><div align=center>RCF网络架构</div><p>其建立在VGG16之上，根据其修改而来。与原来的VGG16相比：</p><ul><li>RCF网络去除了原来所有的全连接层（最后的三个全连接层）以及最后的池化层。这样做是因为与VGG网络的设计初衷——图像分类问题不同，这个网络旨在边缘检测，VGG最后的全连接层得到的$1 \times 1 \times 4096$的输出是没有意义的，所以将其删去。</li><li>为了进行边缘信息的提取，所以需要对像素值本身进行重新计算，所以在VGG16的每个卷积层后，都添加了一个$1\times 1 - 21$的卷积层，先升维，后通过$1 \times 1 - 1$进行降维。</li><li>其在每一个<em>stage</em>的最后添加了<em>cross-entropy loss / sigmoid</em>层以计算损失，更新参数。</li><li>每一层中有<em>deconv</em>层进行上采样，将图像大小映射回原来的大小，最后在<em>fusion</em>部分将每一个<em>stage</em>的输出叠加，在进行一遍$1\times 1 - 1$的卷积将多通道合并，来达到获取多种混合信息的能力。</li></ul><h1 id="损失函数"><a href="#损失函数" class="headerlink" title="损失函数"></a>损失函数</h1><p>由于数据集通常是由多个标记者 (Annotator) 标记的。虽然每个人的认知不同，但是大家的结果都具有很高的一致性。对于每一张图片，我们将所有人的标记取平均值来生成一个边缘存在的概率图。对于每一个点，$0$代表没有标记者认为这个点是边缘，$1$则代表所有人都认为这个点是边缘。这里定义一个超参数$\eta$：如果一个点是边缘的概率大于$\eta$，则这个点我们认为其是边缘；若这个点的概率是$ 0 $，则其不是边缘；此外，认为那些概率介于$ 0 $和$ \eta $之间的点是属于有争议的点，不计入损失函数。所以，每一个点的损失函数可以记为：</p><script type="math/tex; mode=display">l(X_i; W) = \begin{cases}    \alpha \cdot \log (1 - P(X_i; W)) & \text {if } y_i = 0 \\    0 & \text {if } 0 < y_i \leq \eta \\    \beta \cdot \log P(X_i; W) & \text {otherwise}, \end{cases}</script><p>其中，</p><script type="math/tex; mode=display">    \alpha = \lambda \cdot \frac {|Y^+|} {|Y^+| + |Y^-|}</script><script type="math/tex; mode=display">    \beta = \cdot \frac {|Y^-|} {|Y^+| + |Y^-|}</script><p>$|Y^+|$表示图中一定是边缘的点的个数，$|Y^-|$表示图中<strong>一定不是</strong>边缘的点的个数，$\lambda$则是超参数。在像素$i$的特征向量和是否为边缘的事实表示分别为$X_i$和$y_i$，$P(X)$是一个标准的Sigmoid激活函数，$W$则代表网络中的所有学习参数。所以，整个图片的损失函数可以记为：</p><script type="math/tex; mode=display">    L(W) = \sum _ {i = 1} ^ {|I|} \Big ( \sum _ {k = 1} ^ K l(X_i ^ {(k)}; W) + l(X_i ^ {\text {fuse}}; W)\Big )</script><p>其中，$X_i ^ {(k)}$表示<em>stage k</em>的特征向量，$X_i ^ \text {fuse}$表示<em>stage fusion</em>的特征向量，$|I|$代表像素个数，$|K|$代表阶段数（此处为5）</p><h1 id="Online-Demo"><a href="#Online-Demo" class="headerlink" title="Online Demo"></a>Online Demo</h1><p><a href="https://mc.nankai.edu.cn/edge">https://mc.nankai.edu.cn/edge</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;原论文&quot;&gt;&lt;a href=&quot;#原论文&quot; class=&quot;headerlink&quot; title=&quot;原论文&quot;&gt;&lt;/a&gt;原论文&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;原论文：&lt;br&gt;&lt;a href=&quot;https://mmcheng.net/rcfEdge/&quot;&gt;https:</summary>
      
    
    
    
    <category term="深度学习" scheme="http://gyrojeff.moe/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="ML" scheme="http://gyrojeff.moe/tags/ML/"/>
    
    <category term="DL" scheme="http://gyrojeff.moe/tags/DL/"/>
    
    <category term="AI" scheme="http://gyrojeff.moe/tags/AI/"/>
    
    <category term="RCF" scheme="http://gyrojeff.moe/tags/RCF/"/>
    
  </entry>
  
  <entry>
    <title>对SRAM中Stack的理解</title>
    <link href="http://gyrojeff.moe/2020/08/20/%E5%AF%B9SRAM%E4%B8%ADStack%E7%9A%84%E7%90%86%E8%A7%A3/"/>
    <id>http://gyrojeff.moe/2020/08/20/%E5%AF%B9SRAM%E4%B8%ADStack%E7%9A%84%E7%90%86%E8%A7%A3/</id>
    <published>2020-08-20T07:54:37.000Z</published>
    <updated>2020-09-14T23:59:56.000Z</updated>
    
    <content type="html"><![CDATA[<p>在七月份学习SoC的时候，教授谈到了SRAM中的stack部分。当时上课的时候，教授让我猜这到底是干什么的，我当时说可能是存放临时变量的地方，真没想到是真的。</p><p>下图是M2e芯片对地址的索引：</p><img src="/2020/08/20/%E5%AF%B9SRAM%E4%B8%ADStack%E7%9A%84%E7%90%86%E8%A7%A3/1.jpg" class=""><p>stack其实就是栈，是一种LIFO的数据结构。一开始写汇编的时候可能没什么感觉，但是当汇编写多了，使用到了子程序（submodule）以后就会发现，stack其实是有作用的。先扯一点关系不大的事情。在最开始学习寄存器的时候，我们会发现那张表上面有一个saved registers和temporary register。如果只用汇编的话，我们会发现混起来用一点关系都没有，因为我们其实只是在操作寄存器。然而，当我们在使用C和汇编混编的时候就会发现端倪。temporary寄存器是在函数跳转之后不被保存的寄存器，然而save寄存器则是在函数跳转之后还被保存的寄存器。这里我们谈到的“保存”其实就是和stack有关的操作。如果我们要保存一个32位的数，那我们其实只需要将stack pointer（sp）减去4，然后把值放在sp的位置，要取回的时候再加上四。注意：stack pointer的操作在自己的子程序当中一定要对称，即进来的时候sp是多少，出去的时候sp还是多少。其实这里的stack就是我们手动实现的，stack pointer就是栈顶指针罢了。接下来，我举一个例子：</p><p>C语言中正在执行一个void，叫做a()，a()调用了汇编中的子程序b()，那么在调用b之前，如果运行的时候save寄存器中有东西，那就C编译器编译时就会有若干条指令来吧这些寄存器当中的值压回stack当中，并不会管temporary寄存器当中的值（因为一般来说C的编译器只有在使用临时变量是会使用$t*。接下来，进入b子程序之后，如果b子程序要调用C的一个子程序c()，那么在汇编当中，上述的保存过程就要手动实现了。</p><p>总之，对于MIPS而言，他就是一个load-and-store structure，一切都可以通过操作寄存器、储存，使用ALU运算完成。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在七月份学习SoC的时候，教授谈到了SRAM中的stack部分。当时上课的时候，教授让我猜这到底是干什么的，我当时说可能是存放临时变量的地方，真没想到是真的。&lt;/p&gt;
&lt;p&gt;下图是M2e芯片对地址的索引：&lt;/p&gt;
&lt;img src=&quot;/2020/08/20/%E5%AF%B</summary>
      
    
    
    
    <category term="SoC" scheme="http://gyrojeff.moe/categories/SoC/"/>
    
    
    <category term="SoC" scheme="http://gyrojeff.moe/tags/SoC/"/>
    
    <category term="Assembly" scheme="http://gyrojeff.moe/tags/Assembly/"/>
    
    <category term="SRAM" scheme="http://gyrojeff.moe/tags/SRAM/"/>
    
  </entry>
  
  <entry>
    <title>VGG网络可以支持任意尺寸的理解</title>
    <link href="http://gyrojeff.moe/2020/08/20/VGG%E7%BD%91%E7%BB%9C%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BB%BB%E6%84%8F%E5%B0%BA%E5%AF%B8%E7%9A%84%E7%90%86%E8%A7%A3/"/>
    <id>http://gyrojeff.moe/2020/08/20/VGG%E7%BD%91%E7%BB%9C%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BB%BB%E6%84%8F%E5%B0%BA%E5%AF%B8%E7%9A%84%E7%90%86%E8%A7%A3/</id>
    <published>2020-08-20T07:28:08.000Z</published>
    <updated>2020-09-15T00:00:07.000Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>原论文：</p><p><strong>Very Deep Convolutional Networks for Large-Scale Image Recognition</strong></p><ul><li>arXiv：<a href="https://link.zhihu.com/?target=https%3A//arxiv.org/abs/1409.1556">[1409.1556] Very Deep Convolutional Networks for Large-Scale Image Recognition</a></li><li>intro：ICLR 2015</li><li>homepage：<a href="https://link.zhihu.com/?target=http%3A//www.robots.ox.ac.uk/~vgg/research/very_deep/">Visual Geometry Group Home Page</a></li></ul></blockquote><p>下图为VGG网络的网络结构</p><img src="/2020/08/20/VGG%E7%BD%91%E7%BB%9C%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BB%BB%E6%84%8F%E5%B0%BA%E5%AF%B8%E7%9A%84%E7%90%86%E8%A7%A3/1.png" class=""><img src="/2020/08/20/VGG%E7%BD%91%E7%BB%9C%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BB%BB%E6%84%8F%E5%B0%BA%E5%AF%B8%E7%9A%84%E7%90%86%E8%A7%A3/2.jpg" class=""><p>在这里我就不多赘述为什么要用小卷积核，小卷积核有什么好处，感受野，等等，诸如此类问题。这些东西网上讲解的非常详尽。我这里主要想探讨一下关于VGG可以接受任意大小的图片的原因。</p><p>众所周知，卷积层和池化层不会对长宽有着硬性规定。因为卷积层迭代的其实就是卷积核当中的参数，与输入做卷积运算，不会有什么影响。注意到最后的全连接层。全连接层其实是可以和卷积层互换的，而且他们的参数规模都是一样的。具体原因，可以看下面这篇文章：</p><p><a href="https://blog.csdn.net/jyy555555/article/details/80515562">https://blog.csdn.net/jyy555555/article/details/80515562</a></p><p>引用：</p><blockquote><p>上图是VGG网络最后三层的替换过程，上半部分是训练阶段，此时最后三层都是全连接层（输出分别是4096、4096、1000），下半部分是测试阶段（输出分别是1x1x4096、1x1x4096、1x1x1000），最后三层都是卷积层。下面我们来看一下详细的转换过程（以下过程都没有考虑bias，略了）：</p><p>先看训练阶段，有4096个输出的全连接层FC6的输入是一个7x7x512的feature map，因为全连接层的缘故，不需要考虑局部性， 可以把7x7x512看成一个整体，25508（=7x7x512）个输入的每个元素都会与输出的每个元素（或者说是神经元）产生连接，所以每个输入都会有4096个系数对应4096个输出，所以网络的参数（也就是两层之间连线的个数，也就是每个输入元素的系数个数）规模就是7x7x512x4096。对于FC7，输入是4096个，输出是4096个，因为每个输入都会和输出相连，即每个输出都有4096条连线（系数），那么4096个输入总共有4096x4096条连线（系数），最后一个FC8计算方式一样，略。</p><p>再看测试阶段，由于换成了卷积，第一个卷积后要得到4096（或者说是1x1x4096）的输出，那么就要对输入的7x7x512的feature map的宽高（即width、height维度）进行降维，同时对深度（即Channel/depth维度）进行升维。要把7x7降维到1x1，那么干脆直接一点，就用7x7的卷积核就行，另外深度层级的升维，因为7x7的卷积把宽高降到1x1，那么刚好就升高到4096就好了，最后得到了1x1x4096的feature map。这其中卷积的参数量上，把7x7x512看做一组卷积参数，因为该层的输出是4096，那么相当于要有4096组这样7x7x512的卷积参数，那么总共的卷积参数量就是：</p><p>[7x7x512]x4096，这里将7x7x512用中括号括起来，目的是把这看成是一组，就不会懵。</p><p>第二个卷积依旧得到1x1x4096的输出，因为输入也是1x1x4096，三个维度（宽、高、深）都没变化，可以很快计算出这层的卷积的卷积核大小也是1x1，而且，通道数也是4096，因为对于输入来说，1x1x4096是一组卷积参数，即一个完整的filter，那么考虑所有4096个输出的情况下，卷积参数的规模就是[1x1x4096]x4096。第三个卷积的计算一样，略。</p><p>其实VGG的作者把训练阶段的全连接替换为卷积是参考了OverFeat的工作，如下图是OverFeat将全连接换成卷积后，带来可以处理任意分辨率（在整张图）上计算卷积，而无需对原图resize的优势。</p></blockquote><img src="/2020/08/20/VGG%E7%BD%91%E7%BB%9C%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8C%81%E4%BB%BB%E6%84%8F%E5%B0%BA%E5%AF%B8%E7%9A%84%E7%90%86%E8%A7%A3/3.jpeg" class=""><p>Digression：前段时间看了RCF网络，他之所以可以输出和输入同样尺寸的图片，就是因为其只有卷积层和池化层，去除了所有全连接层。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;原论文：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Very Deep Convolutional Networks for Large-Scale Image Recognition&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;arXiv：&lt;a href=&quot;</summary>
      
    
    
    
    <category term="深度学习" scheme="http://gyrojeff.moe/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="VGG" scheme="http://gyrojeff.moe/tags/VGG/"/>
    
    <category term="CNN" scheme="http://gyrojeff.moe/tags/CNN/"/>
    
    <category term="ML" scheme="http://gyrojeff.moe/tags/ML/"/>
    
    <category term="DL" scheme="http://gyrojeff.moe/tags/DL/"/>
    
    <category term="AI" scheme="http://gyrojeff.moe/tags/AI/"/>
    
    <category term="机器学习" scheme="http://gyrojeff.moe/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="深度学习" scheme="http://gyrojeff.moe/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    
  </entry>
  
  <entry>
    <title>GAN 基本原理以及数学证明</title>
    <link href="http://gyrojeff.moe/2020/08/14/GAN-%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E6%95%B0%E5%AD%A6%E8%AF%81%E6%98%8E/"/>
    <id>http://gyrojeff.moe/2020/08/14/GAN-%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E6%95%B0%E5%AD%A6%E8%AF%81%E6%98%8E/</id>
    <published>2020-08-14T11:40:17.000Z</published>
    <updated>2020-09-22T13:03:40.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Preface"><a href="#Preface" class="headerlink" title="Preface"></a>Preface</h1><p>今天在PD Lib和DL斗智斗勇时，突然想起了自己非常想学的GAN，机缘巧合下便百度了，得到了以下两篇文章：</p><ul><li><a href="https://zhuanlan.zhihu.com/p/72279816">https://zhuanlan.zhihu.com/p/72279816</a></li><li><a href="https://blog.csdn.net/jizhidexiaoming/article/details/96485095">https://blog.csdn.net/jizhidexiaoming/article/details/96485095</a></li></ul><p>于是便对GAN有了初步的了解（以前肯定是心不在焉才没有理解的（划掉）），随后又在五楼<code>生命科学</code>的书架上找到了相关资料，遂学了一波。</p><h1 id="GAN概述"><a href="#GAN概述" class="headerlink" title="GAN概述"></a>GAN概述</h1><blockquote><p>2014 年，Ian Goodfellow 和他在蒙特利尔大学的同事发表了一篇震撼学界的论文。没错，我说的就是《Generative Adversarial Nets》，这标志着生成对抗网络（GAN）的诞生，而这是通过对计算图和博弈论的创新性结合。他们的研究展示，给定充分的建模能力，两个博弈模型能够通过简单的反向传播（backpropagation）来协同训练。</p><p>这两个模型的角色定位十分鲜明。给定真实数据集 R，G 是生成器（generator），它的任务是生成能以假乱真的假数据；而 D 是判别器 （discriminator），它从真实数据集或者 G 那里获取数据， 然后做出判别真假的标记。Ian Goodfellow 的比喻是，G 就像一个赝品作坊，想要让做出来的东西尽可能接近真品，蒙混过关。而 D 就是文物鉴定专家，要能区分出真品和高仿（但在这个例子中，造假者 G 看不到原始数据，而只有 D 的鉴定结果——前者是在盲干）。</p><p>理想情况下，D 和 G 都会随着不断训练，做得越来越好——直到 G 基本上成为了一个“赝品制造大师”，而 D 因无法正确区分两种数据分布输给 G。</p><p>实践中，Ian Goodfellow 展示的这项技术在本质上是：G 能够对原始数据集进行一种无监督学习，找到以更低维度的方式（lower-dimensional manner）来表示数据的某种方法。而无监督学习之所以重要，就好像 Yann LeCun 的那句话：“无监督学习是蛋糕的糕体”。这句话中的蛋糕，指的是无数学者、开发者苦苦追寻的“真正的 AI”。<br>——<a href="https://blog.csdn.net/jizhidexiaoming/article/details/96485095">pytorch实现GAN</a></p></blockquote><p>GAN - Generative Adversarial Nets, 生成对抗网络，简单来讲其有两个组成部分：</p><ul><li>D (Discriminator) - 判别器，判断输入时捏造的还是真实的</li><li>G (Generator) - 生成器，从随机噪声中生成我们想要的数据</li></ul><p>随着训练的进行，我们要提高D的辨析能力，但同时也要G的能力来骗过D，因为我们的最终目的是要让G来生成可以骗过D的信息。总结来说，通过对这两个模型的训练，我们就可以找到随机噪声与有意义数据的映射，达到<code>创作</code>的目的。</p><h1 id="GAN的流程和目标函数"><a href="#GAN的流程和目标函数" class="headerlink" title="GAN的流程和目标函数"></a>GAN的流程和目标函数</h1><h2 id="GAN的目标函数"><a href="#GAN的目标函数" class="headerlink" title="GAN的目标函数"></a>GAN的目标函数</h2><p>GAN的目标函数如下：</p><script type="math/tex; mode=display">    V(D, G) = \mathbb E_{x \sim P_{\text{data}} } [\log D(x)] + \mathbb E_{\boldsymbol {z} \sim P_z}[\log(1 - D(G(\boldsymbol {z})))]</script><p>其中，$D$为<code>Discriminator</code>的模型函数，$G$为<code>Generator</code>的模型函数，随机变量$x$服从原来正确的数据集的分布$P_\text {data}$，随机变量（这里可能是高维随机变量，取决于模型具体实现）$\boldsymbol {z}$服从分布$P_z$（生成噪音），$\mathbb E$代表期望。</p><h2 id="GAN的流程"><a href="#GAN的流程" class="headerlink" title="GAN的流程"></a>GAN的流程</h2><script type="math/tex; mode=display">    G^* = \arg \min _G \max _D V(D, G)</script><p>即，可以分为两步理解：</p><ol><li>在$G$为常数的情况下，选择合适的$D$使得$V(D,G)$能够最大化。</li><li>在这之后，选取合适的$G$来最小化$V(D, G)$，这个$G$就是我们想要的生成模型。</li></ol><p>在每一步的训练中：</p><ul><li>取$m$个真实数据：<script type="math/tex; mode=display">  \{x^{(1)}, x^{(2)}, x^{(3)}, \cdots, x^{(m)}\}</script>使用$G$和$m$组随机数（服从于噪音分布$P_G$，一般使用服从正态分布的随机数）<script type="math/tex; mode=display">  \{\boldsymbol {z}^{(1)}, \boldsymbol {z}^{(2)}, \boldsymbol {z}^{(3)}, \cdots, \boldsymbol {z}^{(m)}\}</script>生成$m$个假数据，其中<script type="math/tex; mode=display">  \forall i \in [1, m], i \in \mathbb Z \Rightarrow x^{(i)} \sim P_{\text{data}}, \boldsymbol {z} ^ {(i)} \sim P_z</script></li><li>根据$\max$部分的目标使用随机梯度上升（Stochastic Gradient Ascent）更新$D$的参数，提高$D$的分辨能力<script type="math/tex; mode=display">  \theta_d := \theta_d + \alpha_d \nabla_{\theta_d} \frac 1 m \sum _ {i = 1} ^ m \Big [ \log D\big ( x^{(i)} \big) + \log \big ( 1 - D \big ( G(\boldsymbol{z}^{(i)}) \big ) \big ) \Big]</script></li><li>根据$\min$部分的目标使用随机梯度下降（Stochastic Gradient Descent）更新$G$的参数，使$G$生成的数据更有迷惑性<script type="math/tex; mode=display">  \theta_g := \theta_g - \alpha_g\nabla_{\theta_g} \frac 1 m \sum _{i = 1} ^ m\log \Big ( 1 - D\big ( G(\boldsymbol{z} ^ {(i)})\big ) \Big )</script></li></ul><h1 id="GAN的数学原理"><a href="#GAN的数学原理" class="headerlink" title="GAN的数学原理"></a>GAN的数学原理</h1><h2 id="Prerequisites"><a href="#Prerequisites" class="headerlink" title="Prerequisites"></a>Prerequisites</h2><h3 id="信息量-自信息"><a href="#信息量-自信息" class="headerlink" title="信息量(自信息)"></a>信息量(自信息)</h3><p>信息量是指信息多少的量度，即，对于一条信息，传达这条信息所需的最少信息长度为自信息。</p><p>信息论创始人C.E.Shannon，1938年首次使用比特（bit）概念：1（bit）= $\log_2 2$。它相当于对二个可能结局所作的一次选择量。信息论采用对随机分布概率取对数的办法，解决了不定度的度量问题。</p><p>定义：符合分布$P$的某一事件$x$出现，传达出这条信息的信息量记为：</p><script type="math/tex; mode=display">    I = \log \frac 1 {P(x)} = - \log P(x)</script><h3 id="香农熵"><a href="#香农熵" class="headerlink" title="香农熵"></a>香农熵</h3><p>从离散分布$P$中随机抽选一个事件，传达这条信息所需的最优平均信息长度为香农熵，表达为：</p><script type="math/tex; mode=display">    H(P) = \sum_x P(x) \log \frac 1 {P(x)} = - \sum_x P(x) \log P(x)</script><p>若分布是连续的，则：</p><script type="math/tex; mode=display">    H(P) = \int_x P(x) \log \frac 1 {P(x)} \mathrm dx = -\int_x P(x) \log P(x) \mathrm dx</script><h3 id="交叉熵"><a href="#交叉熵" class="headerlink" title="交叉熵"></a>交叉熵</h3><p>用分布$P$的最佳信息传递方式来传达分布$Q$中随机抽选的一个事件，所需的平均信息长度为交叉熵，表达为</p><script type="math/tex; mode=display">    H_P(Q) = \sum_x Q(x) \log \frac 1 {P(x)} = - \sum_x Q(x) \log P(x)</script><script type="math/tex; mode=display">    H_P(Q) = \int_x Q(x) \log \frac 1 {P(x)} \mathrm dx = - \int_x Q(x) \log P(x) \mathrm dx</script><h3 id="KL-Divergence"><a href="#KL-Divergence" class="headerlink" title="$KL$ Divergence"></a>$KL$ Divergence</h3><p>$KL$散度：用分布$P$的最佳信息传递方式来传达分布$Q$，比用分布$Q$自己的最佳信息传递方式来传达分布$Q$，平均多耗费的信息长度为$KL$散度，表达为$D_P(Q)$或$D_{KL}(Q||P)$，$KL$散度衡量了两个分布之间的差异。</p><script type="math/tex; mode=display">    \begin{aligned}        D_{KL}(Q||P) = D_P(Q) &= H_P(Q) - H(Q) \\        &= \sum_x Q(x) \log \frac 1 {P(x)} - \sum _x Q(x) \log \frac 1 {Q(x)} \\        &= \sum_x Q(x) \log \frac {Q(x)} {P(x)}    \end{aligned}</script><p>对于连续分布：</p><script type="math/tex; mode=display">    D_{KL}(Q||P) = D_P(Q) = \int_{-\infty} ^ {\infty} P(x)\log \frac {P(x)}{Q(x)} \mathrm dx</script><p>KL Divergence越大，两个分布差异越大，反之差异越小。</p><h2 id="数学原理"><a href="#数学原理" class="headerlink" title="数学原理"></a>数学原理</h2><p>看完Prerequisites，我们回归正题讨论GAN的原理。我们现在想要做的事情，其实就是将一个服从$P_G$的随机噪声$\boldsymbol z$通过一个生成网络$G$得到一个和真实数据分布$P_{\text {data}}(x)$差不多的生成分布$P_G(x;\theta_g)$，其中$\theta_g$为生成网络$G$的参数。我们希望找到一个$\theta_g$使得两个分布$P_{\text {data}}(x)$与$P_G(x;\theta)$尽可能地相似（使得他们地KL散度尽可能得小）。</p><p>我们从真实数据分布$P_\text{data}(x)$中取$m$个样本，记作：</p><script type="math/tex; mode=display">    \{x^{(1)}, x^{(2)}, x^{(3)}, \cdots, x^{(m)}\}</script><p>根据生成网络的参数$\theta_g$，我们可以计算出这$m$个真实样本在生成网络中出现的概率$P_G(x^{(i)}; \theta_g)$，那么生成这样的$m$个样本数据的似然（likelihood）为：</p><script type="math/tex; mode=display">    L = \prod_{i = 1} ^ m P_G(x^{(i)}; \theta_g)</script><p>由于我们想要两个分布尽量相似，那么我们肯定希望这个似然$L$尽量大，即生成这样的真实数据的概率尽量大，遂我们最大化这个似然，找到$\theta_g^*$：</p><script type="math/tex; mode=display">    \begin{aligned}        \theta_g^* &= \arg \max _ {\theta_g} \prod _ {i = 1} ^ m P_G(x^{(i)}; \theta_g) \\        &\Leftrightarrow \arg \max _ {\theta_g} \log \prod _ {i = 1} ^ m P_G(x^{(i)}; \theta_g) \\        &= \arg \max _ {\theta_g} \sum_{i = 1} ^ m \log P_G(x^{(i)}; \theta_g) \\        &\approx \arg \max _ {\theta_g} \mathbb E_{x \sim P_{\text {data}}} [\log P_G(x; \theta_g)] \\        &= \arg \max _ {\theta_g} \int _ x P_\text{data}(x) \log P_G(x; \theta_g)\mathrm dx \\        &= \arg \max _ {\theta_g} \int _ x P_\text{data}(x) \log P_G(x; \theta_g)\mathrm dx \\&~~~~- \int _ x P_\text{data}(x) \log P_\text {data}(x)\mathrm dx \\        &= \arg \max _ {\theta_g} \int _ x P_\text {data} (x) \log \frac {P_G(x; \theta_g)} {P_\text {data}(x)} \mathrm dx \\         &= \arg \max _ {\theta_g} - \int _ x P_\text {data} (x) \log \frac {P_\text {data}(x)} {P_G(x; \theta_g)} \mathrm dx \\        &= \arg \min _ {\theta_g} KL(P_\text {data} || P_G(x; \theta))    \end{aligned}</script><p>所以可见，其实最大化这个似然，和最小化KL散度是基本相同的。</p><p>上述式子中，$P_G(x;\theta_g)$代表在生成分布中出现$x$的概率，也可以如下计算得到：</p><script type="math/tex; mode=display">    P_G(x) = \int _ \boldsymbol{z} P_z(z)\cdot 1\{G(z) = x\} \mathrm dz</script><p>注：$1{\cdot}$的含义是若打括号内的逻辑运算为真则取$1$，假则取$0$. 即</p><script type="math/tex; mode=display">1\{\text {True}\} = 1, 1 \{\text {False}\} = 0</script><p>但是我们发现，上述的过程是难以进行计算的，甚至完全没办法求$P_G(x)$，这只是模型的想法而已。</p><p>现在我们看回之前我们提到的目标函数：</p><script type="math/tex; mode=display">    V(D, G) = \mathbb E_{x \sim P_{\text{data}} } [\log D(x)] + \mathbb E_{\boldsymbol {z} \sim P_z}[\log(1 - D(G(\boldsymbol {z})))]</script><p>与最优化生成模型：</p><script type="math/tex; mode=display">    G^* = \arg \min _G \max _D V(D, G)</script><p>我们接下来分步解释。</p><p>首先，我们不妨解释一下$\max_D V(G, D)$，这部分的含义之前也解释过，是在给定$G$的情况下，最大化$V(G, D)$。观察发现，其形式其实与交叉熵损失函数非常相似：</p><script type="math/tex; mode=display">    \mathcal L(\hat y, y) = -(y\log \hat y + (1 - y) \log (1 - \hat y))</script><p>其实他们表达的目的也差不多。我们先化简一下$V(G, D)$看看能得到什么结果：</p><script type="math/tex; mode=display">    \begin{aligned}            V(G, D) &= \mathbb E_{x \sim P_{\text{data}} } [\log D(x)] + \mathbb E_{\boldsymbol {z} \sim P_z}[\log(1 - D(G(\boldsymbol {z})))] \\            &= \int_x P_\text {data}(x) \log D(x) \mathrm dx + \int_\boldsymbol{z} P_z(\boldsymbol{z}) \log (1 - D(G(\boldsymbol{z})))\mathrm dz \\            &= \int_x P_\text {data}(x) \log D(x) \mathrm dx + \int_x P_G(x)\log (1 - D(x)) \mathrm dx \\            &= \int_x [P_\text {data}(x) \log D(x) + P_G(x)\log (1 - D(x))] \mathrm dx    \end{aligned}</script><p>让我们考察积分内部的项，我们可以对它做指数运算，即：</p><script type="math/tex; mode=display">    e^{P_\text {data}(x) \log D(x) + P_G(x)\log (1 - D(x))} = D(x) ^ {P_\text {data}}\times(1- D(x))^{P_G(x)}</script><p>其想表达什么便不言而喻了，它表达的就是判别器判别是真的的正确率和判别是假的的正确率，总体来说就是衡量$D$的能力，所以我们想要最大化$V$，提高$D$的判别能力。</p><p>令</p><script type="math/tex; mode=display">    f(D) = P_\text {data}(x) \log D(x) \mathrm dx + P_G(x)\log (1 - D(x))</script><p>因为这里$P_\text {data} (x)$和$P_G(x)$都可以看作常数，所以</p><script type="math/tex; mode=display">    \arg \max _ D \int_x f(D) \mathrm dx = \arg \max _D f(D)</script><p>最大化$f(D)$，即令其导数为$0$：</p><script type="math/tex; mode=display">    \frac {\mathrm d f(D)} {\mathrm dD } = \frac {P_\text {data}(x)}{D} - \frac {P_G(x)} {1 - D} = 0</script><p>则：</p><script type="math/tex; mode=display">    \frac {P_\text {data}(x)}{D} = \frac {P_G(x)} {1 - D}</script><script type="math/tex; mode=display">    D^*(x) = \frac {P_\text {data}(x)}{P_\text {data}(x) + P_G(x)}</script><p>这样，我们就得到了那个状态下最优的$D^*$的表达式。我们将这个能够最大化$V$的$D$代入回$V(G, D)$：</p><script type="math/tex; mode=display">    \begin{aligned}        \max V(G, D) &= V(G, D^*) \\        &= \mathbb E_{x \sim P_\text {data}} \Big [ \log \frac {P_\text {data}(x)}{P_\text {data}(x) + P_G(x)} \Big] + \mathbb E_{x \sim P_G} \Big [ \frac {P_G(x)}{P_\text {data}(x) + P_G(x)}\Big ] \\        &= \int_x P_\text {data} (x) \log \frac {\frac 1 2 P_\text {data}}{\frac 1 2 (P_\text{data}(x) + P_G(x))} \mathrm dx + \int _ x P_G(x) \log \frac {\frac 1 2 P_G(x)} {\frac 1 2 (P_\text {data} (x) + P_G(x))} \mathrm dx \\        &= -2\log 2 + D_{KL} (P_\text {data} || \frac 1 2 [P_\text{data}(x) + P_G(x)]) + D_{KL} (P_G(x) || \frac 1 2 [P_\text {data}(x) + P_G(x)]) \\        &= -2\log 2 + JSD (P_\text{data}(x) || P_G(x))    \end{aligned}</script><p>其中，我们引入了$JS$ Divergence，定义如下：</p><script type="math/tex; mode=display">    JSD(P||Q) = \frac 1 2 D_{KL} (P||M) + \frac 1 2 D_{KL} (Q || M), M = \frac 1 2 (P + Q)</script><p>容易得到，KL Divergence是不对称的，而JS Divergence是对称的。他们都可以衡量两组分布建的差异。这里我们想要两组分布差异最小，故取$\min$</p><p>所以，这也就解释了为什么：</p><script type="math/tex; mode=display">\arg \min _G \max _D V(G, D)</script><p>是我们的目标过程。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Preface&quot;&gt;&lt;a href=&quot;#Preface&quot; class=&quot;headerlink&quot; title=&quot;Preface&quot;&gt;&lt;/a&gt;Preface&lt;/h1&gt;&lt;p&gt;今天在PD Lib和DL斗智斗勇时，突然想起了自己非常想学的GAN，机缘巧合下便百度了，得到了以下两</summary>
      
    
    
    
    <category term="深度学习" scheme="http://gyrojeff.moe/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="ML" scheme="http://gyrojeff.moe/tags/ML/"/>
    
    <category term="DL" scheme="http://gyrojeff.moe/tags/DL/"/>
    
    <category term="机器学习" scheme="http://gyrojeff.moe/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="深度学习" scheme="http://gyrojeff.moe/tags/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="GAN" scheme="http://gyrojeff.moe/tags/GAN/"/>
    
    <category term="NN" scheme="http://gyrojeff.moe/tags/NN/"/>
    
  </entry>
  
  <entry>
    <title>面包人哥哥的数论题（雾）</title>
    <link href="http://gyrojeff.moe/2020/08/05/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%93%A5%E5%93%A5%E7%9A%84%E6%95%B0%E8%AE%BA%E9%A2%98%EF%BC%88%E9%9B%BE%EF%BC%89/"/>
    <id>http://gyrojeff.moe/2020/08/05/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%93%A5%E5%93%A5%E7%9A%84%E6%95%B0%E8%AE%BA%E9%A2%98%EF%BC%88%E9%9B%BE%EF%BC%89/</id>
    <published>2020-08-05T08:14:31.000Z</published>
    <updated>2020-09-10T11:17:53.000Z</updated>
    
    <content type="html"><![CDATA[<p>鄙人正在学校摸鱼，面包人就发来了一道魔鬼题（雾），知识背景：</p><img src="/2020/08/05/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%93%A5%E5%93%A5%E7%9A%84%E6%95%B0%E8%AE%BA%E9%A2%98%EF%BC%88%E9%9B%BE%EF%BC%89/1.png" class=""><img src="/2020/08/05/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%93%A5%E5%93%A5%E7%9A%84%E6%95%B0%E8%AE%BA%E9%A2%98%EF%BC%88%E9%9B%BE%EF%BC%89/2.png" class=""><h1 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h1><p>求证：$\forall n \in E, 0_\mathbb K.n = 0_E$</p><p>我的证法：</p><p>$\forall x \in \mathbb K, \exists !y \in \mathbb K$, $x + y = y + x = 0_\mathbb K, y = -x$.</p><p>Thus $x + (-x) = 0 _ \mathbb K$</p><p>From which, $0_\mathbb K . n = (x + (-x)).n = n.x + (-x).n = n.x - n.x$</p><p>Since $n \in E, x \in \mathbb K$, we may have $n.x \in E$, thus according to the definition, $0_\mathbb K.n = n.x - n.x = 0_E$</p><p>但是非常不幸，这个证法是假的。注意到$n.x + (-x).n$，没有定义可以让负号提出。</p><h1 id="正解"><a href="#正解" class="headerlink" title="正解"></a>正解</h1><p>对于某个$x \in E$, 有</p><script type="math/tex; mode=display">0_\mathbb K .x = (0_\mathbb K + 0_\mathbb K).x = 0_\mathbb K.x + 0_\mathbb K.x \tag 1</script><p>所以</p><script type="math/tex; mode=display">0_\mathbb K.x = 0_\mathbb K.x + 0_\mathbb K.x \tag 2</script><p>构造一个式子</p><script type="math/tex; mode=display">0_\mathbb K.x - 0_\mathbb K.x = 0_\mathbb K.x - 0_\mathbb K.x \tag 3</script><p>将上一步中得到的</p><script type="math/tex; mode=display">0_\mathbb K.x = 0_\mathbb K.x + 0_\mathbb K.x</script><p>代入$(3)$得到</p><script type="math/tex; mode=display">0_\mathbb K.x - 0_\mathbb K.x = (0_\mathbb K.x + 0_\mathbb K.x) - 0_\mathbb K.x \tag 4</script><p>因为$x \in E, 0_\mathbb K \in \mathbb K$，所以$0_\mathbb K.x \in E$，所以根据$0_E$的定义有</p><script type="math/tex; mode=display">0_\mathbb K.x - 0_\mathbb K.x = 0_E</script><p>代入$(4)$，有</p><script type="math/tex; mode=display">0_E = 0_\mathbb K .x + 0_E</script><p>所以$0_\mathbb K.x = 0_E$，得证.</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;鄙人正在学校摸鱼，面包人就发来了一道魔鬼题（雾），知识背景：&lt;/p&gt;
&lt;img src=&quot;/2020/08/05/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%93%A5%E5%93%A5%E7%9A%84%E6%95%B0%E8%AE%BA%E9%A2%9</summary>
      
    
    
    
    <category term="Math" scheme="http://gyrojeff.moe/categories/Math/"/>
    
    
    <category term="Math" scheme="http://gyrojeff.moe/tags/Math/"/>
    
    <category term="数论" scheme="http://gyrojeff.moe/tags/%E6%95%B0%E8%AE%BA/"/>
    
  </entry>
  
  <entry>
    <title>七月末的感想</title>
    <link href="http://gyrojeff.moe/2020/07/31/%E4%B8%83%E6%9C%88%E6%9C%AB%E7%9A%84%E6%84%9F%E6%83%B3/"/>
    <id>http://gyrojeff.moe/2020/07/31/%E4%B8%83%E6%9C%88%E6%9C%AB%E7%9A%84%E6%84%9F%E6%83%B3/</id>
    <published>2020-07-31T14:05:34.000Z</published>
    <updated>2020-07-31T14:12:58.000Z</updated>
    
    <content type="html"><![CDATA[<p>暑假开始前，我想了无数想做的事。七月已尽，暑假过半，方才想到自己的无能与无力。摸鱼和osu成为生活的常态，在烈日的洗礼下，人奇怪得变得好动了起来。不再想被关在家里，出去骑车兜风从未感到如此快乐。</p><p>说起这个月，也并非一无所获。装了台式（谢谢杰爹，谢谢杰娘www），学了SoC，和汇编和C语言斗志斗勇，在网课中发奋图强，osu打上了500pp，摸鱼日益见长。</p><p>翻新了博客背景，从这个月开始，好好学习，天天向上（确信）。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;暑假开始前，我想了无数想做的事。七月已尽，暑假过半，方才想到自己的无能与无力。摸鱼和osu成为生活的常态，在烈日的洗礼下，人奇怪得变得好动了起来。不再想被关在家里，出去骑车兜风从未感到如此快乐。&lt;/p&gt;
&lt;p&gt;说起这个月，也并非一无所获。装了台式（谢谢杰爹，谢谢杰娘www）</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="总结" scheme="http://gyrojeff.moe/tags/%E6%80%BB%E7%BB%93/"/>
    
    <category term="思考" scheme="http://gyrojeff.moe/tags/%E6%80%9D%E8%80%83/"/>
    
    <category term="展望" scheme="http://gyrojeff.moe/tags/%E5%B1%95%E6%9C%9B/"/>
    
  </entry>
  
  <entry>
    <title>今日份的突发奇想</title>
    <link href="http://gyrojeff.moe/2020/07/20/%E4%BB%8A%E6%97%A5%E4%BB%BD%E7%9A%84%E7%AA%81%E5%8F%91%E5%A5%87%E6%83%B3/"/>
    <id>http://gyrojeff.moe/2020/07/20/%E4%BB%8A%E6%97%A5%E4%BB%BD%E7%9A%84%E7%AA%81%E5%8F%91%E5%A5%87%E6%83%B3/</id>
    <published>2020-07-20T06:55:03.000Z</published>
    <updated>2020-07-31T14:06:49.000Z</updated>
    
    <content type="html"><![CDATA[<p>众所周知，3D渲染2D的画风大家一直不敢恭维，那…是不是能够通过训练一个NN来做不同画风的切换呢（？也许GAN可？（开始想peach</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;众所周知，3D渲染2D的画风大家一直不敢恭维，那…是不是能够通过训练一个NN来做不同画风的切换呢（？也许GAN可？（开始想peach&lt;/p&gt;
</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="设想" scheme="http://gyrojeff.moe/tags/%E8%AE%BE%E6%83%B3/"/>
    
  </entry>
  
  <entry>
    <title>对开源社区的一些小小的感慨</title>
    <link href="http://gyrojeff.moe/2020/07/11/%E5%AF%B9%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E5%B0%8F%E7%9A%84%E6%84%9F%E6%85%A8/"/>
    <id>http://gyrojeff.moe/2020/07/11/%E5%AF%B9%E5%BC%80%E6%BA%90%E7%A4%BE%E5%8C%BA%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E5%B0%8F%E7%9A%84%E6%84%9F%E6%85%A8/</id>
    <published>2020-07-11T05:47:31.000Z</published>
    <updated>2020-07-31T14:06:41.000Z</updated>
    
    <content type="html"><![CDATA[<p>早上jdh给我推了一个白上吹雪的别人运营的网站，瞬间燃起了兴趣，提交了一个PR。事情做完之后，无聊地逛了会GitHub，发现我那个烂尾的VSCode-Hexo-Next项目尽然有两个Fork（？（异常激动）</p><p>记于2020/07/11 下午</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;早上jdh给我推了一个白上吹雪的别人运营的网站，瞬间燃起了兴趣，提交了一个PR。事情做完之后，无聊地逛了会GitHub，发现我那个烂尾的VSCode-Hexo-Next项目尽然有两个Fork（？（异常激动）&lt;/p&gt;
&lt;p&gt;记于2020/07/11 下午&lt;/p&gt;
</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="GitHub" scheme="http://gyrojeff.moe/tags/GitHub/"/>
    
  </entry>
  
  <entry>
    <title>暑假展望</title>
    <link href="http://gyrojeff.moe/2020/07/07/%E6%9A%91%E5%81%87%E5%B1%95%E6%9C%9B/"/>
    <id>http://gyrojeff.moe/2020/07/07/%E6%9A%91%E5%81%87%E5%B1%95%E6%9C%9B/</id>
    <published>2020-07-07T14:03:29.000Z</published>
    <updated>2020-07-31T14:06:26.000Z</updated>
    
    <content type="html"><![CDATA[<p>又到了生日了呢。前面膜了一下大佬的博客，再翻了翻自己的博客，突然不想看下去了。有了一种，不拘泥于过去，不拘泥于自己会什么，开始思考了自己想学什么，想要成为什么样的一个人，想要怎么继续努力。</p><p>等明天散热起来了，台式整完之后，我要学，做，写，练。</p><p>学，都可以学。</p><p>与16岁生日夜。共勉。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;又到了生日了呢。前面膜了一下大佬的博客，再翻了翻自己的博客，突然不想看下去了。有了一种，不拘泥于过去，不拘泥于自己会什么，开始思考了自己想学什么，想要成为什么样的一个人，想要怎么继续努力。&lt;/p&gt;
&lt;p&gt;等明天散热起来了，台式整完之后，我要学，做，写，练。&lt;/p&gt;
&lt;p&gt;学</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="小结" scheme="http://gyrojeff.moe/tags/%E5%B0%8F%E7%BB%93/"/>
    
    <category term="学习" scheme="http://gyrojeff.moe/tags/%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="目标" scheme="http://gyrojeff.moe/tags/%E7%9B%AE%E6%A0%87/"/>
    
  </entry>
  
  <entry>
    <title>高一下的小结</title>
    <link href="http://gyrojeff.moe/2020/07/04/%E9%AB%98%E4%B8%80%E4%B8%8B%E7%9A%84%E5%B0%8F%E7%BB%93/"/>
    <id>http://gyrojeff.moe/2020/07/04/%E9%AB%98%E4%B8%80%E4%B8%8B%E7%9A%84%E5%B0%8F%E7%BB%93/</id>
    <published>2020-07-04T03:41:43.000Z</published>
    <updated>2020-07-04T03:46:38.000Z</updated>
    
    <content type="html"><![CDATA[<p>高一下已经过去了啊，原来我也要高二了。仔细回想着这个学期，发现其实自己还是做了很多事情的。因为疫情的原因，这个大寒假，学了无数新的东西，写了以前从未写过的数量的代码，对网络有了一个全新的认识，支离破碎的知识逐渐构成网络，彼此串联通达，给我带来了一个新的世界，为我打开了新世界的大门。</p><p>也是因为疫情，前半段学期学习效率也是确确实实地提高了，每天待在家里，有着Timetable的逼迫和记录，督促自己好好学习。补了无数部番，学了很多东西，写了很多代码，咕咕咕了很多项目，应该还算充实吧。</p><p>期末之前，女娲补天。少年不知头发贵，ddl前空落泪。不过话说回来，我真的没想到，真的真的没想到，我竟然学完了。下个学期，争取少睡睡觉，上课多听听，保护好自己的头发。</p><p>与2020年7月4日上午，共勉。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;高一下已经过去了啊，原来我也要高二了。仔细回想着这个学期，发现其实自己还是做了很多事情的。因为疫情的原因，这个大寒假，学了无数新的东西，写了以前从未写过的数量的代码，对网络有了一个全新的认识，支离破碎的知识逐渐构成网络，彼此串联通达，给我带来了一个新的世界，为我打开了新世界</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="小结" scheme="http://gyrojeff.moe/tags/%E5%B0%8F%E7%BB%93/"/>
    
    <category term="学习" scheme="http://gyrojeff.moe/tags/%E5%AD%A6%E4%B9%A0/"/>
    
  </entry>
  
  <entry>
    <title>背锅侠</title>
    <link href="http://gyrojeff.moe/2020/07/04/%E8%83%8C%E9%94%85%E4%BE%A0/"/>
    <id>http://gyrojeff.moe/2020/07/04/%E8%83%8C%E9%94%85%E4%BE%A0/</id>
    <published>2020-07-04T03:39:25.000Z</published>
    <updated>2020-07-04T03:40:33.000Z</updated>
    
    <content type="html"><![CDATA[<p>看到了一句非常真实的话：</p><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>我们只是需要一个背锅侠，一个可以掩盖家庭教育失败、学校教育失败、社会教育失败的东西。40年前它是武侠小说。30年前它是香港电影，20年前它是网络，10年前它是游戏，5年前是智能手机。</p>            <i class="fa fa-quote-right"></i>          </blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;看到了一句非常真实的话：&lt;/p&gt;
&lt;blockquote class=&quot;blockquote-center&quot;&gt;
            &lt;i class=&quot;fa fa-quote-left&quot;&gt;&lt;/i&gt;
            &lt;p&gt;我们只是需要一个背锅侠，一个可以掩盖家庭教</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="人生" scheme="http://gyrojeff.moe/tags/%E4%BA%BA%E7%94%9F/"/>
    
    <category term="引用" scheme="http://gyrojeff.moe/tags/%E5%BC%95%E7%94%A8/"/>
    
  </entry>
  
  <entry>
    <title>深夜随想</title>
    <link href="http://gyrojeff.moe/2020/07/02/%E6%B7%B1%E5%A4%9C%E9%9A%8F%E6%83%B3/"/>
    <id>http://gyrojeff.moe/2020/07/02/%E6%B7%B1%E5%A4%9C%E9%9A%8F%E6%83%B3/</id>
    <published>2020-07-01T16:36:19.000Z</published>
    <updated>2020-07-31T14:06:33.000Z</updated>
    
    <content type="html"><![CDATA[<p>清除自己想要什么，坚持道路自信。这可能就是学习政治最大的收获？不为言语所迷茫，不为世事而困扰，剥开雾般的眼障，行走险径钢丝。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;清除自己想要什么，坚持道路自信。这可能就是学习政治最大的收获？不为言语所迷茫，不为世事而困扰，剥开雾般的眼障，行走险径钢丝。&lt;/p&gt;
</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="学习" scheme="http://gyrojeff.moe/tags/%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="人生" scheme="http://gyrojeff.moe/tags/%E4%BA%BA%E7%94%9F/"/>
    
    <category term="生活" scheme="http://gyrojeff.moe/tags/%E7%94%9F%E6%B4%BB/"/>
    
    <category term="社团" scheme="http://gyrojeff.moe/tags/%E7%A4%BE%E5%9B%A2/"/>
    
    <category term="机器人" scheme="http://gyrojeff.moe/tags/%E6%9C%BA%E5%99%A8%E4%BA%BA/"/>
    
  </entry>
  
  <entry>
    <title>AP正考结束</title>
    <link href="http://gyrojeff.moe/2020/05/23/AP%E6%AD%A3%E8%80%83%E7%BB%93%E6%9D%9F/"/>
    <id>http://gyrojeff.moe/2020/05/23/AP%E6%AD%A3%E8%80%83%E7%BB%93%E6%9D%9F/</id>
    <published>2020-05-22T19:13:07.000Z</published>
    <updated>2020-05-22T19:28:37.000Z</updated>
    
    <content type="html"><![CDATA[<p>AP最后一门统计，前面考完了。还剩下一门Calculus的Makeup。这两周考试下来，特别是最近三天，我甚至开始怀疑，我真的适合学习吗？没有好的学习规划，永远被DDL牵着鼻子走。拿学习的时间去刷番和搞技术，但这样真的有意义吗？两门经济都没有做完，本想向别人寻求心理安慰但却发现大家都觉得很简单。12月份不努力学习，1月份美其名曰SAT，2月份自顾自地写代码，3月份开始网课摸鱼。我好像学习态度真的很差。学校里数学考试给自己找借口，其实就是不会，不熟，没刷题。为了保持那一点点可怜的自尊心这样真的有意义吗？好像也没有必要逃避了，也不能再逃避了，也没办法再逃避了。其实我好像早就意识到吃老本总会吃完的，但真的没想到这一天来得这么快。上一次因为担心课内而刷题还是在初三上直升考的时候啊。</p><p>再这样下去，我连GPA可能都不保了。</p><p>我要熬更多的夜，翘更多的课学习，刷更多的题，看更多的书。</p><p>于2020年5月23日AP Statistics后记。共勉。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;AP最后一门统计，前面考完了。还剩下一门Calculus的Makeup。这两周考试下来，特别是最近三天，我甚至开始怀疑，我真的适合学习吗？没有好的学习规划，永远被DDL牵着鼻子走。拿学习的时间去刷番和搞技术，但这样真的有意义吗？两门经济都没有做完，本想向别人寻求心理安慰但却</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="AP" scheme="http://gyrojeff.moe/tags/AP/"/>
    
  </entry>
  
  <entry>
    <title>200515-市地理课</title>
    <link href="http://gyrojeff.moe/2020/05/15/200515-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/15/200515-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-15T07:28:21.000Z</published>
    <updated>2020-05-15T07:52:13.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-15-世界文化圈"><a href="#5-15-世界文化圈" class="headerlink" title="5/15 世界文化圈"></a>5/15 世界文化圈</h1><h2 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h2><div class="note info">文化圈又称文化区,指具有相似的**文化现象和生存方式**的地理区域</div><ul><li>表现: <strong>语言文字、生活习惯、宗教信仰、思想观念</strong>等比较类似, 并有共同的渊源和紧密的联系。</li><li>划分: 文化圈的划分以<strong>文化源地</strong>为中心, 以<strong>民族</strong>为单位进行组合。</li></ul><h2 id="世界文化圈"><a href="#世界文化圈" class="headerlink" title="世界文化圈"></a>世界文化圈</h2><img src="/2020/05/15/200515-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><ol><li>西欧文化圈<ul><li><strong>分布地区</strong>：西欧、北美和澳大利亚等地区</li><li><strong>特点</strong>：西欧文化发源地，深受英国影响</li><li><strong>代表文化事物和现象</strong>：<ul><li>乳畜生产文化,普遍使用刀叉</li><li>信奉基督教新教、罗马天主教</li><li>不同风格的西方古典建筑</li><li>各种基督教节日庆典</li></ul></li></ul></li><li>东欧文化圈<ul><li><strong>分布地区</strong>：以斯拉夫民族为主的东欧地区</li><li><strong>特点</strong>：深受俄罗斯影响</li><li><strong>代表文化事物和现象</strong>：<ul><li>信奉东正教</li><li>圆形穹顶的东正教堂</li><li>俄罗斯精湛的芭蕾舞技术</li></ul></li></ul></li><li>东亚文化圈<ul><li><strong>分布地区</strong>：中国、日本、朝鲜半岛、蒙古</li><li><strong>特点</strong>：深受中国古代文化,特别是儒家思想和汉字影响</li><li><strong>代表文化事物和现象</strong>：<ul><li>稻米生产文化,普遍使用筷子</li><li>中国旗袍、日本和服、朝鲜高腰长裙、蒙古袍等</li></ul></li></ul></li><li>南亚文化圈<ul><li><strong>分布地区</strong>：印度、巴基斯坦、尼泊尔、孟加拉国、斯里兰卡等</li><li><strong>特点</strong>：<ul><li>深受古印度文明影响</li><li>民族、语言、宗教都比较复杂</li></ul></li><li><strong>代表文化事物和现象</strong>：<ul><li>印度教、锡克教、佛教、伊斯兰教等多种宗教</li><li>泰姬陵、印度舞蹈、纱丽服饰</li></ul></li></ul></li><li>东南亚文化圈<ul><li><strong>分布地区</strong>：中南半岛、马来群岛</li><li><strong>特点</strong>：受中国、印度及欧美影响,文化丰富多样,体现多元特色</li><li><strong>代表文化事物和现象</strong>：<ul><li>主要信奉佛教和伊斯兰教(菲律宾以天主教为国教)</li><li>吴哥窟(柬埔寨)、婆罗浮屠(印度尼西亚)</li></ul></li></ul></li><li>伊斯兰文化圈<ul><li><strong>分布地区</strong>：中亚、西亚和北非地区</li><li><strong>特点</strong>：阿拉伯民族为主、典型的伊斯兰宗教文化地区</li><li><strong>代表文化事物和现象</strong>：阿拉伯长袍、清真寺、穆斯林</li></ul></li><li>非洲文化圈<ul><li><strong>分布地区</strong>：撒哈拉以南的非洲地区</li><li><strong>特点</strong>：<ul><li>以黑色人种为主,民族、宗教复杂</li><li>崇尚自然,多信奉原始宗教</li></ul></li><li><strong>代表文化事物和现象</strong>：<ul><li>原始的图腾崇拜</li><li>神秘的宗教仪式</li><li>刚劲粗犷的鼓声和舞蹈</li></ul></li></ul></li><li>拉丁美洲文化圈<ul><li><strong>分布地区</strong>：墨西哥及其以南的美洲地区</li><li><strong>特点</strong>：外来文化与本地文化相互融合</li><li><strong>代表文化事物和现象</strong><ul><li>原始的图腾崇拜</li><li>神秘的宗教仪式</li><li>刚劲粗犷的鼓声和舞蹈</li></ul></li></ul></li><li>太平洋文化圈<ul><li><strong>分布地区</strong>：太平洋中的岛屿,包括波利尼西亚、密克罗尼西亚、美拉尼西亚三大岛群</li><li><strong>特点</strong>：居民原崇拜多种神灵,相信巫术,后多改信基督教</li><li><strong>代表文化事物和现象</strong>：<ul><li>擅长航海</li><li>土风歌舞</li></ul></li></ul></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-15-世界文化圈&quot;&gt;&lt;a href=&quot;#5-15-世界文化圈&quot; class=&quot;headerlink&quot; title=&quot;5/15 世界文化圈&quot;&gt;&lt;/a&gt;5/15 世界文化圈&lt;/h1&gt;&lt;h2 id=&quot;基本概念&quot;&gt;&lt;a href=&quot;#基本概念&quot; class=&quot;head</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200514-市化学课</title>
    <link href="http://gyrojeff.moe/2020/05/14/200514-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/14/200514-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-05-14T05:32:15.000Z</published>
    <updated>2020-05-14T08:14:33.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="工业制硫酸"><a href="#工业制硫酸" class="headerlink" title="工业制硫酸"></a>工业制硫酸</h1><h2 id="硫酸的用途与我国硫酸产量"><a href="#硫酸的用途与我国硫酸产量" class="headerlink" title="硫酸的用途与我国硫酸产量"></a>硫酸的用途与我国硫酸产量</h2><p>第一阶段：二氧化硫的制备</p><script type="math/tex; mode=display">\ce {S + O2 ->[点燃] SO2}</script><p>或者</p><script type="math/tex; mode=display">\ce {4FeS2 + 11O2 ->[煅烧] 2Fe2O3 + 8SO2}</script><ul><li>把硫铁矿矿石粉碎成细小的颗粒,然后把它放在沸腾炉中进行煅烧。</li><li>将矿石粉碎成很细的颗粒,增大了矿石颗粒的表面积,有利于矿石与空气充分接触,加快煅烧速率。</li><li>矿石颗粒在炉内一定空间里剧烈翻腾,与空气接触充分,煅烧速率快,煅烧充分</li></ul><p>第二阶段：二氧化硫的催化氧化</p><script type="math/tex; mode=display">\ce {2SO2 + O2 <=>[催化剂][\Delta] 2SO3}</script><p>第三阶段：三氧化硫的吸收</p><script type="math/tex; mode=display">\ce {SO3 + H2O -> H2SO4}</script><h2 id="原料选择"><a href="#原料选择" class="headerlink" title="原料选择"></a>原料选择</h2><ol><li>硫铁矿制硫酸</li><li>硫磺制硫酸</li><li>冶炼烟气制硫酸</li><li>其他</li></ol><h2 id="二氧化硫的催化氧化"><a href="#二氧化硫的催化氧化" class="headerlink" title="二氧化硫的催化氧化"></a>二氧化硫的催化氧化</h2><ul><li><strong>生产设备</strong>：接触室</li><li><strong>基本过程</strong>:精制后的炉气补充空气后送入装有五氧化二矾催化剂的接触室,氧化生成$\ce {SO3}$。</li></ul><h2 id="三氧化硫的吸收和硫酸生成"><a href="#三氧化硫的吸收和硫酸生成" class="headerlink" title="三氧化硫的吸收和硫酸生成"></a>三氧化硫的吸收和硫酸生成</h2><ul><li>用98.3%的硫酸吸收SO3,不易形成酸雾,吸收速率快。</li><li>SO3从塔的下部通入,98.3%的硫酸从塔顶喷下,两者逆流接触,吸收充分。</li></ul><img src="/2020/05/14/200514-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/1.png" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;工业制硫酸&quot;&gt;&lt;a href=&quot;#工业制硫酸&quot; class=&quot;headerlink&quot; title=&quot;工业制硫酸&quot;&gt;&lt;/a&gt;工业制硫酸&lt;/h1&gt;&lt;h2 id=&quot;硫酸的用途与我国硫酸产量&quot;&gt;&lt;a href=&quot;#硫酸的用途与我国硫酸产量&quot; class=&quot;headerli</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200513-市地理课</title>
    <link href="http://gyrojeff.moe/2020/05/13/200513-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/13/200513-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-13T14:07:20.000Z</published>
    <updated>2020-05-13T14:48:32.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-13-地理课-民族文化、地方文化及文化整合"><a href="#5-13-地理课-民族文化、地方文化及文化整合" class="headerlink" title="5/13 地理课 - 民族文化、地方文化及文化整合"></a>5/13 地理课 - 民族文化、地方文化及文化整合</h1><h2 id="民族文化和地方文化"><a href="#民族文化和地方文化" class="headerlink" title="民族文化和地方文化"></a>民族文化和地方文化</h2><ul><li>民族<ul><li>民族是指不同地域的人,由于经济生活、语言文字、风俗习惯和历史发展的不同而形成的社会共同体。</li><li>世界上有2000多个民族,人口最多的是汉族,人数最少的民族只有几十个人。</li><li>一般,各个民族都有自己的民族语言,但也有几个民族使用同一种语言,或个别的民族使用两、三种不同语言。</li><li>民族是历史文化的产物,在创造文化的过程中形成民族文化的<strong>人文特色</strong>。</li><li>民族无高低贵贱之分,只有生产力发展水平、文化先进与落后的差异。这种差异是在自然、社会环境中后天形成的,是一种历史现象,而不是永恒的。</li></ul></li></ul><div class="note info no-icon">            <h3 id="不同民族的人文特色"><a href="#不同民族的人文特色" class="headerlink" title="不同民族的人文特色"></a>不同民族的人文特色</h3><ul><li>中华民族 — 勤劳刻苦</li><li>法兰西民族 -— 热情浪漫</li><li>德意志民族 —- 严谨善思</li><li>英吉利民族 — 矜持幽默</li><li>美利坚民族 — 冒险求新</li></ul>          </div><div class="note success no-icon">            <h3 id="民族与种族"><a href="#民族与种族" class="headerlink" title="民族与种族"></a>民族与种族</h3><ul><li>民族:不同地域的人,由于经济生活、语言文字、风俗习惯和历史发展的不同而形成的社会共同体。<ul><li><strong><em>(属于社会历史范畴)</em></strong></li></ul></li><li>种族:体质形态上具有某些共同遗传特征的人群,是人类对自然环境长期适应的结果。<ul><li><strong><em>(属于自然范畴)</em></strong></li></ul></li></ul>          </div><ul><li>世界各地不同人群形成的地域文化具有<strong>地方性、民族性、民间性和传统性</strong>,是经过长期的交流和选择而<strong>传承</strong>下来的。</li><li>民族文化和地方文化具有鲜明特征,只有民族的才是世界的。</li><li>世界文化多姿多彩,是各民族、各地方优秀文化的集成。</li></ul><div class="note success no-icon">            <h3 id="保护民族文化和地方文化的意义"><a href="#保护民族文化和地方文化的意义" class="headerlink" title="保护民族文化和地方文化的意义"></a>保护民族文化和地方文化的意义</h3><ul><li>就是保护人类文化,有利于人类文化的发展和进步。</li><li>是研究古代文明的重要依据,有利于对古代文明的研究</li><li>是对少数民族、土著居民的尊重,有利于民族团结和社会稳定。</li><li>是重要的旅游资源,有利于促进当地社会、文化、经济的发展。</li><li>是文化多样性的体现，一旦消失就难以再现，是世界文化的损失</li><li>……</li></ul>          </div><h2 id="文化整合"><a href="#文化整合" class="headerlink" title="文化整合"></a>文化整合</h2><ol><li>文化整合是指各种地方文化、民族文化通过<strong>接触、交流、传播、融合和吸收</strong>,形成<strong>新的文化</strong>的过程。</li><li>文化整合不是一种文化取代另一种文化,而是各种文化的协调、发展和提升。</li></ol><div class="note danger">新文化的进步是融合吸收其他文化,摒弃落后过时文化,吐故纳新的过程。</div><div class="note warning no-icon">            <h3 id="影响文化整合的因素"><a href="#影响文化整合的因素" class="headerlink" title="影响文化整合的因素"></a>影响文化整合的因素</h3><ul><li>环境因素————相同、相近的自然环境有助于文化整合。</li><li>社会因素————文化整合与政治、经济因素有密切的关系。</li><li>人口、民族迁移因素————造成不同文化的碰撞、交流和整合。</li><li>文化自身因素————优秀、合理、符合时代要求的先进文化,在文化整合中发挥巨大的作用。</li><li>时间因素————需要长时间的选择和吸收,逐渐融合。</li></ul>          </div><div class="note info no-icon">            <h3 id="文化整合的社会意义"><a href="#文化整合的社会意义" class="headerlink" title="文化整合的社会意义"></a>文化整合的社会意义</h3><p>通过文化整合,提高内部凝聚力,实现民族团结,促进各民族文化和地方文化的交流融合,推动各民族文化和国家乃至世界整体文化的繁荣和发展。</p>          </div><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><img src="/2020/05/13/200513-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-13-地理课-民族文化、地方文化及文化整合&quot;&gt;&lt;a href=&quot;#5-13-地理课-民族文化、地方文化及文化整合&quot; class=&quot;headerlink&quot; title=&quot;5/13 地理课 - 民族文化、地方文化及文化整合&quot;&gt;&lt;/a&gt;5/13 地理课 - 民族文化</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200513-市物理课</title>
    <link href="http://gyrojeff.moe/2020/05/13/200513-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/13/200513-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-13T13:47:18.000Z</published>
    <updated>2020-05-13T14:06:31.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-13-物理课-重力势能"><a href="#5-13-物理课-重力势能" class="headerlink" title="5/13 物理课 - 重力势能"></a>5/13 物理课 - 重力势能</h1><ol><li>物体由于被举高而具有的能量叫做重力势能</li><li>物体的重力势能与物体的质量和物体所处的高度有关</li><li>重力势能的大小<script type="math/tex; mode=display">E_p = mgh</script></li><li>重力势能的单位：焦耳 (J)</li><li>$h$为物体距离零势能面的距离</li><li>零势能面通常选地面</li><li>重力势能具有相对性，是一个相对量</li><li>重力势能是标量，但是有正负</li><li>重力势能的变化与零势能面的选取无关</li><li>弹性势能<script type="math/tex; mode=display">E_p = \frac 1 2 k \Delta x ^ 2</script></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-13-物理课-重力势能&quot;&gt;&lt;a href=&quot;#5-13-物理课-重力势能&quot; class=&quot;headerlink&quot; title=&quot;5/13 物理课 - 重力势能&quot;&gt;&lt;/a&gt;5/13 物理课 - 重力势能&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;物体由于被举高而具有的能量叫做重</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200512-市化学课</title>
    <link href="http://gyrojeff.moe/2020/05/12/200512-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/12/200512-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-05-12T05:32:16.000Z</published>
    <updated>2020-05-12T05:54:10.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="勒夏特列原理与应用"><a href="#勒夏特列原理与应用" class="headerlink" title="勒夏特列原理与应用"></a>勒夏特列原理与应用</h1><div class="note info no-icon">            <h2 id="勒夏特列原理"><a href="#勒夏特列原理" class="headerlink" title="勒夏特列原理"></a>勒夏特列原理</h2><p>勒夏特列原理(又称平衡移动原理): 如果改变影响平衡的个条件(如浓度、温度或压强等),平衡就向能够减弱这种改变的方向移动。</p><div class="note warning">注：是减弱，不是抵消</div><ul><li>条件改变,平衡移动只是减弱外界条件带来的变化而不能完全抵消外界条件的变化。</li><li>从平衡移动的结果看,外界因素变化对平衡的影响占主导地位</li><li>勒夏特列原理既指明了条件改变,化学平衡移动的方向,也指明了化学平衡移动的结果。</li></ul>          </div><h2 id="勒夏特列原理的适用范围"><a href="#勒夏特列原理的适用范围" class="headerlink" title="勒夏特列原理的适用范围"></a>勒夏特列原理的适用范围</h2><ul><li>适用于已达平衡的体系,不适用于未达平衡的体系。</li><li>适用于浓度、温度、压强等因素改变导致化学平衡发生移动的问题</li><li>不能用来判断新平衡建立所需要的时间</li><li>不仅适用于化学平衡，也适用于溶解平衡等其他动态平衡</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;勒夏特列原理与应用&quot;&gt;&lt;a href=&quot;#勒夏特列原理与应用&quot; class=&quot;headerlink&quot; title=&quot;勒夏特列原理与应用&quot;&gt;&lt;/a&gt;勒夏特列原理与应用&lt;/h1&gt;&lt;div class=&quot;note info no-icon&quot;&gt;
            &lt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200512-市地理课</title>
    <link href="http://gyrojeff.moe/2020/05/12/200512-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/12/200512-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-12T05:04:23.000Z</published>
    <updated>2020-05-12T05:22:15.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-12-地理课-文化与环境"><a href="#5-12-地理课-文化与环境" class="headerlink" title="5/12 地理课 - 文化与环境"></a>5/12 地理课 - 文化与环境</h1><h2 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h2><p>文化是指人类在社会实践过程中所获得的<strong>物质的、精神的生产能力</strong>和<strong>创造的物质、精神财富的总和</strong></p><h2 id="文化的两种形态"><a href="#文化的两种形态" class="headerlink" title="文化的两种形态"></a>文化的两种形态</h2><ul><li>物质文化：为了满足人类生存和发展需要所创造的物质产品及其所表现的文化。包括饮食、服饰、建筑、交通、生产工具以及乡村、城市等。</li><li>非物质文化<ul><li>精神文化:是文化的核心,包括价值观、道徳伦理、民族性格、科学理论、文学艺术、宗教哲学等。</li><li>制度文化:政治、经济、法律、军事、教育、婚姻等一系列制度以及组织机构。</li></ul></li></ul><h2 id="环境对文化的影响"><a href="#环境对文化的影响" class="headerlink" title="环境对文化的影响"></a>环境对文化的影响</h2><ul><li>从本质上说, 文化是人与环境<strong>相互作用</strong>的产物。环境包括<strong>自然地理环境</strong>和<strong>人文社会环境</strong>。</li><li>环境与文化之间<strong>相互影响、相互作用</strong>。环境对文化起着非常重要的作用,而文化一经形成又会对环境产生影响。</li></ul><div class="note info no-icon">            <h3 id="环境对物质文化的影响"><a href="#环境对物质文化的影响" class="headerlink" title="环境对物质文化的影响"></a>环境对物质文化的影响</h3><ul><li>直接制约和影响物质文化的发展,使其对环境具有强烈依赖性</li><li>环境、资源等自然条件决定人工制品的材料、样式和风格</li><li>环境影响产业布局</li><li>环境影响社会发展水平</li></ul>          </div><div class="note primary no-icon">            <h3 id="环境对非物质文化的影响"><a href="#环境对非物质文化的影响" class="headerlink" title="环境对非物质文化的影响"></a>环境对非物质文化的影响</h3><ul><li>非物质文化被打上深深的环境焙印</li><li>影响原始宗教和信仰的形成和发展</li><li>影响人们的生产生活方式、思想观念、风俗习惯</li><li>影响文学艺术</li><li>影响语言</li><li>…</li></ul>          </div><h3 id="例子：民居屋顶的差异"><a href="#例子：民居屋顶的差异" class="headerlink" title="例子：民居屋顶的差异"></a>例子：民居屋顶的差异</h3><p>分属干旱地区和湿润地区</p><ul><li>干旱地区降水较少,平顶既可节省建筑材料,还可兼作晾晒农作物的场所。</li><li>湿润地区年降水量大,夏季炎热,斜坡式的屋顶既利于排水,又利于通风散热。</li></ul><h3 id="例子：不同的传统民居"><a href="#例子：不同的传统民居" class="headerlink" title="例子：不同的传统民居"></a>例子：不同的传统民居</h3><ul><li><strong>吊脚楼</strong>是西南地区少数民族传统民居,一般为竹木结构,高悬地面既通风干燥,又能防毒蛇、野兽,楼板下还可放杂物。</li><li><strong>窑洞</strong>是中国北方黄土高原上特有的民居形式,直立性很强的黄土为窑洞提供了很好的发展前提。窑洞防火,冬暖夏凉,经济实用。</li><li>粘土地区 - 砖瓦结构</li><li>山区 - 石木结构</li><li>黄土地区 - 陕北窑洞</li><li>湿热地区 - 竹木建筑</li><li>水乡地区 - 砖木结构</li></ul><h3 id="例子：蒙古包和毡房"><a href="#例子：蒙古包和毡房" class="headerlink" title="例子：蒙古包和毡房"></a>例子：蒙古包和毡房</h3><p>内陆草原地区:蒙古包、哈萨克毡房,拆卸方便,坚固耐用…</p><h3 id="例子：南米北面"><a href="#例子：南米北面" class="headerlink" title="例子：南米北面"></a>例子：南米北面</h3><p>与我国南北方农业生产结构不同有关：</p><ul><li><strong>南方地区</strong>夏季炎热多雨,水分、热量充足,耕地以水田为主,因地制宜种植生长习性喜温喜湿的水稻。</li><li><strong>北方地区</strong>降水较少,气温较低,耕地多为旱地,适合喜凉耐旱的小麦生长。</li></ul><h3 id="例子：南船北马"><a href="#例子：南船北马" class="headerlink" title="例子：南船北马"></a>例子：南船北马</h3><ul><li><strong>南方地区</strong>气候湿润,降水丰富,地表河网密布,地形较复杂,运输以船舶为主</li><li><strong>北方地区</strong>气候较为干燥,地势比较平坦,道路相对较宽,多陆踣运输;且草场广布,畜牧业发达;因此马匹以其耐力好、速度快而被驯化为交通工具。</li></ul><h3 id="例子：南繁北齐"><a href="#例子：南繁北齐" class="headerlink" title="例子：南繁北齐"></a>例子：南繁北齐</h3><ul><li><strong>南繁北齐</strong>,我国语言的地理差异表现为南繁北齐,即南方语言繁杂,北方语言比较单一。南方即使在同一方言区内,如闽方言区内,还分福州话、厦门话、莆田话、闽西话等,彼此差异极大,甚至听不懂。</li><li>南繁北齐的形成与地理环境存在一定关系。我国北方多地势平坦的高原和平原,交通联系方便,老百姓交往、交流的机会多,彼此融合,因而语言差异不大。而南方多丘陵山地,地形崎岖,交通闭塞,不利于人们交往,久而久之,便形成各具地方特色的“土话”。</li></ul><div class="note warning">文化是在环境的背景下通过人类的社会活动形成的。环境对文化起着非常重要的作用,人类的社会活动和生产关系也同样起着重要作用。片面强调环境的作用和忽视环境的作用都是错误的。重视环境对文化的影响,有利于因地制宜进行生产建设,继承传统文化,保护文化的多样性,也有利于文化和旅游事业的发展。</div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-12-地理课-文化与环境&quot;&gt;&lt;a href=&quot;#5-12-地理课-文化与环境&quot; class=&quot;headerlink&quot; title=&quot;5/12 地理课 - 文化与环境&quot;&gt;&lt;/a&gt;5/12 地理课 - 文化与环境&lt;/h1&gt;&lt;h2 id=&quot;基本概念&quot;&gt;&lt;a href</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200508-市地理课</title>
    <link href="http://gyrojeff.moe/2020/05/09/200508-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/09/200508-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-08T16:42:30.000Z</published>
    <updated>2020-05-08T17:11:38.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-8-地理课-产业结构及其变化"><a href="#5-8-地理课-产业结构及其变化" class="headerlink" title="5/8 地理课 - 产业结构及其变化"></a>5/8 地理课 - 产业结构及其变化</h1><h2 id="产业结构的概念"><a href="#产业结构的概念" class="headerlink" title="产业结构的概念"></a>产业结构的概念</h2><p>指国民经济中的 <strong>三大产业</strong> 之间的 <strong>联系</strong> 和 <strong>比例</strong> 关系。</p><div class="note primary"><b>发达国家</b>的第一产业占比重普遍比较低，第三产业所占比重普遍比较高；而<b>发展中国家</b>反之</div><img src="/2020/05/09/200508-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><h2 id="产业结构升级"><a href="#产业结构升级" class="headerlink" title="产业结构升级"></a>产业结构升级</h2><p>指随着 <strong>生产力</strong> 的发展，在产业结构中，<strong>第二、第三产业</strong>相对于第一产业，<strong>第三产业</strong>相对于第一、第二产业，产业 <strong>比重升高</strong>的过程。</p><img src="/2020/05/09/200508-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/2.jpg" class=""><div class="note info no-icon">            <h3 id="产业结构变化的一般趋势"><a href="#产业结构变化的一般趋势" class="headerlink" title="产业结构变化的一般趋势"></a>产业结构变化的一般趋势</h3><ul><li>第一产业比重持续下降</li><li>第二产业比重一般先上升,后下降;</li><li>第三产业比重持续上升。</li></ul>          </div><h2 id="产业结构优化"><a href="#产业结构优化" class="headerlink" title="产业结构优化"></a>产业结构优化</h2><p>通过<strong>市场机制</strong>和政府的<strong>政策调控</strong>, 使一个国家或地区的<strong>三大产业</strong>之间保持<strong>合理比例</strong>关系, 形成本地区的<em>主导产业</em>和<em>支柱产业</em>, 使产业结构与区域内的<strong>自然环境</strong>、<strong>社会经济环境</strong>以及<strong>生产力发展水平相协调</strong>, 体现出有别于其他区域的特点和优势, 以取得最佳的<strong>经济效益、社会效益和生态效益</strong>。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-8-地理课-产业结构及其变化&quot;&gt;&lt;a href=&quot;#5-8-地理课-产业结构及其变化&quot; class=&quot;headerlink&quot; title=&quot;5/8 地理课 - 产业结构及其变化&quot;&gt;&lt;/a&gt;5/8 地理课 - 产业结构及其变化&lt;/h1&gt;&lt;h2 id=&quot;产业结构的</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200507-市地理课</title>
    <link href="http://gyrojeff.moe/2020/05/07/200507-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/07/200507-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-07T09:15:18.000Z</published>
    <updated>2020-05-07T09:45:23.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-7-地理课-不平衡的国际贸易"><a href="#5-7-地理课-不平衡的国际贸易" class="headerlink" title="5/7 地理课 - 不平衡的国际贸易"></a>5/7 地理课 - 不平衡的国际贸易</h1><h2 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h2><p>世界各国之间的商品、劳务和其他生产要素的交换活动,是世界各国在国际分工的基础上通过国际市场进行的交易活动。</p><h2 id="发展意义"><a href="#发展意义" class="headerlink" title="发展意义"></a>发展意义</h2><ul><li>互通有无,为生产发展提供必要条件</li><li>扬长避短,创造更高的经济效益</li></ul><div class="note info">日本：贸易立国，加工贸易型经济</div><h2 id="区位条件"><a href="#区位条件" class="headerlink" title="区位条件"></a>区位条件</h2><ul><li>地理位置</li><li>自然资源、农产品</li><li>经济发展水平</li></ul><h2 id="地区差异"><a href="#地区差异" class="headerlink" title="地区差异"></a>地区差异</h2><ul><li>国际贸易发展水平差异巨大<div class="note primary">居世界前列的大多为发达国家</div></li></ul><div class="table-container"><table><thead><tr><th style="text-align:center">国家</th><th style="text-align:center">进口产品</th><th style="text-align:center">出口产品</th></tr></thead><tbody><tr><td style="text-align:center">发展中国家</td><td style="text-align:center">高附加值工业制成品</td><td style="text-align:center">初级产品、低附制成品</td></tr><tr><td style="text-align:center">发达国家</td><td style="text-align:center">初级产品、低附加值制成品</td><td style="text-align:center">高附加值工业制成品</td></tr></tbody></table></div><div class="note info">差异大、不等价</div><div class="note success">我国出口商品由低附加值的初级产品、工业制成品逐步向高附加值的工业制成品转变</div><ul><li>贸易壁垒：关税壁垒、非关税壁垒（如技术壁垒、绿色壁垒等）<ul><li>2001年12月11日,中国正式加入WTO,成为其第143个成员。</li></ul></li><li>国际贸易运输的主要方式：海洋运输</li></ul><h3 id="海洋运输"><a href="#海洋运输" class="headerlink" title="海洋运输"></a>海洋运输</h3><ol><li>建设海港，特别是深水港<ul><li>上海港的区位优势<ul><li>位于大陆海岸线中部，长江入海口附近</li><li>港阔水深，海陆联运</li><li>港口腹地是我国经济最发达的长江三角洲   <img src="/2020/05/07/200507-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""></li></ul></li><li>影响港口<strong>经济价值</strong>大小的因素：<ul><li>港口的地理位置</li><li>港口的自然条件</li><li>港口腹地的大小及其经济发展程度</li></ul></li></ul></li><li>采用大型船舶和集装箱运输<ul><li><strong>集装箱</strong>运输的优点<ul><li>运输量大、集中装卸、车船联运、提高效率</li><li>节省包装、保证安全、降低成本</li></ul></li></ul></li></ol><h2 id="课堂小结"><a href="#课堂小结" class="headerlink" title="课堂小结"></a>课堂小结</h2><ol><li>概念及意义：世界各国之间的商品、劳务和其他生产要素的交换活动。</li><li>区位条件：地理位置、自然资源以及经济发展水平等多种因素会综合影响国际贸易在发展程度与商品结构等方面的地区差异。</li><li>地区差异：各国发展水平差异巨大世界贸易市场大多集中在发达国家; 发达国家与发展中国家的国际贸易商品结构差异很大; 国家间因贸易壁垒、贸易摩擦发生的冲突和纠纷主要通过国际间的贸易谈判解决。</li><li>运输方式：<ul><li>80%的货运量通过海洋运输完成</li><li>发展海洋运输的两个关键<ul><li>建设海港，特别是深水港</li><li>采用大型船舶和集装箱运输</li></ul></li></ul></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-7-地理课-不平衡的国际贸易&quot;&gt;&lt;a href=&quot;#5-7-地理课-不平衡的国际贸易&quot; class=&quot;headerlink&quot; title=&quot;5/7 地理课 - 不平衡的国际贸易&quot;&gt;&lt;/a&gt;5/7 地理课 - 不平衡的国际贸易&lt;/h1&gt;&lt;h2 id=&quot;概念&quot;&gt;&lt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200507-市化学课</title>
    <link href="http://gyrojeff.moe/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-05-07T05:21:59.000Z</published>
    <updated>2020-09-22T09:41:26.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-7-化学课-影响化学平衡移动的因素"><a href="#5-7-化学课-影响化学平衡移动的因素" class="headerlink" title="5/7 化学课 - 影响化学平衡移动的因素"></a>5/7 化学课 - 影响化学平衡移动的因素</h1><h2 id="化学平衡的移动"><a href="#化学平衡的移动" class="headerlink" title="化学平衡的移动"></a>化学平衡的移动</h2><p>概念：可逆发硬中旧化学平衡破坏、新化学平衡建立的过程叫做化学平衡的移动</p><script type="math/tex; mode=display">影响化学平衡的因素\begin{cases}    温度\\浓度\\压强\end{cases}</script><h2 id="浓度对化学平衡移动的影响"><a href="#浓度对化学平衡移动的影响" class="headerlink" title="浓度对化学平衡移动的影响"></a>浓度对化学平衡移动的影响</h2><img src="/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/1.jpg" class=""><img src="/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/2.jpg" class=""><div class="note info no-icon">            <h3 id="浓度变化总结"><a href="#浓度变化总结" class="headerlink" title="浓度变化总结"></a>浓度变化总结</h3><p>在其他条件不变时：</p><ul><li>增大反应物的浓度，化学平衡向正反应方向移动</li><li>减小生成物的浓度，化学平衡向正反应方向移动</li><li>增大生成物的浓度，化学平衡向逆反应方向移动</li><li>减小反应物的浓度，化学平衡向逆反应方向移动</li></ul>          </div><div class="warning info">必须是液体或气体</div><h2 id="压强对化学平衡移动的影响"><a href="#压强对化学平衡移动的影响" class="headerlink" title="压强对化学平衡移动的影响"></a>压强对化学平衡移动的影响</h2><img src="/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/3.jpg" class=""><img src="/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/4.jpg" class=""><div class="note info no-icon">            <h3 id="压强变化总结"><a href="#压强变化总结" class="headerlink" title="压强变化总结"></a>压强变化总结</h3><p>在其他条件不变时：</p><ul><li>增大压强，化学平衡向缩小气体体积的方向移动</li><li>减小压强，化学平衡向增大气体体积的方向移动</li></ul><p>但有些反应，反应前后气态物质的总体积没有变化，增大压强后减小压强都不能使化学平衡移动，如：</p><script type="math/tex; mode=display">\ce {2HI(g) <=> H2(g) + I2(g)}</script>          </div><div class="note warning">如果平衡混合物都是固体或液体，改变压强也不能是化学平衡发生移动。</div><h2 id="温度对化学平衡移动的影响"><a href="#温度对化学平衡移动的影响" class="headerlink" title="温度对化学平衡移动的影响"></a>温度对化学平衡移动的影响</h2><p>结论：</p><ul><li>温度对化学平衡的影响与化学反应的热效应有关。</li><li>在其他条件不变时，<strong>升高温度</strong>，化学平衡 <strong>向吸热方向移动</strong></li><li>在其他条件不变时，<strong>降低温度</strong>，化学平衡 <strong>向放热方向移动</strong></li></ul><img src="/2020/05/07/200507-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/5.jpg" class=""><div class="note primary">温度对吸热反应方向影响比较大</div><h2 id="催化剂对化学平衡的影响"><a href="#催化剂对化学平衡的影响" class="headerlink" title="催化剂对化学平衡的影响"></a>催化剂对化学平衡的影响</h2><div class="note info">化学平衡不能使化学平衡发生移动</div><div class="note info">但是催化剂能够大大缩短化学反应的时间</div><h2 id="关于充入气体的讨论"><a href="#关于充入气体的讨论" class="headerlink" title="关于充入气体的讨论"></a>关于充入气体的讨论</h2><p>我们考察以下反应：</p><script type="math/tex; mode=display">\ce {N2(g) + 3H2(g) <=> 2NH3(g) + Q}</script><ol><li>T、V不变，充入$\ce {N2}$，反应物浓度增加，正反应速率增加，逆反应速率随之增加，反应朝正反应方向移动</li><li>T、V不变，充入$\ce {He}$，反应物浓度不变，正反应速率不变，逆反应速率也不变，化学平衡不移动</li><li>T、P不变，充入$\ce {He}$，压强降低，正逆反应速率均减小，平衡朝增加压强的方向移动，即朝逆反应方向移动<div class="note info">注：这里勒沙特列原理不能解释</div><div class="note info">根据勒沙特列原理，充入氮气，会使得氮气的转化率降低，氢气的转化率升高。这个原理广泛应用于工业生产当中。</div></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-7-化学课-影响化学平衡移动的因素&quot;&gt;&lt;a href=&quot;#5-7-化学课-影响化学平衡移动的因素&quot; class=&quot;headerlink&quot; title=&quot;5/7 化学课 - 影响化学平衡移动的因素&quot;&gt;&lt;/a&gt;5/7 化学课 - 影响化学平衡移动的因素&lt;/h1&gt;&lt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>AP 新课学习 - 完结撒花!!</title>
    <link href="http://gyrojeff.moe/2020/05/06/AP-%E6%96%B0%E8%AF%BE%E5%AD%A6%E4%B9%A0-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1/"/>
    <id>http://gyrojeff.moe/2020/05/06/AP-%E6%96%B0%E8%AF%BE%E5%AD%A6%E4%B9%A0-%E5%AE%8C%E7%BB%93%E6%92%92%E8%8A%B1/</id>
    <published>2020-05-06T12:48:53.000Z</published>
    <updated>2020-05-06T15:17:39.000Z</updated>
    
    <content type="html"><![CDATA[<p>由于寒假后半段太浪了，再后来整个人也很拖拉，所以AP一直处于断断续续的学习状态。</p><p>时至今日，今年的所有5门新课学完咯！！</p><hr><p>噢，我忘记刷题了。</p><p>总之</p><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>希望这个五月能够早点结束x</p>            <i class="fa fa-quote-right"></i>          </blockquote><p>🍊😝</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;由于寒假后半段太浪了，再后来整个人也很拖拉，所以AP一直处于断断续续的学习状态。&lt;/p&gt;
&lt;p&gt;时至今日，今年的所有5门新课学完咯！！&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;噢，我忘记刷题了。&lt;/p&gt;
&lt;p&gt;总之&lt;/p&gt;
&lt;blockquote class=&quot;blockquote-cen</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="AP Courses" scheme="http://gyrojeff.moe/tags/AP-Courses/"/>
    
  </entry>
  
  <entry>
    <title>200506-市物理课</title>
    <link href="http://gyrojeff.moe/2020/05/06/200506-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/05/06/200506-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-05-06T05:31:23.000Z</published>
    <updated>2020-05-12T05:25:42.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="5-6-物理课-动能"><a href="#5-6-物理课-动能" class="headerlink" title="5/6 物理课 - 动能"></a>5/6 物理课 - 动能</h1><ol><li>物体具有<strong>对外做功的能力</strong>，具有<strong>能量</strong>。 </li><li>动能：物体由于运动而具有的能量（$E_k$）</li><li>实验原理<script type="math/tex; mode=display">E_k = W_f \propto s</script></li><li>动能计算<script type="math/tex; mode=display">E_k = \frac 1 2 m v ^ 2</script></li><li>动能是一个标量</li><li>动能是一个状态量</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;5-6-物理课-动能&quot;&gt;&lt;a href=&quot;#5-6-物理课-动能&quot; class=&quot;headerlink&quot; title=&quot;5/6 物理课 - 动能&quot;&gt;&lt;/a&gt;5/6 物理课 - 动能&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;物体具有&lt;strong&gt;对外做功的能力&lt;/strong&gt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>UWP 开发 - 从入门到入土</title>
    <link href="http://gyrojeff.moe/2020/05/02/UWP-%E5%BC%80%E5%8F%91-%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9C%9F/"/>
    <id>http://gyrojeff.moe/2020/05/02/UWP-%E5%BC%80%E5%8F%91-%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9C%9F/</id>
    <published>2020-05-02T01:42:34.000Z</published>
    <updated>2020-09-14T23:58:51.000Z</updated>
    
    <content type="html"><![CDATA[<p>UWP Cheat Sheet</p><hr><h1 id="UWP-04-What-is-XAML"><a href="#UWP-04-What-is-XAML" class="headerlink" title="UWP-04 - What is XAML?"></a>UWP-04 - What is XAML?</h1><p>XAML - XML Syntax, create instances of Classes that define the UI.</p><h1 id="UWP-05-Understanding-Type-Converters"><a href="#UWP-05-Understanding-Type-Converters" class="headerlink" title="UWP-05 - Understanding Type Converters"></a>UWP-05 - Understanding Type Converters</h1><p>Type Converters - Convert literal strings in XAML into enumerations, instances of classes, etc.</p><h1 id="UWP-06-Understanding-Default-Properties-Complex-Properties-and-the-Property-Element-Syntax"><a href="#UWP-06-Understanding-Default-Properties-Complex-Properties-and-the-Property-Element-Syntax" class="headerlink" title="UWP-06 - Understanding Default Properties, Complex Properties and the Property Element Syntax"></a>UWP-06 - Understanding Default Properties, Complex Properties and the Property Element Syntax</h1><p>Default Property … Ex. sets Content property:</p><Button>Click Me</Button><p>Complex Properties - Break out a property into its own element syntax:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">&lt;Button Name&#x3D;&quot;ClickMeButton&quot;</span><br><span class="line">        HorizontalAlignment&#x3D;&quot;Left&quot;</span><br><span class="line">        Content&#x3D;&quot;Click Me&quot;</span><br><span class="line">        Margin&#x3D;&quot;20,20,0,0&quot; </span><br><span class="line">        VerticalAlignment&#x3D;&quot;Top&quot; </span><br><span class="line">        Click&#x3D;&quot;ClickMeButton_Click&quot;</span><br><span class="line">        Width&#x3D;&quot;200&quot;</span><br><span class="line">        Height&#x3D;&quot;100&quot;</span><br><span class="line">        &gt;</span><br><span class="line">    &lt;Button.Background&gt;</span><br><span class="line">        &lt;LinearGradientBrush EndPoint&#x3D;&quot;0.5,1&quot; StartPoint&#x3D;&quot;0.5,0&quot;&gt;</span><br><span class="line">            &lt;GradientStop Color&#x3D;&quot;Black&quot; Offset&#x3D;&quot;0&quot;&#x2F;&gt;</span><br><span class="line">            &lt;GradientStop Color&#x3D;&quot;Red&quot; Offset&#x3D;&quot;1&quot;&#x2F;&gt;</span><br><span class="line">        &lt;&#x2F;LinearGradientBrush&gt;</span><br><span class="line">    &lt;&#x2F;Button.Background&gt;</span><br><span class="line">&lt;&#x2F;Button&gt;</span><br></pre></td></tr></table></figure><h1 id="UWP-07-Understanding-XAML-Schemas-and-Namespace-Declarations"><a href="#UWP-07-Understanding-XAML-Schemas-and-Namespace-Declarations" class="headerlink" title="UWP-07 - Understanding XAML Schemas and Namespace Declarations"></a>UWP-07 - Understanding XAML Schemas and Namespace Declarations</h1><p>Don’t touch the schema stuff - it’s necessary!</p><p>Schemas define rules for XAML, for UWP, for designer support, etc.</p><p>Namespaces tell XAML parser where to find the definition / rules for a given element in the XAML.</p><h1 id="UWP-08-XAML-Layout-with-Grids"><a href="#UWP-08-XAML-Layout-with-Grids" class="headerlink" title="UWP-08 - XAML Layout with Grids"></a>UWP-08 - XAML Layout with Grids</h1><p>Layout controls don’t have a content property … they have a Chidren property of type UIElementCollection.</p><p>By embedding any control inside of a layout control, you are implicitly calling the Add method of the Children collection property.</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;Grid Background&#x3D;&quot;Black&quot;&gt;</span><br><span class="line">  &lt;Grid.RowDefinitions&gt;</span><br><span class="line">    &lt;RowDefinition Height&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">    &lt;RowDefinition Height&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">    &lt;RowDefinition Height&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">  &lt;&#x2F;Grid.RowDefinitions&gt;</span><br><span class="line">  &lt;Grid.ColumnDefinitions&gt;</span><br><span class="line">    &lt;ColumnDefinition Width&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">    &lt;ColumnDefinition Width&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">    &lt;ColumnDefinition Width&#x3D;&quot;*&quot; &#x2F;&gt;</span><br><span class="line">  &lt;&#x2F;Grid.ColumnDefinitions&gt;</span><br><span class="line">&lt;&#x2F;Grid&gt;</span><br></pre></td></tr></table></figure><p>Sizes expressed in terms of:</p><ul><li>Explicit pixels - 100</li><li>Auto - use the largest value of elements it contains to define the width / height</li><li>* (Star Sizing) - Utilize all the available space<ul><li>1* - Of all available space, give me 1 “share”</li><li>2* - Of all available space, give me 2 “shares” </li><li>3* - Of all available space, give me 3 “shares”</li></ul></li></ul><p>6 total shares … 3* would be 50% of the available width / height.</p><p>Elements put themselves into rows and columns using attached property syntax:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">...</span><br><span class="line">  ...</span><br><span class="line">  &lt;Button Grid.Row&#x3D;&quot;0&quot; &#x2F;&gt;</span><br><span class="line">&lt;&#x2F;Grid&gt;</span><br></pre></td></tr></table></figure><ul><li>When referencing Rows and Columns … 0-based.</li><li>There’s always one default implicit cell: Row 0, Column 0</li><li>If not specified, element will be in the default cell</li></ul><h1 id="UWP-09-XAML-Layout-with-StackPanel"><a href="#UWP-09-XAML-Layout-with-StackPanel" class="headerlink" title="UWP-09 - XAML Layout with StackPanel"></a>UWP-09 - XAML Layout with StackPanel</h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;StackPanel&gt;</span><br><span class="line">  &lt;TextBlock&gt;Top&lt;&#x2F;TextBlock&gt;</span><br><span class="line">  &lt;TextBlock&gt;Bottom&lt;&#x2F;TextBlock&gt;</span><br><span class="line">&lt;&#x2F;StackPanel&gt;</span><br></pre></td></tr></table></figure><ul><li>Vertical Orientation by default.</li><li>Left-to-right flow by default when Horizontal orientation.</li><li>Most layouts will combine multiple layout controls.</li><li>Grid will overlap controls.  StackPanel will stack them.</li></ul><h1 id="UWP-14-Legendary-Layout"><a href="#UWP-14-Legendary-Layout" class="headerlink" title="UWP-14 - Legendary Layout"></a>UWP-14 - Legendary Layout</h1><p>For the Textbox that you want to cross multiy lines:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;TextBox TextWrapping&#x3D;&quot;Wrap&quot;&gt;&lt;&#x2F;TextBox&gt;</span><br></pre></td></tr></table></figure></p><h1 id="UWP-17-Relative-Panel"><a href="#UWP-17-Relative-Panel" class="headerlink" title="UWP-17 - Relative Panel"></a>UWP-17 - Relative Panel</h1><p>Relative Panel can make layout relative to other components</p><p>Priorities:</p><ul><li>Alignment to Panel<ul><li><code>AlignTopWithPanel</code></li><li><code>AlignLeftWithPanel</code></li><li><code>AlignRightWithPanel</code></li><li><code>AlignBottomWithPanel</code></li></ul></li><li>Sibling Alignment<ul><li><code>AlignTopWith</code></li><li><code>AlignLeftWith</code></li><li><code>AlignRightWith</code></li><li><code>AlignBottomWith</code></li></ul></li><li>Sibling Positional<ul><li><code>Above</code></li><li><code>Below</code></li><li><code>Left</code></li><li><code>Right</code></li></ul></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;UWP Cheat Sheet&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&quot;UWP-04-What-is-XAML&quot;&gt;&lt;a href=&quot;#UWP-04-What-is-XAML&quot; class=&quot;headerlink&quot; title=&quot;UWP-04 - What is XAML?&quot;&gt;&lt;/</summary>
      
    
    
    
    <category term=".NET" scheme="http://gyrojeff.moe/categories/NET/"/>
    
    
    <category term="UWP" scheme="http://gyrojeff.moe/tags/UWP/"/>
    
    <category term="Windows" scheme="http://gyrojeff.moe/tags/Windows/"/>
    
    <category term="Visual Studio" scheme="http://gyrojeff.moe/tags/Visual-Studio/"/>
    
    <category term="XMAL" scheme="http://gyrojeff.moe/tags/XMAL/"/>
    
    <category term="C#" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term=".NET" scheme="http://gyrojeff.moe/tags/NET/"/>
    
  </entry>
  
  <entry>
    <title>200428-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/28/200428-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/28/200428-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-28T08:28:19.000Z</published>
    <updated>2020-04-28T09:21:01.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-28-地理课-商业区位条件"><a href="#4-28-地理课-商业区位条件" class="headerlink" title="4/28 地理课 - 商业区位条件"></a>4/28 地理课 - 商业区位条件</h1><h2 id="案例分析：徐家汇商圈"><a href="#案例分析：徐家汇商圈" class="headerlink" title="案例分析：徐家汇商圈"></a>案例分析：徐家汇商圈</h2><p>徐家汇商业区的区位优势</p><ul><li>交通位置十分优越</li><li>人流密集，购买力强</li><li>商家云集，空间聚集强</li></ul><h2 id="商业区位条件"><a href="#商业区位条件" class="headerlink" title="商业区位条件"></a>商业区位条件</h2><ol><li>交通：交通便利通达有利于商品物资的集散，也便于顾客购物，可以扩大消费市场。<ul><li>零售商业：交通主要结节点附近、交通干道周围的支路、轨道交通站点附近</li></ul></li><li>人口：人流密集、购买力强，商品流通周转快，市场繁荣。<ol><li>人口流动量：某区域范围单位时间 <strong>人口的通过量</strong> 和人口的 <strong>滞留时间</strong> <ul><li>衡量商业区位条件优劣的重要指标</li></ul></li><li>人口购买力：人均收入高，对高档商品需求量大</li></ol></li><li>集聚<ol><li>商家：共用基础设施、集约使用土地，降低交易成本；促进商业互补、扩大知名度。</li><li>顾客：减少交通费用和购物时间。</li></ol><ul><li>综合性商业街：满足顾客一次性购物的需求</li></ul></li><li>地价<ul><li>商业中心位于地价高的市区中心或各级区域中心</li><li>商业的经济效益高，与土地成本的差额大，地租支付能力强</li><li>商业一般在交通便利，人流密集的高地价地区才能获取较高额的利润</li></ul></li></ol><h2 id="各级城市商业中心特征"><a href="#各级城市商业中心特征" class="headerlink" title="各级城市商业中心特征"></a>各级城市商业中心特征</h2><div class="table-container"><table><thead><tr><th style="text-align:center">各级商业中心</th><th style="text-align:center">分布</th><th style="text-align:center">商业规模与形态</th><th style="text-align:center">商品特色</th></tr></thead><tbody><tr><td style="text-align:center">市级商业中心</td><td style="text-align:center">城市中心</td><td style="text-align:center">超级购物中心、大型百货商场</td><td style="text-align:center">高档商品</td></tr><tr><td style="text-align:center">区域商业中心</td><td style="text-align:center">区域中心</td><td style="text-align:center">大型百货商场、娱乐场所</td><td style="text-align:center">中高档商品</td></tr><tr><td style="text-align:center">社区商业中心</td><td style="text-align:center">社区中心</td><td style="text-align:center">大型超市、小型百货商场、服务业</td><td style="text-align:center">中低档商品、日用品</td></tr><tr><td style="text-align:center">邻里商业中心</td><td style="text-align:center">居民住宅附近</td><td style="text-align:center">小型超市、便利店、服务业</td><td style="text-align:center">日用品</td></tr></tbody></table></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-28-地理课-商业区位条件&quot;&gt;&lt;a href=&quot;#4-28-地理课-商业区位条件&quot; class=&quot;headerlink&quot; title=&quot;4/28 地理课 - 商业区位条件&quot;&gt;&lt;/a&gt;4/28 地理课 - 商业区位条件&lt;/h1&gt;&lt;h2 id=&quot;案例分析：徐家汇商</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200428-市物理课</title>
    <link href="http://gyrojeff.moe/2020/04/28/200428-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/28/200428-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-28T07:35:19.000Z</published>
    <updated>2020-04-28T08:17:47.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-28-物理课-功率-2"><a href="#4-28-物理课-功率-2" class="headerlink" title="4/28 物理课 - 功率 (2)"></a>4/28 物理课 - 功率 (2)</h1><ol><li>汽车不能一直加速。</li><li>一直保持额定功率时，力与其方向上的速度成反比。</li><li>汽车在匀速行驶时，速度最大，阻力等于牵引力。<script type="math/tex; mode=display">P = Fv</script><script type="math/tex; mode=display">F - f = ma</script><script type="math/tex; mode=display">a = \frac {\mathrm dv} {\mathrm dt}</script></li><li>汽车上坡需要有更大的牵引力<script type="math/tex; mode=display">v' = \frac {P}{F + f'}</script></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-28-物理课-功率-2&quot;&gt;&lt;a href=&quot;#4-28-物理课-功率-2&quot; class=&quot;headerlink&quot; title=&quot;4/28 物理课 - 功率 (2)&quot;&gt;&lt;/a&gt;4/28 物理课 - 功率 (2)&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;汽车不能一直加速。&lt;/l</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200428-老梁化学课</title>
    <link href="http://gyrojeff.moe/2020/04/28/200428-%E8%80%81%E6%A2%81%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/28/200428-%E8%80%81%E6%A2%81%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-28T05:29:49.000Z</published>
    <updated>2020-09-22T09:41:23.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第四章-剖析物质变化中的能量变化"><a href="#第四章-剖析物质变化中的能量变化" class="headerlink" title="第四章 - 剖析物质变化中的能量变化"></a>第四章 - 剖析物质变化中的能量变化</h1><h2 id="物质在溶解过程中有能量变化"><a href="#物质在溶解过程中有能量变化" class="headerlink" title="物质在溶解过程中有能量变化"></a>物质在溶解过程中有能量变化</h2><h3 id="物质变化中的能量变化："><a href="#物质变化中的能量变化：" class="headerlink" title="物质变化中的能量变化："></a>物质变化中的能量变化：</h3><ol><li><strong>能量守恒定律</strong>：能量在各种形式之间的转换和各个物体之间的转移过程中，各种形式的能量综合保持不变。</li><li>物理变化：<script type="math/tex; mode=display">一定量的物质：E_g > E_l > E_s</script><script type="math/tex; mode=display">\ce {H2O (l) -> H2O (g) - 44 kJ}</script>意义：$1 \text {mol}$液态水变成气体，吸收$44\text { kJ}$的热量。</li><li>化学变化：<script type="math/tex; mode=display">\ce {C (s) + O2 (g) -> CO2 (g) + 393.5 kJ}</script>意义：$1 \text { mol}$的固态$\ce {C}$和$1 \text { mol}$的氧气反应，生成一摩尔的二氧化碳气体并放出393.5千焦的热量。<div class="note success">要注意量、状态</div></li></ol><h3 id="溶解过程和溶解热现象"><a href="#溶解过程和溶解热现象" class="headerlink" title="溶解过程和溶解热现象"></a>溶解过程和溶解热现象</h3><script type="math/tex; mode=display">\ce {KMnO4 -> K+ + MnO4- (紫红色)}</script><ul><li>溶液温度升高：$\ce {NaOH (s)、浓硫酸}$</li><li>溶液温度降低：$\ce {NH4NO3 (s)、NH4Cl (s)}$</li><li>溶液温度变化不大：$\ce {NaCl (s)}$</li></ul><p>解释：</p><script type="math/tex; mode=display">    溶解过程 \begin{cases}        扩散过程（物理过程） & 吸收热量 \\ 水合过程（化学过程） & 放出热量    \end{cases}</script><p>比如：$\ce {Cu2+}$和水发生水合过程，生成水合铜离子，显蓝色</p><ul><li>$扩散过程中吸收的热量 &gt; 水合过程中放出的热量 \rightarrow 溶液温度下降$</li><li>$扩散过程中吸收的热量 &lt; 水合过程中放出的热量 \rightarrow 溶液温度升高$</li></ul><script type="math/tex; mode=display">    溶液中的微粒    \begin{cases}        溶剂分子 \\ 溶质分子 / 离子 \\ 水合溶质分子 / 离子    \end{cases}</script><script type="math/tex; mode=display">\ce {HCl + H2O -> H3O+ + Cl-}</script><div class="note danger">生成溶液的过程既不是物理变化，也不是化学变化，是物理化学变化</div><h3 id="溶解和结晶"><a href="#溶解和结晶" class="headerlink" title="溶解和结晶"></a>溶解和结晶</h3><ul><li><strong>溶解</strong>：固体溶质扩散到溶剂中去的过程</li><li><strong>结晶</strong>：固体溶质从溶液中析出的过程</li></ul><div class="note primary">溶解过程和结晶过程同时存在，是一组相反的过程</div><script type="math/tex; mode=display">\ce {固体物质 <=>[溶解][结晶] 溶液中的溶质}</script><ul><li>$v_{溶解} &gt; v_{结晶}$，固体溶解（减少），不饱和溶液</li><li>$v_{溶解} &lt; v_{结晶}$，固体析出（增加），饱和溶液</li><li>$v_{溶解} = v_{结晶}$，溶解平衡，饱和溶液</li></ul><div class="note default">溶解平衡：与外界条件（温度、溶剂量等）有关</div><div class="note warning">改变外界条件（升温、加水等），原来的平衡被破坏，在新的条件下达到新的平衡 -- 平衡发生移动。</div><h3 id="结晶水合物"><a href="#结晶水合物" class="headerlink" title="结晶水合物"></a>结晶水合物</h3><ul><li><strong>晶体</strong>：自发形成的具有规则的几何形状的固体</li><li><strong>结晶水合物</strong>：含有结晶水的固体</li></ul><script type="math/tex; mode=display">\ce {CuSO4*5H2O: 胆矾、蓝矾、硫酸铜晶体}</script><script type="math/tex; mode=display">\ce {FeSO4*7H2O: 绿矾}</script><script type="math/tex; mode=display">\ce {KAl(SO4)2*12H2O: 明矾}</script><script type="math/tex; mode=display">\ce {CaSO4*2H2O: 生石膏}</script><script type="math/tex; mode=display">\ce {2CaSO4*H2O: 熟石膏}</script><script type="math/tex; mode=display">\ce {Na2CO3*10H2O: 石碱}</script><script type="math/tex; mode=display">\ce {Na2SO4*10H2O: 芒硝}</script><ul><li><strong>风化</strong>：室温下干燥空气中失去部分或全部结晶水的现象</li><li><strong>潮解</strong>：吸收空气中的水蒸气在固体表面形成溶液的现象<ul><li>例如氢氧化钠作为干燥剂</li></ul></li></ul><h2 id="化学反应中的能量变化"><a href="#化学反应中的能量变化" class="headerlink" title="化学反应中的能量变化"></a>化学反应中的能量变化</h2><h3 id="化学反应中的热效应"><a href="#化学反应中的热效应" class="headerlink" title="化学反应中的热效应"></a>化学反应中的热效应</h3><script type="math/tex; mode=display">\ce {C + O2 ->[点燃] CO2 + Q}~~~~放热反应</script><script type="math/tex; mode=display">\ce {C + CO2 ->[加热] 2CO - Q}~~~~吸热反应</script><script type="math/tex; mode=display">\ce {HCl + NaOH -> NaCl + H2O + Q}</script><ul><li><strong>化学能</strong>：只有在化学反应中才能释放出来的能量（热能、光能、……）</li><li>当化学反应中的能量变化表现为热量变化是：<ul><li>对于放热反应：<script type="math/tex; mode=display">\ce {\sum E_{反应物} -> \sum E_{生成物} + Q}</script><script type="math/tex; mode=display">\sum E_{反应物} > \sum E_{生成物}</script></li><li>对于吸热反应：<script type="math/tex; mode=display">\ce {\sum E_{反应物} -> \sum E_{生成物} - Q}</script><script type="math/tex; mode=display">\sum E_{反应物} < \sum E_{生成物}</script></li></ul></li></ul><h3 id="能量变化图"><a href="#能量变化图" class="headerlink" title="能量变化图"></a>能量变化图</h3><img src="/2020/04/28/200428-%E8%80%81%E6%A2%81%E5%8C%96%E5%AD%A6%E8%AF%BE/1.jpg" class=""><img src="/2020/04/28/200428-%E8%80%81%E6%A2%81%E5%8C%96%E5%AD%A6%E8%AF%BE/2.jpg" class=""><img src="/2020/04/28/200428-%E8%80%81%E6%A2%81%E5%8C%96%E5%AD%A6%E8%AF%BE/3.jpg" class=""><h3 id="热化学反应方程式"><a href="#热化学反应方程式" class="headerlink" title="热化学反应方程式"></a>热化学反应方程式</h3><p>表示化学反应中吸收或放出的能量的化学方程式</p><div class="note primary">热化学反应方程式中可以出现分数、小数、整数，但是不可以全部是分数</div><div class="note success">热化学方程式中的系数之比不表示微粒数之比，表示物质的量</div><div class="note success">反应物、生成物必须标明状态</div><div class="note success">热化学反应方程式不用写反应条件</div><div class="note danger">Tip: 想要得到想要的热化学反应方程式，可以相加减。</div><h3 id="燃料的充分利用"><a href="#燃料的充分利用" class="headerlink" title="燃料的充分利用"></a>燃料的充分利用</h3><script type="math/tex; mode=display">    节约能源 \begin{cases}        燃料的充分燃烧 \begin{cases}            增大反应物的接触面积（固体反应物粉碎） \\ 过量的氧气 \\ \cdots         \end{cases} \\ 热能的充分利用 \begin{cases}            热量交换 \\ \cdots        \end{cases}    \end{cases}</script><h2 id="铜锌原电池及其反应原理"><a href="#铜锌原电池及其反应原理" class="headerlink" title="铜锌原电池及其反应原理"></a>铜锌原电池及其反应原理</h2><div class="note success">现象：指针偏转，铜片上有气泡产生，锌片上无气泡，锌片逐渐溶解。</div><p>负极，$\ce {Zn}$：氧化反应</p><script type="math/tex; mode=display">\ce {Zn -2e -> Zn^{2+}}</script><p>正极，$\ce {Cu}$：还原反应</p><script type="math/tex; mode=display">\ce {2H+ + 2e -> H2 ^}</script><p>总反应方程式</p><script type="math/tex; mode=display">\ce {Zn + 2 H+ -> Zn^2+ + H2 ^}</script><div class="note primary">工作原理：氧化还原反应</div><script type="math/tex; mode=display">原电池的组成 \begin{cases}    正极——不活泼金属、碳棒 & 得\ce{e}、还原反应 \\    负极——活泼金属 &失\ce {e}、氧化反应 \\ 电解质溶液 \\ 导线\end{cases}</script><script type="math/tex; mode=display">化学能 \longrightarrow 电能</script><div class="note warning">原电池发生的反应要比一般的反应快。</div><p>原电池原理应用：</p><ol><li>实验室制氢气：粗锌（多种金属） + 稀硫酸 =&gt; 形成众多原电池</li><li>锌 + 稀硫酸 + 硫酸铜（少量） =&gt; 置换出铜、形成原电池</li><li>金属的腐蚀与防护<ol><li>铁含杂质$\ce {C}$，空气中的水膜作为电解质溶液<ul><li>正极：析氢腐蚀<script type="math/tex; mode=display">\ce {2H+ + 2e -> H2 ^}</script></li><li>正极：吸氧腐蚀<script type="math/tex; mode=display">\ce {2H2O + O2 + 4e -> 4 OH-}</script></li><li>负极：<script type="math/tex; mode=display">\ce {Fe - 2e -> Fe^2+}</script></li></ul></li><li>防护：<ol><li>破坏原电池: 改变金属内部结构</li><li>破坏原电池: 金属表面覆盖层</li><li>电化学保护法：焊更加活泼的金属，比如焊锌块。</li></ol></li></ol></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;第四章-剖析物质变化中的能量变化&quot;&gt;&lt;a href=&quot;#第四章-剖析物质变化中的能量变化&quot; class=&quot;headerlink&quot; title=&quot;第四章 - 剖析物质变化中的能量变化&quot;&gt;&lt;/a&gt;第四章 - 剖析物质变化中的能量变化&lt;/h1&gt;&lt;h2 id=&quot;物质在溶解</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200424-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/24/200424-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/24/200424-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-24T10:12:13.000Z</published>
    <updated>2020-04-28T06:30:00.000Z</updated>
    
    <content type="html"><![CDATA[<ul><li>第一产业：农业 - <strong>国民年经济的基础</strong></li><li>第二产业：工业、建筑业 - <strong>国民经济主导</strong></li><li>第三产业：为社会生产生活服务的产业 - <strong>衡量现代社会经济发达程度的重要指标</strong></li></ul><h1 id="4-24-地理课-第三产业的地域差异"><a href="#4-24-地理课-第三产业的地域差异" class="headerlink" title="4/24 地理课 - 第三产业的地域差异"></a>4/24 地理课 - 第三产业的地域差异</h1><ol><li>按空间分布特征分类<ol><li>遍布性行业：通讯、医疗、教育、商业、餐饮等</li><li>对偶自然、社会经济条件依赖较强的行业：旅游、交通运输等</li><li>与城市规模、发达程度、经济地位有关的行业：金融、贸易、信息服务、科技服务、高级商业中心等</li></ol></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;ul&gt;
&lt;li&gt;第一产业：农业 - &lt;strong&gt;国民年经济的基础&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;第二产业：工业、建筑业 - &lt;strong&gt;国民经济主导&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;第三产业：为社会生产生活服务的产业 - &lt;strong&gt;衡量现代社会经济发达程</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200423-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/23/200423-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/23/200423-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-23T05:29:07.000Z</published>
    <updated>2020-04-23T06:43:02.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-23-化学课-可逆反应与平衡状态"><a href="#4-23-化学课-可逆反应与平衡状态" class="headerlink" title="4/23 化学课 - 可逆反应与平衡状态"></a>4/23 化学课 - 可逆反应与平衡状态</h1><h2 id="可逆反应"><a href="#可逆反应" class="headerlink" title="可逆反应"></a>可逆反应</h2><script type="math/tex; mode=display">    \ce {Cl2 + H2O <=> HCl + HClO}</script><script type="math/tex; mode=display">    \ce {SO2 + H2O <=> H2SO3}</script><script type="math/tex; mode=display">    \ce {N2 + 3H2 <=>[高温、高压][催化剂] 2NH3}</script><script type="math/tex; mode=display">    \ce {2SO2 + O2 <=>[V2O5][\Delta] 2SO3}</script><p>正反应：</p><script type="math/tex; mode=display">    \ce {2SO2 + O2 ->[V2O5][\Delta] 2SO3}</script><p>逆反应：</p><script type="math/tex; mode=display">    \ce {2SO3 ->[V2O5][\Delta] 2SO2 + O2}</script><ol><li>定义：<strong>在同一条件下</strong>，既能向<strong>正反应方向</strong>进行又能向<strong>逆反应方向</strong>进行的反应</li><li>特点<ul><li>在同一条件下进行</li><li>正逆反应同时存在</li><li>反应物生成物共存</li></ul></li><li>表示方式：可逆反应化学方程式中常用 $\ce {&lt;=&gt;}$</li></ol><script type="math/tex; mode=display">可逆反应非常普遍</script><img src="/2020/04/23/200423-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/1.jpg" class=""><h2 id="溶解平衡"><a href="#溶解平衡" class="headerlink" title="溶解平衡"></a>溶解平衡</h2><script type="math/tex; mode=display">    \ce {固体溶质 <=>[溶解][结晶]溶液中的溶质}</script><p>在一定条件下,当溶质溶解的速率等于结晶的速率,固体溶质不再减少,也不再增加,溶液处于饱和状态,称之为达到了溶解平衡状态,简称溶解平衡。</p><h2 id="化学平衡状态"><a href="#化学平衡状态" class="headerlink" title="化学平衡状态"></a>化学平衡状态</h2><ul><li>在一定条件下的可逆反应中,正反应速率和逆反应速率相等,反应混合物中各组分的浓度保持不变的状态,称之为化学平衡状态,简称化学平衡。</li><li>化学平衡状态是可逆反应在一定条件下所能达到的最大限度。</li></ul><h2 id="化学平衡的特征"><a href="#化学平衡的特征" class="headerlink" title="化学平衡的特征"></a>化学平衡的特征</h2><ol><li>研究对象：可逆反应</li><li>实质：$v_正 = v_逆$</li><li>达到化学平衡时，正逆反应还在进行：$v_正 = v_逆 ≠ 0$</li><li>现象：达到化学平衡时反应混合物中各物质的浓度不再发生变化</li><li>若改变浓度、温度、压强等反应条件，化学平衡会被破坏</li></ol><script type="math/tex; mode=display">    \ce {N2 + 3H2 <=>[高温、高压][催化剂] 2NH3}</script><div class="table-container"><table><thead><tr><th style="text-align:center">条件</th><th style="text-align:center">$v_正$</th><th style="text-align:center">$v_逆$</th></tr></thead><tbody><tr><td style="text-align:center">扩大容器体积</td><td style="text-align:center">$\downarrow$</td><td style="text-align:center">$\downarrow$</td></tr><tr><td style="text-align:center">使用合适的催化剂</td><td style="text-align:center">$\uparrow$</td><td style="text-align:center">$\uparrow$</td></tr><tr><td style="text-align:center">升高温度</td><td style="text-align:center">$\uparrow$</td><td style="text-align:center">$\uparrow$</td></tr><tr><td style="text-align:center">体积不变，充入$\ce {N2}$</td><td style="text-align:center">$\uparrow$</td><td style="text-align:center">随之 $\uparrow$</td></tr><tr><td style="text-align:center">体积不变，充入$\ce {NH3}$</td><td style="text-align:center">随之 $\uparrow$</td><td style="text-align:center">$\uparrow$</td></tr><tr><td style="text-align:center">体积不变，充入$\ce {He}$</td><td style="text-align:center">$\times$</td><td style="text-align:center">$\times$</td></tr><tr><td style="text-align:center">压强不变，充入$\ce {He}$</td><td style="text-align:center">$\downarrow$</td><td style="text-align:center">$\downarrow$</td></tr></tbody></table></div><h2 id="判断"><a href="#判断" class="headerlink" title="判断"></a>判断</h2><p><div class="note primary">单位时间内有$3 \text { mol }\ce {H2}$参加反应，$1 \text { mol }\ce {N2}$生成。</div><br><strong>正确</strong>：因为两个条件分别可以求出正反应速率和逆反应速率。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-23-化学课-可逆反应与平衡状态&quot;&gt;&lt;a href=&quot;#4-23-化学课-可逆反应与平衡状态&quot; class=&quot;headerlink&quot; title=&quot;4/23 化学课 - 可逆反应与平衡状态&quot;&gt;&lt;/a&gt;4/23 化学课 - 可逆反应与平衡状态&lt;/h1&gt;&lt;h2 i</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200423-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/23/200423-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/23/200423-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-23T05:09:29.000Z</published>
    <updated>2020-04-23T05:24:38.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-23-地理课-高新技术产业区位"><a href="#4-23-地理课-高新技术产业区位" class="headerlink" title="4/23 地理课 - 高新技术产业区位"></a>4/23 地理课 - 高新技术产业区位</h1><h2 id="高新技术产业"><a href="#高新技术产业" class="headerlink" title="高新技术产业"></a>高新技术产业</h2><ol><li>基本概念：<strong>高新技术产业</strong>是以微电子技术与计算机技术、信息通讯技术、生物技术、新材料技术、激光技术、航天技术为支撑的产业。</li><li>特点：<ol><li>科研人员占职工总人数的比例高</li><li>研发费用占销售收入的比例高</li><li>产品更新换代比较快</li><li>产品附加值高<script type="math/tex; mode=display">  高新技术产业是科技主导型产业</script></li></ol></li><li>意义：<ol><li>节约劳动力，提高生产效率</li><li>提高资源、能源的利用率</li><li>拓展新领域、创造新产业</li></ol></li><li>产品特点：轻、小、精、贵。</li><li>区位条件：<ol><li>原料、能源、劳动力价格和距离市场远近等因素的影响在减弱或相对下降。</li><li>技术集聚程度、人才、信息、环境、交通、通讯等因素的影响力在增强</li></ol></li></ol><h2 id="案例分析：美国硅谷"><a href="#案例分析：美国硅谷" class="headerlink" title="案例分析：美国硅谷"></a>案例分析：美国硅谷</h2><ol><li>位置：硅谷位于美国西部、圣弗朗西斯科湾区南部, 是高科技事业云集的美国加州圣克拉拉谷的别称。</li><li>环境：美国硅谷环境优美；有着冬暖夏凉的地中海气候。这里三面环水,深受海洋的影响并受太平洋加利福尼亚寒流影响夏季多雾。</li><li>技术人才：斯坦福大学在美国硅谷的形成中起了关键作用,这里的许多大学是硅谷微电子产业的孵化器,也为硅谷输送大量的技术人才。</li><li>交通：邻近旧金山航空港; 高速公路贯穿全境。</li><li>市场：<ul><li>美国政府一直维持着对“硅谷“半导体产品稳定的订货量。</li><li>产品面向世界市场</li></ul></li><li>文化：崇尚创新、鼓励冒险、宽容失败、诚心协作。</li></ol><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><ul><li>核心内容是农业和工业区位条件及变化</li><li>通过对典型案例分析的方法,加深对农业和工业区位以及农业地域类型和工业区的认识;以某一区域农业和工业的区位变化为例,了解社会经济发展对区位变化的影响。</li><li>树立因地制宜、因时制宜发展农业的观念;增强对农民、农业、农村问题的关注;感悟工业发屐对社会经济发展的影响;体会“创新驱动、转型发展”对区域产业发展的价值。</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-23-地理课-高新技术产业区位&quot;&gt;&lt;a href=&quot;#4-23-地理课-高新技术产业区位&quot; class=&quot;headerlink&quot; title=&quot;4/23 地理课 - 高新技术产业区位&quot;&gt;&lt;/a&gt;4/23 地理课 - 高新技术产业区位&lt;/h1&gt;&lt;h2 id=&quot;高</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200422-市物理课</title>
    <link href="http://gyrojeff.moe/2020/04/22/200422-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/22/200422-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-22T05:39:19.000Z</published>
    <updated>2020-04-22T13:35:30.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-22-物理课-功率-1"><a href="#4-22-物理课-功率-1" class="headerlink" title="4/22 物理课 - 功率 (1)"></a>4/22 物理课 - 功率 (1)</h1><ol><li>功率定义：功跟完成这些功所用的时间的比值，用$P$表示<script type="math/tex; mode=display">P = \frac W t</script></li><li>单位(SI): 瓦特(W), $1 \text {W} = 1 \text {J / s}$<br>常用单位：千瓦(kW)</li><li>物理意义：反应物体做功的快慢</li><li>比值定义法</li><li>标量：功率是标量</li><li>功率的计算<script type="math/tex; mode=display">P = \frac W t = \frac {Fs\cos \theta} t = Fv\cos\theta = \boldsymbol{F} \cdot \boldsymbol{v}</script>瞬时功率<script type="math/tex; mode=display">P = \frac {\mathrm dA}{\mathrm dt}</script>平均功率<script type="math/tex; mode=display">\bar P = \frac {W} {t} = \boldsymbol{F} \cdot \bar {\boldsymbol{v}}</script></li><li>额定功率与实际功率<ol><li>额定功率:机械正常条件下,长时间工作的最大功率</li><li>实际功率:机械实际运行时功率,a实际功率不能长时间超过额定功率</li></ol></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-22-物理课-功率-1&quot;&gt;&lt;a href=&quot;#4-22-物理课-功率-1&quot; class=&quot;headerlink&quot; title=&quot;4/22 物理课 - 功率 (1)&quot;&gt;&lt;/a&gt;4/22 物理课 - 功率 (1)&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;功率定义：功跟完成这些功</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>AP Calculus - 级数复习</title>
    <link href="http://gyrojeff.moe/2020/04/21/AP-Calculus-%E7%BA%A7%E6%95%B0%E5%A4%8D%E4%B9%A0/"/>
    <id>http://gyrojeff.moe/2020/04/21/AP-Calculus-%E7%BA%A7%E6%95%B0%E5%A4%8D%E4%B9%A0/</id>
    <published>2020-04-21T07:38:43.000Z</published>
    <updated>2020-09-22T09:41:23.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>考试在即，但却还没学完，心中诚惶诚恐，遂，学。</p><h1 id="几何级数-Geometric-Series"><a href="#几何级数-Geometric-Series" class="headerlink" title="几何级数 - Geometric Series"></a>几何级数 - Geometric Series</h1><h2 id="几何级数的定义"><a href="#几何级数的定义" class="headerlink" title="几何级数的定义"></a>几何级数的定义</h2><p>几何级数，又称等比级数：</p><script type="math/tex; mode=display">    \sum_{n = 0} ^ {\infty} aq^n = a + aq + aq ^2 + \cdots  + aq^n + \cdots</script><h2 id="几何级数的敛散性"><a href="#几何级数的敛散性" class="headerlink" title="几何级数的敛散性"></a>几何级数的敛散性</h2><p>根据等比数列前$n$项求和公式，若$|q| ≠ 1$，则部分和为</p><script type="math/tex; mode=display">    S_n = a + aq + aq ^ 2 + \cdots + aq ^ {n - 1} = \frac {a - aq ^ n}{1 - q}</script><ul><li>当$|q| &lt; 1$时：<script type="math/tex; mode=display">      \sum_{n = 0} ^ \infty a q ^ n = \lim _ {n \rightarrow \infty} S_n = \frac {a}{1 - q}</script>  级数收敛</li><li>当$q = 1$时：<script type="math/tex; mode=display">      \lim _ { n \rightarrow \infty } S_n = \lim _ {n \rightarrow \infty} na = \infty</script>  级数发散</li><li>当$q = -1$时：<script type="math/tex; mode=display">      \sum _ { n = 0 } ^ \infty a q ^ n= a - a + a - a + a - \cdots</script><script type="math/tex; mode=display">      S_n = \begin{cases}          0 & n \text { is even} \\          a & n \text { is odd}      \end{cases} \Rightarrow \lim _ {n \rightarrow \infty} S_n = DNE</script>  级数发散</li><li>当$|q| &gt; 1$时：<script type="math/tex; mode=display">      \lim _ { n \rightarrow \infty } S_n = \infty</script>  级数发散</li></ul><p>综上所述：</p><ul><li>$|q| &lt; 1$时，几何级数$\displaystyle \sum_{n = 0} ^ \infty aq ^ n$收敛，其和为$\displaystyle\frac a {1 - q}$。</li><li>$|q| ≥ 1$时，几何级数$\displaystyle \sum_{n = 0} ^ \infty aq ^ n$发散。</li></ul><h1 id="调和级数-Harmonic-Series"><a href="#调和级数-Harmonic-Series" class="headerlink" title="调和级数 - Harmonic Series"></a>调和级数 - Harmonic Series</h1><h2 id="调和级数的定义"><a href="#调和级数的定义" class="headerlink" title="调和级数的定义"></a>调和级数的定义</h2><script type="math/tex; mode=display">    \sum _ { n = 1 } ^ \infty \frac 1 n = 1 + \frac 1 2 + \frac 1 3 + \frac 1 4 + \cdots</script><h2 id="调和级数的敛散性"><a href="#调和级数的敛散性" class="headerlink" title="调和级数的敛散性"></a>调和级数的敛散性</h2><p>有图像易得：调和级数$\displaystyle \sum _ { n = 1 } ^ \infty \frac 1 n$为广义积分$\displaystyle \int _ 1 ^ \infty\frac 1 x \mathrm dx$的Left-Riemann Sum，且</p><script type="math/tex; mode=display">    \begin{aligned}        \sum _ {n = 1} ^ \infty \frac 1 n &> \int _ 1 ^ \infty \frac 1 x \mathrm dx \\        &=\ln x \Big |_1 ^ {\infty} \rightarrow \infty    \end{aligned}</script><p>故调和级数发散。</p><h1 id="p-级数-p-Series"><a href="#p-级数-p-Series" class="headerlink" title="$p$级数 - $p$-Series"></a>$p$级数 - $p$-Series</h1><h2 id="p-级数的定义"><a href="#p-级数的定义" class="headerlink" title="$p$级数的定义"></a>$p$级数的定义</h2><script type="math/tex; mode=display">    \sum _ {n = 1} ^ \infty \frac 1 {n ^ p} = 1 + \frac 1 {2 ^ p} + \frac 1 {3 ^ p} + \cdots + \frac 1 {n ^ p} + \cdots,  (p > 0)</script><h2 id="p-级数的敛散性"><a href="#p-级数的敛散性" class="headerlink" title="$p$级数的敛散性"></a>$p$级数的敛散性</h2><ul><li>当$p ≤ 1$时，根据比较审敛法，因为$\displaystyle\frac 1 {n ^ p} ≥ \frac 1 n$，由于调和级数发散，故$p$级数也发散。</li><li>当$p &gt; 1$时，$p$级数收敛，证明略。</li></ul><h1 id="交错级数审敛法-The-Alernating-Series-Test-for-Convergence"><a href="#交错级数审敛法-The-Alernating-Series-Test-for-Convergence" class="headerlink" title="交错级数审敛法 - The Alernating Series Test for Convergence"></a>交错级数审敛法 - The Alernating Series Test for Convergence</h1><p><strong>莱布尼兹判别法</strong>：如果交错级数满足条件：</p><ol><li>$u_n ≥ u_{n + 1}, (n = 1, 2, 3, \cdots)$</li><li>$\lim_{n \rightarrow \infty} u_n = 0$</li></ol><p>则交错级数收敛，且其和$S ≤ u_1$，用它前$n$项的部分和$S_n$作为级数的和$S$的近似值时，误差$|S_n - S| ≤ u_{n + 1}$</p><h1 id="比值判别法-Ratio-Test-for-Convergence"><a href="#比值判别法-Ratio-Test-for-Convergence" class="headerlink" title="比值判别法 - Ratio Test for Convergence"></a>比值判别法 - Ratio Test for Convergence</h1><p>设有正项级数$\displaystyle\sum_{n = 1} ^ \infty u_n$，如果$\displaystyle\lim _{n \rightarrow \infty} \frac {u_{n + 1}}{u_n} = l$，则</p><ul><li>当$l &lt; 1$时，级数收敛</li><li>当$l &gt; 1$（或$l \rightarrow \infty$）时，级数发散</li><li>当$l = 1$时，级数可能收敛也可能发散</li></ul><h1 id="用泰勒多项式来近似函数"><a href="#用泰勒多项式来近似函数" class="headerlink" title="用泰勒多项式来近似函数"></a>用泰勒多项式来近似函数</h1><p>The function $f(x)$ at the point $x = a$ is approximated by a <em>Taylor polynomial</em> $P_n(x)$ of order $n$: </p><script type="math/tex; mode=display">    f(x) \approx P_n(x) = f(a) + f'(a)(x - a) + \frac {f''(a)}{2!}(x - a) ^ 2 + \cdots + \frac {f^{(n)}(a)}{n!}(x - a) ^ n</script><p>麦克劳林多项式就是函数在$x=0$的泰勒展开。</p><p>用$f(x)$在$x = 0$的切线去近似：</p><script type="math/tex; mode=display">f(x) \approx P_1(x) = f(0) + f'(0) x</script><h1 id="绝对收敛和条件收敛"><a href="#绝对收敛和条件收敛" class="headerlink" title="绝对收敛和条件收敛"></a>绝对收敛和条件收敛</h1><ol><li>若$\displaystyle \sum_{i = 1} ^ \infty u_i$收敛，且$\displaystyle \sum_{i = 1} ^ \infty |u_i|$也收敛，则级数$\displaystyle \sum _ {i = 1} ^ \infty u _ 1$绝对收敛。</li><li>若$\displaystyle \sum_{i = 1} ^ \infty u_i$收敛，且$\displaystyle \sum_{i = 1} ^ \infty |u_i|$不收敛，则级数$\displaystyle \sum _ {i = 1} ^ \infty u _ 1$条件收敛。</li><li>如果绝对收敛则一定条件收敛，条件收敛不一定绝对收敛。</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;考试在即，但却还没学完，心中诚惶诚恐，遂，学。&lt;/p&gt;
&lt;h1 id=&quot;几何级数-Geometric-Series&quot;&gt;&lt;a href=&quot;#几</summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>200421-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-21T05:32:05.000Z</published>
    <updated>2020-09-22T09:41:22.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-21-化学课"><a href="#4-21-化学课" class="headerlink" title="4/21 化学课"></a>4/21 化学课</h1><h2 id="催化剂对化学反应速率影响的实验研究"><a href="#催化剂对化学反应速率影响的实验研究" class="headerlink" title="催化剂对化学反应速率影响的实验研究"></a>催化剂对化学反应速率影响的实验研究</h2><ol><li>研究对象：$\ce {2H2O2 -&gt;[MnO2]2H2O + O2 ^}$</li><li>实验：在双氧水中加入二氧化锰</li><li>现象：没有加入$\ce {MnO2}$粉末的双氧水试管中只有少量气泡出现,不能使带火星的木条复燃;加入$\ce{MnO2}$粉末后试管内产生大量气泡,带火星的木条复燃</li><li>结论：催化剂可以有效地提高化学反应速率</li></ol><script type="math/tex; mode=display">催化剂与生活 \begin{cases}现代化学工业生产: \ce {2SO2 + O2 <=>[V2O5][\Delta] 2SO3} \\生物体中化学反应 \\环境保护催化剂\end{cases}</script><img src="/2020/04/21/200421-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/1.jpg" class=""><p>结论：</p><ul><li><strong>加入催化剂改变了反应的途径,降低了反应所需要的能量,从而加快化学反应速率。</strong></li><li><strong>加入催化剂不会改变该化学反应的热效应。</strong></li></ul><script type="math/tex; mode=display">催化剂的基本知识 \begin{cases}    催化剂的研究与开发 \\ 催化剂具有选择性 \\ 催化剂的活性温度 \\ 催化剂中毒\end{cases}</script><h2 id="压强对化学反应速率的影响"><a href="#压强对化学反应速率的影响" class="headerlink" title="压强对化学反应速率的影响"></a>压强对化学反应速率的影响</h2><p>结论：<strong>对于有气态物质参加的反应,在其它条件不变时增大压强,化学反应速率加快;减小压强,化学反应速率减慢。</strong></p><div class="note warning">如果参加反应的物质全部是固体、液体或溶液时,改变压强对它们的反应速率无影响。</div><div class="note warning">改变压强一般指改变体积。如果是充入其他气体，对气体浓度没有影响，所以不会有什么影响。</div><h2 id="外界因素对化学反应速率的影响"><a href="#外界因素对化学反应速率的影响" class="headerlink" title="外界因素对化学反应速率的影响"></a>外界因素对化学反应速率的影响</h2><img src="/2020/04/21/200421-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/2.jpg" class=""><h2 id="应用"><a href="#应用" class="headerlink" title="应用"></a>应用</h2><img src="/2020/04/21/200421-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/3.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-21-化学课&quot;&gt;&lt;a href=&quot;#4-21-化学课&quot; class=&quot;headerlink&quot; title=&quot;4/21 化学课&quot;&gt;&lt;/a&gt;4/21 化学课&lt;/h1&gt;&lt;h2 id=&quot;催化剂对化学反应速率影响的实验研究&quot;&gt;&lt;a href=&quot;#催化剂对化学反应速率影响</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200421-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-21T03:37:55.000Z</published>
    <updated>2020-04-21T06:52:18.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-21-地理课-世界主要工业区"><a href="#4-21-地理课-世界主要工业区" class="headerlink" title="4/21 地理课 - 世界主要工业区"></a>4/21 地理课 - 世界主要工业区</h1><h2 id="北美工业区"><a href="#北美工业区" class="headerlink" title="北美工业区"></a>北美工业区</h2><ul><li>主要分布区：美国东北部和加拿大东南部</li><li>区位条件：<ol><li>丰富的煤、铁及水资源<li>交通便利<li>城市人口众多，市场广阔<li>农产品供应充足</ol></li><li>资料:底特律始建于1701年,1830年后工业稳步成长,1903年世界第一家汽车公司建立,此后迅速发展成为世界著名的“汽车城市”。20世纪70年代受到石油危机重创,加上日本、德国等国汽车生产的冲击,开始走向衰落20世纪90年代以后努力发展第三产业,但未能扭转经济衰退趋势。2007年房地产市场崩溃,2013年2月19日底特律市宣布已经陷入财政危机.</li><li>衰退原因：<ol><li>汽车产业为主,工业结构单一;</li><li>石油危机;</li><li>日本等国家汽车工业的冲击;</li><li>高新技术产业的冲击;</li><li>环境污染严重;</li><li>房地产崩溃。</li></ol></li><li>扩展方向：国际市场竞争激烈,许多工业部门的优势逐渐降低。工业地域由美国东北部地区向南部和西部扩展。</li><li>向南部和西部迁移的原因：<ol><li>东北地区的工业衰退,失业率升高;</li><li>西部和南部建立了许多新兴的工业部门</li><li>南部和西部环境优美,环境污染少。</li></ol></li></ul><h2 id="西欧工业区"><a href="#西欧工业区" class="headerlink" title="西欧工业区"></a>西欧工业区</h2><ul><li>主要分布区：包括英国、法国、德国、荷兰、比例式、意大利北部等主要工业区</li><li>区位条件：<ol><li>煤、铁资源丰富;</li><li>交通便利;</li><li>劳动力素质高;</li><li>经济基础雄厚。</li></ol></li><li>主要特点：是现代工业的发源地,核能、航空等技术密集型工业最为发达,钢铁、机床、船舶、电力等产品产量居世界前列。</li><li>扩展方向：工业地域逐渐从内陆向沿海地区发展。</li></ul><h2 id="东欧工业区"><a href="#东欧工业区" class="headerlink" title="东欧工业区"></a>东欧工业区</h2><ul><li>主要分布区：包括俄罗斯、乌克兰、捷克、波兰等的主要工业区。</li><li>区位条件：<ol><li>丰富的资源</li><li>基础工业实力雄厚</li></ol></li><li>主要特点：属资源密集型重工业地区,工业多布局在靠近原料和燃料产地的内陆。</li><li>发展方向：电子、宇航等新兴工业发展较快,工业地域逐渐由乌拉尔山以西的工业区向以东的地区扩展。</li><li>向东发展的原因：乌拉尔山以东地区的资源储量占全国总量的80%以上,但开采利用较少。随着欧洲部分自然资源的枯竭和工业区的“过饱和”,为了充分利用东部地区的资源,工业重心有向东转移的趋势</li></ul><h2 id="日本太平洋沿岸工业区"><a href="#日本太平洋沿岸工业区" class="headerlink" title="日本太平洋沿岸工业区"></a>日本太平洋沿岸工业区</h2><ul><li>主要分布区：分布在日本太平洋沿岸地区</li><li>高度集中在太平洋沿岸的原因<ol><li>日本国内发展工业所需的资源贫乏,绝大多数依靠海外进口;</li><li>日本国内市场有限,产品需要大量销往海外;</li><li>日本是岛国,海岸线漫长,多优良港湾;</li><li>资源来源主要面向太平洋一侧。</li></ol></li><li>区位条件：<ol><li>劳动力素质高</li><li>科技力量强</li><li>海运便利</li></ol></li><li>主要特点：加工贸易型,有世界上著名的临海工业带。</li><li>发展方向：技术密集型产业发展迅速,工业地域分布有明显的分散趋势。</li></ul><h2 id="亚洲东部沿海工业区"><a href="#亚洲东部沿海工业区" class="headerlink" title="亚洲东部沿海工业区"></a>亚洲东部沿海工业区</h2><ul><li>主要分布区：北起韩国东南沿海和中国东部沿海,向南延伸到东南亚一些国家。</li><li>区位条件：<ol><li>劳动力资源丰富且价格低;</li><li>基础设施逐步完善;</li><li>土地价格便宜;</li><li>国家优惠政策支持;</li><li>市场广阔。</li></ol></li><li>发展方向：由劳动密集型转向技术密集型</li><li>转型原因：随着区域经济的发展,劳动力成本增加,劳动密集型工业成本优势丧失,这里的劳动密集型产业转向更具成本优势的区域;劳动力素质的提高使工业向技术密集型转型成为可能。</li><li>中国东部沿海工业基地<ul><li>辽中南：著名的重工业基地<ul><li>优势区位条件:<ol><li>丰富的矿产资源;</li><li>便利的海陆交通;</li><li>雄厚的基础;</li><li>振兴东北政策。</li></ol></li><li>特点:重工业基地。</li><li>存在问题: 能源枯竭、污染严重、产品单一、技术不足、水源不足。</li></ul></li><li>京津唐：北方最大的综合性工业基地<ul><li>优势区位条件<ol><li>丰富矿产资源;</li><li>交通便利;</li><li>农业基础好;</li><li>科研机构和高校依托;</li><li>京津冀协同发展政策。</li></ol></li><li>特点:综合型工业基地。</li><li>存在问题:水源不足、环境污染严重。</li></ul></li><li>沪宁杭：全国最大的综合性工业基地<ul><li>优势区位条件<ol><li>交通便利;</li><li>经济活跃;</li><li>工农业基础雄厚;</li><li>技术力量雄厚;</li><li>长三角一体化政策</li></ol></li><li>特点:综合型工业基地。</li><li>存在问题:能源、矿产资源缺乏。</li></ul></li><li>珠江三角洲：轻工业为主的综合性工业基地<ul><li>优势区位条件<ol><li>邻近港澳,靠近东南亚;</li><li>劳动力资源丰富;</li><li>交通便利,基础设施完善;</li><li>开放意识,政策支持;</li><li>投资环境好;</li><li>水资源丰富。</li></ol></li><li>特点:轻工业为主的综合型工业基地。</li><li>存在问题:能源、矿产资源不足。</li></ul></li></ul></li></ul><img src="/2020/04/21/200421-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-21-地理课-世界主要工业区&quot;&gt;&lt;a href=&quot;#4-21-地理课-世界主要工业区&quot; class=&quot;headerlink&quot; title=&quot;4/21 地理课 - 世界主要工业区&quot;&gt;&lt;/a&gt;4/21 地理课 - 世界主要工业区&lt;/h1&gt;&lt;h2 id=&quot;北美工业区</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200421-市物理课</title>
    <link href="http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/21/200421-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-21T03:12:18.000Z</published>
    <updated>2020-04-21T03:26:07.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-21-物理课-功-2"><a href="#4-21-物理课-功-2" class="headerlink" title="4/21 物理课 - 功 (2)"></a>4/21 物理课 - 功 (2)</h1><ol><li>合力做功：<ul><li>分别求出每个力做的功，再求代数和<script type="math/tex; mode=display">W_合 = \sum_i W_i</script></li><li>先求合力，再求功<script type="math/tex; mode=display">W_合 = \vec F_合 \cdot \vec s = F_合s\cos \theta</script></li></ul></li><li>图像表示功的大小<br>$F-s$图中表示$F$与关系的曲线和坐标轴所包围的面积表示功的大小。(其中$F$与$s$沿同一方向)</li><li>变力做功<script type="math/tex; mode=display">\mathrm dA = \boldsymbol{F}\cdot \mathrm d  \boldsymbol{r} = |\boldsymbol{F}||\mathrm d\boldsymbol{r}|\cos \theta = F\mathrm ds\cos\theta</script><script type="math/tex; mode=display">A = \int \mathrm dA = \int_a^b\boldsymbol{F}\cdot \mathrm d\boldsymbol{r} = \int_a^b F\cos\theta \mathrm ds</script></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-21-物理课-功-2&quot;&gt;&lt;a href=&quot;#4-21-物理课-功-2&quot; class=&quot;headerlink&quot; title=&quot;4/21 物理课 - 功 (2)&quot;&gt;&lt;/a&gt;4/21 物理课 - 功 (2)&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;合力做功：&lt;ul&gt;
&lt;li&gt;分别</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>AP CSA 2020</title>
    <link href="http://gyrojeff.moe/2020/04/19/AP-CSA-2020/"/>
    <id>http://gyrojeff.moe/2020/04/19/AP-CSA-2020/</id>
    <published>2020-04-19T09:27:58.000Z</published>
    <updated>2020-04-19T09:28:19.000Z</updated>
    
    <content type="html"><![CDATA[<table class="table" id="cbTable_21">            <thead>              <tr>                <th colspan="3">Computer Science A</th>              </tr>            </thead>            <tbody>              <tr>                <td style="width: 30%"><p><strong>Test date and time</strong></p></td>                <td colspan="2"><p><strong>Exam Date: May 15</strong></p>                  <ul>                    <li>Hawaii Time: 10 a.m.</li>                    <li>Alaska Time: 12 p.m.</li>                    <li>Pacific Time: 1 p.m.</li>                    <li>Mountain Time: 2 p.m.</li>                    <li>Central Time: 3 p.m.</li>                    <li>Eastern Time: 4 p.m.</li>                  </ul></td>              </tr>              <tr>                <td><p><strong>Exam timing</strong></p></td>                <td colspan="2"><p>Students will have 25 minutes to read and respond to Question 1, and then 5 minutes to upload their response. After uploading the response to Question 1, students will have 15 minutes to respond to Question 2, with 5 additional minutes to upload their response to Question 2. Once their response to Question 1 has been submitted, they cannot go back to it.</p></td>              </tr>              <tr>                <td><p><strong>Questions</strong></p></td>                <td style="width: 35%"><p>Question 1 (25 mins.)</p></td>                <td><p>Question 2 (15 mins.)</p></td>              </tr>              <tr>                <td><p><strong>% of exam weight (rounded)</strong></p></td>                <td><p>65%</p></td>                <td><p>35%</p></td>              </tr>              <tr>                <td><p><strong>Question name</strong></p></td>                <td><p>Array / ArrayList</p></td>                <td><p>Methods and Control Structures</p></td>              </tr>              <tr>                <td><p><strong>Question description</strong></p></td>                <td><p>Question 1 assesses students’ ability to do the following:</p>                  <ul>                    <li>Write program code to satisfy method specifications using expressions, conditional statements, and iterative statements</li>                    <li>Write program code to create, traverse, and manipulate elements in 1D array or ArrayList objects </li>                  </ul></td>                <td><p>Question 2 assesses students’ ability to do the following:</p>                  <ul>                    <li>Write program code to create objects of a class and call methods</li>                    <li>Write program code to satisfy method specifications using expressions, conditional statements, and iterative statements</li>                  </ul></td>              </tr>              <tr>                <td><p><strong>Corresponding free-response question (FRQ) type in the course and exam description binder</strong></p></td>                <td><p>FRQ 3, with modifications to include an open-ended question part.</p></td>                <td><p>FRQ 1, with modifications to include an open-ended question part.</p></td>              </tr>              <tr>                <td><p><strong>Units eligible for 2020 exam</strong></p></td>                <td colspan="2"><p>Units 1–7</p></td>              </tr>              <tr>                <td><p><strong>Units not included in 2020 exam</strong></p></td>                <td colspan="2"><p>Units 8–10</p></td>              </tr>              <tr>                <td><p><strong>Other course-specific info</strong></p></td>                <td colspan="2"><p>An Interactive Development Environment (IDE) or compiler is <u>not</u> required for the 2020 AP Computer Science A Exam, and students will not have an advantage if they use one.  However, students may use an IDE or compiler if they choose.</p></td>              </tr>              <tr>                <td><p><strong>Make-up test date and time</strong></p></td>                <td colspan="2"><p><strong>Date: June 3</strong></p>                  <ul>                    <li>Hawaii Time: 8 a.m.</li>                    <li>Alaska Time: 10 a.m.</li>                    <li>Pacific Time: 11 a.m.</li>                    <li>Mountain Time: 12 p.m.</li>                    <li>Central Time: 1 p.m.</li>                    <li>Eastern Time: 2 p.m.</li>                  </ul></td>              </tr>            </tbody>          </table>]]></content>
    
    
      
      
    <summary type="html">&lt;table class=&quot;table&quot; id=&quot;cbTable_21&quot;&gt;
            &lt;thead&gt;
              &lt;tr&gt;
                &lt;th colspan=&quot;3&quot;&gt;Computer Science A&lt;/th&gt;
       </summary>
      
    
    
    
    
  </entry>
  
  <entry>
    <title>AP Calculus - 考前学的微分方程</title>
    <link href="http://gyrojeff.moe/2020/04/18/AP-Calculus-%E8%80%83%E5%89%8D%E5%AD%A6%E7%9A%84%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B/"/>
    <id>http://gyrojeff.moe/2020/04/18/AP-Calculus-%E8%80%83%E5%89%8D%E5%AD%A6%E7%9A%84%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B/</id>
    <published>2020-04-18T08:40:59.000Z</published>
    <updated>2020-09-22T09:41:24.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>本来因该在去年暑假就把所有东西全部自学完的，但是那个时候太忙太懒，于是乎心理安慰自己学完了。但是，马上考试了，不学就卒，遂花了两小时学。</p><h1 id="微分方程"><a href="#微分方程" class="headerlink" title="微分方程"></a>微分方程</h1><p>有时我们需要通过未知函数及其导数所满足的关系式去求未知函数，这种关系是就是微分方程。例如：</p><script type="math/tex; mode=display">\frac {\mathrm dy}{\mathrm dx} = 3x^2 + y</script><p>但上面这个方程在这里不做讨论，因为不考。</p><h1 id="通解、特解"><a href="#通解、特解" class="headerlink" title="通解、特解"></a>通解、特解</h1><p>微分方程的解有两种形式，一种解是含有任意常数且任意常数的个数正好与方程的阶数相同，这样的解成为微分方程的通解（General Solution）。另一种解中不含任意常数，称为特解（Specific Solution），通常可按照问题所给的条件从通解中确定任意常数的待定值来求特解。</p><div class="note success">注：在考虑通解中，并不需要考虑其是否处处可微（比如一些隐函数，圆的方程），但是特解需要考虑。例如：通解可以是$$x^2 + y^2 = C$$但特解要写成：（其中$C$取$5$）$$y = \pm \sqrt {5 - x ^ 2}$$</div><h1 id="解微分方程"><a href="#解微分方程" class="headerlink" title="解微分方程"></a>解微分方程</h1><p>在这里，我们只讨论形如</p><script type="math/tex; mode=display">    \frac {\mathrm dy}{\mathrm dx} = f(x) g(y)</script><p>或</p><script type="math/tex; mode=display">    M_1(x)M_2(y)\mathrm d x + N_1(x)N_2(y) \mathrm d y = 0</script><p>其中$f,g,M_1,M_2,N_1,N_2$皆在考虑的范围内连续。这种形式的方程，我们称其为 <strong>可分离变量的一阶微分方程</strong>，因为其可以转换为</p><script type="math/tex; mode=display">\frac 1 {g(y)} \mathrm dy = f(x) \mathrm dx</script><p>的形式。</p><p>求解的方法即为对两边分别积分：</p><script type="math/tex; mode=display">\int \frac {\mathrm dy}{g(y)} = \int f(x) \mathrm dx</script><h1 id="斜率场-Slope-Fields"><a href="#斜率场-Slope-Fields" class="headerlink" title="斜率场 - Slope Fields"></a>斜率场 - Slope Fields</h1><div class="note success no-icon">            <p>Slope field is a set of little line segments in the coordinate system representing the slope of tangent lines for the solution curves of a given differential equation. Moreover, it is a graphical tool intended to find out the solution to the differential equations, generally at first order.</p><p>斜率场(slope field)是坐标系当中一组小的线段，代表的是一个微分方程(differential equation)的函数解(solutions)的图像(solution curves)的图像的切线的斜率。</p><p>作者：commontolerance<br>链接：<a href="https://www.zhihu.com/question/53824255/answer/1029489348">https://www.zhihu.com/question/53824255/answer/1029489348</a><br>来源：知乎<br>著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</p>          </div><p>解题方法总结：</p><ul><li>关注某些特殊点，例如$(0, 0), (x, 0), (0, y)$</li><li>关注$x$，$y$之间的关系</li><li>观察$x$，$y$是否独立，比方说图像是否可以直接水平平移或者竖直平移</li><li>观察变化趋势</li></ul><h1 id="欧拉方法-Euler’s-Method"><a href="#欧拉方法-Euler’s-Method" class="headerlink" title="欧拉方法 - Euler’s Method"></a>欧拉方法 - Euler’s Method</h1><p>总结：使用点斜率和一个Initial Point来估算原函数。例如一个函数$f(x)$，其导数为$f’(x)$。已知$(x_0, y_0)$在其图像上，那么以$\Delta x$为步长，可以估算出原函数的几个点：</p><script type="math/tex; mode=display">\begin{aligned}    &(x_1, y_1') = (x_0 + \Delta x, ~y_0 + f'(x_0) \Delta x) \\    &(x_2, y_2') = (x_0 + 2\Delta x, ~y_1' + f'(x_1) \Delta x) \\    &\cdots\end{aligned}</script><h1 id="指数增长和衰减-Exponential-Growth-amp-Decay"><a href="#指数增长和衰减-Exponential-Growth-amp-Decay" class="headerlink" title="指数增长和衰减 - Exponential Growth &amp; Decay"></a>指数增长和衰减 - Exponential Growth &amp; Decay</h1><p>满足</p><script type="math/tex; mode=display">    \frac {\mathrm dy}{\mathrm dx} = k\cdot y, ~\text {in which }k \text { is a constant}</script><p>的函数，就符合指数型地增长或衰减。其中，当$k \in \mathbb R^+$时为Exponential Growth，$k \in \mathbb R^-$时为Exponential Decay。</p><p>之所以称其为指数型增长，是因为原函数</p><script type="math/tex; mode=display">    y = e^{Ckx} = C_1e^{kx}, ~C_1 \in \mathbb R^+</script><p>特点：</p><script type="math/tex; mode=display">\begin{aligned}    k > 0 : t \rightarrow \infty, y \rightarrow \infty \\     k < 0 : t \rightarrow \infty, y \rightarrow 0\end{aligned}</script><h1 id="有限增长-Restricted-Growth"><a href="#有限增长-Restricted-Growth" class="headerlink" title="有限增长 - Restricted Growth"></a>有限增长 - Restricted Growth</h1><p>满足</p><script type="math/tex; mode=display">    f'(t) = k[A - f(t)], ~k,A \in \mathbb R^+</script><p>的函数，符合Restricted Growth，其原函数为：</p><script type="math/tex; mode=display">    f(t) = A \pm Ce^{-kt},~C \in \mathbb R^+</script><p>特点：</p><script type="math/tex; mode=display">\begin{aligned}    &f(t) = A - Ce^{-kt}, ~f(0) = A - c,~\lim _ {t \rightarrow \infty} f(t)  = A  \\    &f(t) = A + Ce^{-kt}, ~f(0) = A + c,~\lim _ {t \rightarrow \infty} f(t)  = A\end{aligned}</script><h1 id="对数增长-Logistic-Growth"><a href="#对数增长-Logistic-Growth" class="headerlink" title="对数增长 - Logistic Growth"></a>对数增长 - Logistic Growth</h1><p>满足</p><script type="math/tex; mode=display">y' = ky(A-y), ~k,A \in \mathrm R^+</script><p>的函数符合Logistic Growth。原函数为：</p><script type="math/tex; mode=display">y = \frac {A} {1 + Ce^{-Akt}}, ~C\in \mathbb R^+</script><p>特点：</p><script type="math/tex; mode=display">\begin{aligned}    y = \frac A 2 \rightarrow y'' = 0 \\    y < \frac A 2 \rightarrow y'' > 0 \\     y > \frac A 2 \rightarrow y'' < 0 \\    x \rightarrow \infty, y \rightarrow A \\    x \rightarrow -\infty, y \rightarrow 0 \\    y |_{x = 0} = \frac A {1 + C} \end{aligned}</script>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;本来因该在去年暑假就把所有东西全部自学完的，但是那个时候太忙太懒，于是乎心理安慰自己学完了。但是，马上考试了，不学就卒，遂花了两小时学。&lt;/</summary>
      
    
    
    
    
    <category term="Calculus" scheme="http://gyrojeff.moe/tags/Calculus/"/>
    
  </entry>
  
  <entry>
    <title>200417-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/18/200417-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/18/200417-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-18T04:51:17.000Z</published>
    <updated>2020-09-22T09:41:21.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-17-地理课-工业区位的变化"><a href="#4-17-地理课-工业区位的变化" class="headerlink" title="4/17 地理课 - 工业区位的变化"></a>4/17 地理课 - 工业区位的变化</h1><h2 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h2><p>Q: 思考:为什么同为家具厂,主导区位因素却发生了改变?</p><p>A: 家具生产的产品由整体家具向组装家具的变革,极大地降低了产品的运输成本,使得家具厂的区位选择由邻近市场转为邻近原材料供应地。</p><p>Q: 思考:为什么同为乳产品加工厂,主导区位因素却发生了改变?</p><p>A: 保鲜、包装、冷藏运输的发展,使得一些本需要邻近市场布局的工厂,转而邻近优质原料地。</p><p><strong><em><font color='red'> 结论：随着社会生产和科学技术的进步,工业区位的影响因素及其影响力在不断变化,工业区位也在发生变化 </font></em></strong></p><h2 id="科学技术的发展对工业区位的影响"><a href="#科学技术的发展对工业区位的影响" class="headerlink" title="科学技术的发展对工业区位的影响"></a>科学技术的发展对工业区位的影响</h2><ol><li>交通运输能力的提高<ul><li>19世纪初船舶运输为主 $\rightarrow$ 大多数工业企业分布于沿河沿海地区。</li><li>19世纪后半叶铁路运输为主 $\rightarrow$ 大多数工业企业分布于铁路沿线和铁路枢纽地区。</li><li>二次大战后船舶吨位增加集装箱运输的广泛采用 $\rightarrow$ 大多数工业企业分布于沿河、沿湖、沿海地区。</li></ul></li><li>自动化水平的提高<ul><li>材料：我国20世纪50年代扩建的鞍山钢铁企业,拥有职工50万人;70年代末引进国外先进技术、设备等兴建的宝山钢铁企业,规模与鞍钢差不多,但只需职工3万人左右。</li><li>结论：<ul><li><strong><em><font color='red'> 对劳动力数量要求减少 </font></em></strong></li><li><strong><em><font color='red'> 对劳动力素质要求提高 </font></em></strong></li></ul></li></ul></li><li>原料、能源的利用率提高<ul><li>材料：在1800年前后,每炼1吨钢需要消耗4吨煤炭,2吨铁矿石;1900年随着原料、能源利用羍的提高,每炼1吨钢只需要消耗2吨煤炭,1.8吨铁矿石;1985年后,每炼1吨钢所需要的煤炭和铁矿石都明显下降。</li><li>19世纪<ul><li>煤炭炼铁时代钢铁厂靠近大煤田如:德国鲁尔区、英国伯明翰</li><li><strong><em><font color='red'> 能源主导型 </font></em></strong></li></ul></li><li>20世纪<ul><li>炼铁需煤量下降钢铁厂靠近大铁矿如:中国鞍钢</li><li><strong><em><font color='red'> 原料主导型 </font></em></strong></li></ul></li><li>二战后<ul><li>巨型运输船出现钢铁厂靠近沿海消费区或交通便利区如:中国宝钢、日本福山等</li><li><strong><em><font color='red'> 市场主导型 </font></em></strong></li></ul></li><li>中国钢铁工业区位变化<ul><li>辽宁鞍钢<ul><li>位于原材料产地，劳动力规模达</li><li><strong><em><font color='red'> 原料主导型 </font></em></strong></li></ul></li><li>上海宝钢<ul><li>靠近市场，交通便利</li><li><strong><em><font color='red'> 市场主导型 </font></em></strong></li></ul></li><li>广东湛江<ul><li>靠近市场，交通便利</li><li><strong><em><font color='red'> 市场主导型 </font></em></strong></li></ul></li></ul></li></ul></li><li>信息互通能力提高<ul><li>材料：这是一家依托互联网的服装公司的生产、销售流程图。这家服装公司位于上海的一栋写字楼内,既没有自己的制衣工厂,也没有自己的销售门店,服装公司不接触任何一件衣服,就将设计的服装卖给了消费者。</li><li>结论：这就是在发达的物流支撑下,出现完全依托互联网的新型工业企业,这些企业需要与客户和相关企业保持即时的联系,区位选择更看重 <strong><em><font color='red'> 信息的通达性 </font></em></strong></li></ul></li></ol><script type="math/tex; mode=display">    科学技术的发展 \begin{cases}        &\begin{aligned}        & \longrightarrow 交通运输能力提高 \\         &\longrightarrow 资源利用率的提高            \end{aligned} \longrightarrow \begin{aligned}            &对原料和燃料的依赖逐渐下降 \\ &市场的影响力在逐渐加强        \end{aligned} \\        \\         &\longrightarrow 自动化水平的提高 \longrightarrow \begin{aligned}            &对劳动力数量的依赖下降 \\ &对劳动力素质的要求提高        \end{aligned}\\         \\         &\longrightarrow 信息互通能力的提高 \longrightarrow 对信息通达度的依赖提高    \end{cases}</script><h2 id="政策因素的变化对工业区位的影响"><a href="#政策因素的变化对工业区位的影响" class="headerlink" title="政策因素的变化对工业区位的影响"></a>政策因素的变化对工业区位的影响</h2><ul><li>20世纪50年代我国为了<strong>国防安全</strong>需要在内地兴建大型的工业基地。</li><li>20世纪80年代以来我国<strong>改革开放</strong>的政策使沿海地区工业迅速发展。</li><li>20世纪末我国实施<strong>西部大开发</strong>战略,以优惠政策吸引一些工业部门落户西部,借此缩小区域经济水平的差异。</li></ul><h2 id="环境因素的变化对工业区位的影响"><a href="#环境因素的变化对工业区位的影响" class="headerlink" title="环境因素的变化对工业区位的影响"></a>环境因素的变化对工业区位的影响</h2><ul><li><strong>环境标准已经成为影响工业区位的重要因素</strong></li><li>材料：首钢始建于1919年,选址在北京市西郊。进入21世纪,首钢的发展与首都环境以及产业结构的矛盾日益突出。2005年3月,首钢搬迁到曹妃甸。曹妃甸位于河北省唐山市,濒临渤海湾,是一个天然良港。</li><li>影响首钢迁址的首要因素是保护北京市的环境，减轻首都的污染</li><li>曹妃甸钢铁联合企业以清洁生产为目标,努力实现废水、废气及固体废物的最低排放,余能充分利用,可回收物循环使用。</li></ul><script type="math/tex; mode=display">\colorbox{red}{科学技术的发展是区位变化最根本的原因}</script>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-17-地理课-工业区位的变化&quot;&gt;&lt;a href=&quot;#4-17-地理课-工业区位的变化&quot; class=&quot;headerlink&quot; title=&quot;4/17 地理课 - 工业区位的变化&quot;&gt;&lt;/a&gt;4/17 地理课 - 工业区位的变化&lt;/h1&gt;&lt;h2 id=&quot;绪论&quot;&gt;&lt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>AP Macroeconomics - 考前学习的懒人日记</title>
    <link href="http://gyrojeff.moe/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/"/>
    <id>http://gyrojeff.moe/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/</id>
    <published>2020-04-17T16:29:35.000Z</published>
    <updated>2021-01-14T06:19:40.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="关于生产函数"><a href="#关于生产函数" class="headerlink" title="关于生产函数"></a>关于生产函数</h1><ul><li>经济学家经常使用生产函数来描述投入物数量和产品数量之间的关系。</li><li>假设$Y$表示产量, $L$表示劳动数量, $K$表示实物资本的数量, $H$表示人力资本的数量, $N$表示自然资源的数量。</li><li>生产函数: $Y=AF(L,K,H,N)$</li><li>$A$是个变量, 它反映了可用的生产技术。随着技术进步, $A$的值变大,因此技术进步使得既定投入组合能生产更多的产品。</li></ul><div class="note primary">生产力的衡量：除在每个人人头上的生产力多少。</div><script type="math/tex; mode=display">    \frac Y L = AF(1, \frac K L, \frac H L, \frac N L)</script><h1 id="失业率-Unemployment"><a href="#失业率-Unemployment" class="headerlink" title="失业率 - Unemployment"></a>失业率 - Unemployment</h1><h2 id="成年人分为三类"><a href="#成年人分为三类" class="headerlink" title="成年人分为三类"></a>成年人分为三类</h2><ol><li>Employed: <ul><li>This category includes those who (任意满足)<ul><li>worked as paid employees</li><li>worked in their own business</li><li>worked as unpaid workers in a family members business. </li></ul></li><li>Both full-time and part-time workers are counted.</li><li>This category also includes those who were not working but who had jobs from which they were temporarily absent because of, for example, vacation illness, or bad weather</li></ul></li></ol><div class="note primary">人话：自己是老板、给别人打工、家族企业：都算是Employed。全职和简直都算。并且生病、恶劣天气、等不影响。</div><ol><li><p>Unemployeed</p><ul><li>This category includes those who (都要满足)<ol><li>were not employed</li><li>were available for work</li><li>and had tried to find employment during the previous four weeks</li></ol></li><li>It also includes those waiting to be recalled to a job from which they had been laid off.</li><li>discouraged workers 不记录（放弃继续找工作的人）<div class="note primary">人话：Unemployed要有三个条件：不是Employed，能够去工作（肢体健全、学生不行），统计前四周努力找工作的人。</div></li></ul></li><li><p>Not in the labour force</p><ul><li>This category includes those who fit neither of the first two categories, such as full-time students homemakers and retirees</li><li>不是前面两个分类的就是这个分类<ul><li>学生</li><li>家庭主妇</li><li>退休的人</li><li>不想找工作的人</li></ul></li></ul></li></ol><h2 id="劳动力-Labor-Force"><a href="#劳动力-Labor-Force" class="headerlink" title="劳动力 - Labor Force"></a>劳动力 - Labor Force</h2><script type="math/tex; mode=display">\text {Labor force = Number of Employed + Number of Unemployed}</script><h2 id="失业率-Unemployment-1"><a href="#失业率-Unemployment-1" class="headerlink" title="失业率 - Unemployment"></a>失业率 - Unemployment</h2><script type="math/tex; mode=display">\begin{aligned}\text {Unemployed} =& \frac {\text {Number of unemployed}} {\text {Labor Force}} \times 100 \\=& \frac {\text {Number of unemployed}} {\text {Number of unemployed + Number of employed}} \times 100\end{aligned}</script><h2 id="劳动参与率-Labor-force-participation-rate"><a href="#劳动参与率-Labor-force-participation-rate" class="headerlink" title="劳动参与率 - Labor-force participation rate"></a>劳动参与率 - Labor-force participation rate</h2><p>劳动力占所有成年人的比重：</p><script type="math/tex; mode=display">\begin{aligned}    \text {Labor-force participation rate} = \frac {\text {Labor force} } {\text {Adult population}} \times 100\end{aligned}</script><h2 id="失业的分类"><a href="#失业的分类" class="headerlink" title="失业的分类"></a>失业的分类</h2><ul><li>摩擦性失业 frictional unemployment: 由于劳动力缺乏流动性, 信息交流不完全以及市场组织不健全所造成的失业。<ul><li>一个人由于某种职业不够理想而想寻找其他职业所引起的暂时性失业</li><li>大学毕业生寻找一个工作时需要花费一段时间, 从而导致一时性失业<div class="note primary">人话：找工作要花时间</div><div class="note primary">这种失业的存在是正常的</div></li></ul></li><li>季节性失业 seasonal unemployment: 随着季节变化而变化的失业<ul><li>农业、旅游业对劳动的需求有季节性</li></ul></li><li>结构性失业 structural unemployment: 劳动力缺乏新工作所要求的<ul><li>技能而产生的失业</li><li>网购对传统零售业的冲击</li></ul></li><li>需求不足型失业 demand lacking unemployment:<ul><li>短期: 周期性失业 cyclical unemployment:经济周期中的衰退或萧条阶段因需求下降而导致的失业。<ul><li>萧条一需求和生产下降一就业岗位变少</li><li>当经济状况改善的时候,周期性失业会减少<div class="note warning">人话：这不是一件好事</div></li></ul></li><li>(长期:增长不足型失业:社会有效需求增长长期跟不上劳动力增长而产生的失业，不怎么考)</li></ul></li><li>自愿性失业 voluntary unemployment: 劳动者不愿按照现行货币工资水平和工作条件就业而引起的失业。<ul><li>不看成真正的失业</li></ul></li></ul><h2 id="失业不同分类的分析"><a href="#失业不同分类的分析" class="headerlink" title="失业不同分类的分析"></a>失业不同分类的分析</h2><ol><li>可以被接受:<ul><li>摩擦性失业一一正常现象</li><li>自愿性失业一一与充分就业不矛盾</li><li>结构性失业一一正常现象</li><li>季节性失业一一正常现象</li></ul></li><li>需求不足型失业才是真正的失业</li><li>充分就业 full employment: 消除需求不足型失业</li><li>自然失业率 natural rate of unemployment: 社会难以消除的 ==== 充分就业</li></ol><script type="math/tex; mode=display">\begin{aligned}    &\text {natural rate of unemployment自然失业率 = full employment} \\&\text {The normal rate of unemployment around which the unemployment rate fluctuates}\end{aligned}</script><h2 id="失业产生的原因"><a href="#失业产生的原因" class="headerlink" title="失业产生的原因"></a>失业产生的原因</h2><ol><li>最低工资法（生产要素市场中有效的价格地板）</li><li>工会（Union）</li><li>效率工资理论 efficiency wage: 企业为了提高劳动者的生产效率, 支付高于均衡水平的工资<ul><li>有利于劳动者的健康</li><li>降低劳动者的流动率</li><li>提高劳动者努力程度</li><li>有利于提高劳动者的素质</li></ul></li></ol><h2 id="一道失业的选择题"><a href="#一道失业的选择题" class="headerlink" title="一道失业的选择题"></a>一道失业的选择题</h2><p>An increase in the labor force participation rate will<br>(A) increase investment and decrease savings<br>(B) increase savings and decrease investment<br>(C) have no effect on unemployment<br>(D) make it easier to reduce unemployment<br>(E) make it more difficult to reduce unemployment</p><p>选E，因为Labor Force增多，就业机会不变，失业的人更加多了。</p><h1 id="一国收入的衡量"><a href="#一国收入的衡量" class="headerlink" title="一国收入的衡量"></a>一国收入的衡量</h1><h2 id="经济的收入和支出"><a href="#经济的收入和支出" class="headerlink" title="经济的收入和支出"></a>经济的收入和支出</h2><ul><li>在判断一国经济状况好坏时,自然应该看看所有人的总收入一一GDP</li><li>GDP同时衡量两件事:经济中所有人的总收入; 生产商品和服务而花费的总支出(对于经济总体来说, 收入必定等于支出)</li></ul><h2 id="GDP-国内生产总值"><a href="#GDP-国内生产总值" class="headerlink" title="GDP - 国内生产总值"></a>GDP - 国内生产总值</h2><ul><li>Gross domestic product (GDP)is the market value of all final goods and services produced within a country in a given period of time</li><li>国内生产总值(GDP)是一国境内在既定时期生产的所有最终商品和服务的市场价值。</li></ul><div class="note danger">GDP 低估了经济活动。</div><h3 id="市场价值"><a href="#市场价值" class="headerlink" title="市场价值"></a>市场价值</h3><p>GDP使用市场价格将很多不同种类的产品加总成一个数据, 这个数据衡量经济活动的价值</p><ul><li>如果一个苹果的价格是一个桔子价格的2倍, 那么一个苹果对GDP的贡献是一个桔子对GDP贡献的2倍。</li></ul><h3 id="所有商品"><a href="#所有商品" class="headerlink" title="所有商品"></a>所有商品</h3><ul><li>GDP衡量经济的方方面面,它包括经济体生产并在市场上<strong>合法销售</strong>的所有东西。</li><li>毒品不算</li><li>自产自销的不可以算<ul><li>你在菜市场买得菜要计入GDP, 但你在自家菜园里所种的菜不计入GDP</li><li><strong><em><font color='red'> GDP低估经济活动的原因之一 </font></em></strong></li></ul></li><li>住房的存量（stock）也计入GDP中<ul><li>出租的房屋:将租金计入GDP</li><li>自己住的房屋:“自己租给自己住”一一按照租赁价值估算的住房服务价值计入GDP</li></ul></li></ul><h3 id="最终商品"><a href="#最终商品" class="headerlink" title="最终商品"></a>最终商品</h3><ul><li>企业的存货 (inventory):以便将来使用或销售; 中间产品暂时被视为“最终产品”, 它的价值按存货投资价值计入GDP<ul><li>存货增加时,GDP也增加。当存货后来被使用或出售时,需要从GDP中减去这些存货的价值。</li></ul></li><li>每一个东西只能计算一次</li><li>GDP只包括最终产品(final good)的价值, 而不包括中间产品(intermediate good)的价值,因为中间产品的价值已经包含在最终产品的价格之中。<div class="note primary">人话：零件不要算，只要算最终的产品。</div></li></ul><h3 id="商品和服务"><a href="#商品和服务" class="headerlink" title="商品和服务"></a>商品和服务</h3><ul><li>GDP既包括有形商品:食品、衣服、汽车等</li><li>又包括无形的服务:理发、家庭清洁服务、医疗服务等<ul><li>当你购买你喜欢的乐队的CD时,你购买的是一种商品,你支付的钱需要计入GDP。</li><li>当你在现场听这个乐队的演唱会时,你购买的是一种服务,你买票支付的钱也要计入GDP。</li></ul></li></ul><h3 id="生产的"><a href="#生产的" class="headerlink" title="生产的"></a>生产的</h3><ul><li>GDP包含当前生产的产品和服务,但不包括以前生产现在交易的产品和服务。<ul><li>当汽车公司生产和销售一辆新车时,此车的价值包含在GDP之中。当个人将旧车卖给另外一个人时,旧车的价值不包含在当前的GDP之中。但是，二手交易时的服务费要进行计算。</li><li>梵高的世界名画×</li></ul></li></ul><h3 id="一国境内"><a href="#一国境内" class="headerlink" title="一国境内"></a>一国境内</h3><ul><li>如果一个加拿大人暂时在美国工作, 他生产的产品计入美国的GDP</li><li>如果一个美国人在海地开了家工厂, 他工厂生产的产品不计入美国的GDP, 而是计入海地的GDP。</li><li>因此, 如果某产品是在一国国内生产的, 不管生产者是否是该国公民, 这些产品都要计入该国的GDP。</li></ul><h3 id="既定时期"><a href="#既定时期" class="headerlink" title="既定时期"></a>既定时期</h3><ul><li>GDP的计算时期通常是一年或一个季度(三个月),衡量一国在该时期内的收入流(和支出流)。</li><li>当政府报告季度GDP的数据时, 它通常给出的是已经“年化过”的GDP（x4）</li></ul><h2 id="GNP-和-NNP"><a href="#GNP-和-NNP" class="headerlink" title="GNP 和 NNP"></a>GNP 和 NNP</h2><ul><li>国民生产总值(Gross National product,GNP)=GDP - 外国人在本国赚取的收入+本国人在国外赚取的收入。<ul><li>例如,当一个加拿大人暂时在美国工作时,他的产品计入美国的GDP,但不计入美国的GNP(计入加拿大的GNP)</li><li>对于绝大多数国家来说,GDP和GNP的数额非常接近。</li></ul></li><li>国民生产净值(Net National Product,NNP)=GNP-折旧 depreciation)</li></ul><h2 id="GDP的组成部分"><a href="#GDP的组成部分" class="headerlink" title="GDP的组成部分"></a>GDP的组成部分</h2><ul><li><strong>Consumption (C)</strong>：消费</li><li><strong>Investment (I)</strong>：投资</li><li><strong>Government Purchases (G)</strong>：政府购买</li><li><strong>Net Exports (NX)</strong>：净出口 = 出口 - 进口</li></ul><script type="math/tex; mode=display">    \text {Y = C + I + G + NX}</script><h3 id="消费-Consumption"><a href="#消费-Consumption" class="headerlink" title="消费 - Consumption"></a>消费 - Consumption</h3><ul><li>消费：家庭用于物品和劳务的总支出</li><li>包括 <strong>耐用品</strong>（汽车和家电） 和 <strong>非耐用品</strong>（食品和衣服）</li><li>注：住房不属于消费，是Investment</li></ul><h3 id="投资-Investment"><a href="#投资-Investment" class="headerlink" title="投资 - Investment"></a>投资 - Investment</h3><ul><li>投资: 对用于将来生产更多物品和劳务的物品的支出</li><li>包括：<ul><li>固定设备(机械设备等)</li><li>建筑物 (厂、办公楼、住房)</li><li>存货投资(生产但未销售的商品)</li></ul></li></ul><div class="note warning">注意对于股票、债券之类的金融资产的购买并不属于“投资”</div><h3 id="政府购买-Government-Purchase"><a href="#政府购买-Government-Purchase" class="headerlink" title="政府购买 - Government Purchase"></a>政府购买 - Government Purchase</h3><ul><li>政府消费支出和总投资 (Government Consumption Expenditure and Gross Investment)</li><li>各级政府用于物品与劳务的支出,包括政府员工的工资和政府的公务支出</li><li>政府购买 <strong><em><font color='red'> 不包括 </font></em></strong> 转移支付 (transfer payment),例如社会保障及失业保险等<ul><li>转移支付改变了家庭收入,但并没有改变经济的生产</li></ul></li></ul><h3 id="净出口-Net-Export"><a href="#净出口-Net-Export" class="headerlink" title="净出口 - Net Export"></a>净出口 - Net Export</h3><ul><li><script type="math/tex; mode=display">\text {NX = exports(出口)} - \text {Imports(进口)}</script></li><li>出口代表国外居民对国内物品及劳务的支出</li><li>进口代表家庭、企业、政府部门在国外生产的物品及劳务上的支</li></ul><h3 id="GDP-组成部分小结"><a href="#GDP-组成部分小结" class="headerlink" title="GDP 组成部分小结"></a>GDP 组成部分小结</h3><script type="math/tex; mode=display">\text {Y (Output / GDP / AD) = C + I + G + NX}</script><div class="note success">GDP最大的组成部分是 <font color='red'> Consumption </font> </div><h3 id="实际-GDP-Real-GDP"><a href="#实际-GDP-Real-GDP" class="headerlink" title="实际 GDP - Real GDP"></a>实际 GDP - Real GDP</h3><div class="note success">“如果用过去某年的价格衡量今年生产的产品和服务的价值,这个数值是多少?” 一一 实际GDP (Real GDP)</div><ul><li>实际GDP是将价格固定在过去某个年份(Base Year)的水平上,然后用其衡量当前的产品价值。</li><li>实际GDP可以表明经济整体中商品产量在不同年份的变化。</li></ul><h3 id="名义-GDP-Nomial-GDP"><a href="#名义-GDP-Nomial-GDP" class="headerlink" title="名义 GDP - Nomial GDP"></a>名义 GDP - Nomial GDP</h3><p>与 Real GDP 相对，用这一年的商品价格来衡量。</p><div class="note primary">基准年的Nomial GDP = Real GDP。</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/1.jpg" class=""><h3 id="GDP-不同计算方法"><a href="#GDP-不同计算方法" class="headerlink" title="GDP 不同计算方法"></a>GDP 不同计算方法</h3><ul><li>我们计算实际 sreal gDp的目的是评估整体经济的运行健康状况。</li><li>由于实际GDP衡量的是经济实际生产的产量,它反映的是经济满足人们需求的能力。因此,与名义GDP相比,实际GDP是经济状况的更好评价指标。</li><li>当经济学家讨论经济的GDP时,他们通常指的是实际 real GDP 而不是名义 nominal GDP。</li><li>当他们谈论经济的增长时,他们衡量的是实际 real GDP的增长百分比。</li></ul><h3 id="GDP-平减指数"><a href="#GDP-平减指数" class="headerlink" title="GDP 平减指数"></a>GDP 平减指数</h3><ul><li>名义GDP反映的是经济的产量和价格</li><li>实际GDP将价格维持在基年的价格水平,它反映的仅是产量</li><li>GDP平减指数 (GdP deflator),它反映的仅是产品和服务的价格</li></ul><script type="math/tex; mode=display">\text {GDP deflator} = \frac {\text {Nomial GDP}}{\text {Real GDP}} \times 100</script><h3 id="通货膨胀率-方法-1-Inflation-Rate"><a href="#通货膨胀率-方法-1-Inflation-Rate" class="headerlink" title="通货膨胀率 (方法 1) - Inflation Rate"></a>通货膨胀率 (方法 1) - Inflation Rate</h3><script type="math/tex; mode=display">    \text {Inflation rate in year 2} = \frac {\text {GDP deflator in year 2} - \text {GDP deflator in year 1}}{\text {GDP deflator in year 1}} \times 100</script><h3 id="GDP的弊端"><a href="#GDP的弊端" class="headerlink" title="GDP的弊端"></a>GDP的弊端</h3><ul><li>没有考虑环境问题</li><li>没有考虑产品好坏的问题</li><li>没有考虑分配等的问题</li></ul><h1 id="生活成本的衡量-生产与增长"><a href="#生活成本的衡量-生产与增长" class="headerlink" title="生活成本的衡量 + 生产与增长"></a>生活成本的衡量 + 生产与增长</h1><h2 id="消费者价格指数-CPI"><a href="#消费者价格指数-CPI" class="headerlink" title="消费者价格指数 CPI"></a>消费者价格指数 CPI</h2><ul><li>消费者价格指数 (Consumer price index,CPI): 用来衡量典型消费者购买一篮子商品和服务而花费的钱数的指标。</li><li>通货膨胀率 (Inflation rate): 某时期消费者价格指数与上一期相比发生的变动百分比。</li></ul><h2 id="CPI的计算方法"><a href="#CPI的计算方法" class="headerlink" title="CPI的计算方法"></a>CPI的计算方法</h2><script type="math/tex; mode=display">\text {CPI} = \frac {\text {Price of basket of goods and services in current year}}{\text {Price of basket in base year}} \times 100</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/2.jpg" class=""><h2 id="用CPI计算通货膨胀率"><a href="#用CPI计算通货膨胀率" class="headerlink" title="用CPI计算通货膨胀率"></a>用CPI计算通货膨胀率</h2><script type="math/tex; mode=display">\text {Inflation rate in year 2} = \frac {\text {CPI in year 2} - \text {CPI in year 1}}{\text {CPI in year 1}} \times 100</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/3.jpg" class=""><h2 id="CPI篮子里有啥"><a href="#CPI篮子里有啥" class="headerlink" title="CPI篮子里有啥"></a>CPI篮子里有啥</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/4.jpg" class=""><h2 id="CPI的缺陷"><a href="#CPI的缺陷" class="headerlink" title="CPI的缺陷"></a>CPI的缺陷</h2><ul><li>替代性偏差 (substitution bias): 价格的变动不是同比例的,也就是说某些商品的价格变动幅度比另外一些商品的大<ul><li>消费者会少购买价格上升相对较大的商品,多购买价格上升相对较小甚至降低的商品</li><li>如果计算价格指数时假设篮子里的商品数量不变,这就忽视了消费者替代商品的可能性,因此,夸大了生活成本上升幅度。</li></ul></li><li>引进新商品 (introduction of new goods): 当市场出现新的商品时,消费者可以选择的商品种类增加了,每一块钱的价值提高了</li><li>商品质量变动无法衡量 (unmeasured quality change): 如果某商品的质量在下年变低但价格不变,那么一元钱的价值就降低了</li></ul><h2 id="利率"><a href="#利率" class="headerlink" title="利率"></a>利率</h2><ul><li>当你向你的银行账户存入一笔钱,相当于你现在给银行一笔钱,在将来银行需要向你还本付息。类似地,当你向银行借出资金时,你现在得到了一笔钱,但是将来你必须还本付息。</li></ul><h2 id="通货膨胀和通货紧缩"><a href="#通货膨胀和通货紧缩" class="headerlink" title="通货膨胀和通货紧缩"></a>通货膨胀和通货紧缩</h2><ol><li>通货膨胀使购买力减少</li><li>通货紧缩使购买力增加</li></ol><h2 id="实际利率和名义利率"><a href="#实际利率和名义利率" class="headerlink" title="实际利率和名义利率"></a>实际利率和名义利率</h2><ul><li>衡量钱数变动但是 <strong>未对通货膨胀调整</strong> 的利率：名义利率 (nomial interest rate)</li><li><strong>已矫正通货膨胀因素</strong> 的利率：实际利率 (real interest rate)</li></ul><script type="math/tex; mode=display">\text {Real Interest Rate} = \text {Nomial Interest Rate} - \text {Inflation Rate}</script><h2 id="Fisher’s-Effect"><a href="#Fisher’s-Effect" class="headerlink" title="Fisher’s Effect"></a>Fisher’s Effect</h2><script type="math/tex; mode=display">\text {Real} = \text {Nomial} - \pi ~(\text {Inflation Rate})</script><script type="math/tex; mode=display">\text {Real GDP} = \text {Nomial GDP} - \text {Inflation Rate}</script><script type="math/tex; mode=display">\text {Real Interest Rate} = \text {Nomial Interest Rate} - \text {Inflation Rate}</script><h1 id="金融系统-Financial-Sector"><a href="#金融系统-Financial-Sector" class="headerlink" title="金融系统 - Financial Sector"></a>金融系统 - Financial Sector</h1><h2 id="经济中的金融机构"><a href="#经济中的金融机构" class="headerlink" title="经济中的金融机构"></a>经济中的金融机构</h2><ul><li>金融系统 (financial system): 经济中的众多金融机构,这些机构将个人的储蓄 saving借给另一个人做投资 investment用</li><li>金融市场 financial markets</li><li>金融中介 financial intermediaries</li></ul><h2 id="金融市场-Financial-Market"><a href="#金融市场-Financial-Market" class="headerlink" title="金融市场 - Financial Market"></a>金融市场 - Financial Market</h2><ul><li>在金融市场中,存款者可以直接地将资金供给给借钱者使用。</li><li>最重要的金融市场:债券市场和股票市场</li></ul><div class="note primary">没有中间商赚差价</div><h2 id="债券-Bonds"><a href="#债券-Bonds" class="headerlink" title="债券 - Bonds"></a>债券 - Bonds</h2><ul><li>债券 bonds:债权债务凭证,它规定了借款者对债券持有者的义务。</li><li>简单地说,债券就是借条(IOU)</li><li>债券载明了借款者归还借款的日期,这称为到期日 date of maturity</li><li>还载明了在到期日之前借款者每期支付的利率 interest rate</li><li>最初你借出的钱叫做本金 principal</li><li>债券的期限(term):债券自发行日至到期日的时间跨度。<ul><li>有些债券的期限较短,如几个月</li><li>有些债券的期限很长,比如三十年</li><li>长期债券的风险比短期债券的大,因为长期债券的持有者必须等待更长的时间才能拿到本金。</li><li>如果长期债券的持有者急需用钱,但债券还未到期,那么他只有将债券卖给别人,也许会降价出售。为了补偿这样的风险,长期债券支付的利率通常比短期债券高。</li></ul></li><li>债券的信用风险(credit risk):债券发行者无法偿还部分或全部利息或本金的可能性<blockquote><p>无法偿还部分或全部利息或本金的行为称为违约 (default)</p></blockquote></li><li>当购买债券的人意识到违约风险较高时,为了补偿这种风险,他们会索要较高的利率。<ul><li>人们通常认为美国政府是安全的,政府债券的利率通常较低。<blockquote><p>Treasury Bill (T-bill, considered “never default”)</p></blockquote></li></ul></li><li><strong><em><font color='red'> 利率和债券价值反向变化 </font></em></strong></li><li>财务状况不稳定的公司则通过发行垃圾债券 (Junk bonds)来筹钱,垃圾债券支付很高的利率</li></ul><div class="note primary">人话：比较正式的借条。</div><h2 id="股票-Stock"><a href="#股票-Stock" class="headerlink" title="股票 - Stock"></a>股票 - Stock</h2><ul><li>通过出售股票来筹集资金的方式称作股权融资 (equity finance),而通过出售债券来筹集资金的方式称为债权融资 (debt finance)</li><li>公司赚取利润时:股票持有者能分享这些利润,而债券持有者只能得到和</li><li>公司遇到财务危机时:债券持有者比股票持有者享有优先追偿权。与债券相比,股票的风险较高,潜在的收益也更高。</li><li>在美国的经济中最重要的股票交易所:<ul><li>纽约股票交易所 New York Stock Exchange</li><li>美国股票交易所 American Stock Exchange</li><li>纳斯达克 NASDAQ National Association of securities dea| ers automated Quotations(全美证券商协会自动报价系统)</li></ul></li><li>中国重要的股票交易所:上海证券交易所、深圳证券交易所</li><li>证券 securities:用来证明持有人享有的某种特定权益的凭证(debt security; equity security)</li></ul><div class="note success">上述的所有都属于证券</div><h2 id="金融中介-Financial-Intermediaries"><a href="#金融中介-Financial-Intermediaries" class="headerlink" title="金融中介 - Financial Intermediaries"></a>金融中介 - Financial Intermediaries</h2><ul><li>银行bank:<ul><li>银行的第一个作用是吸收存款,并将钱借给需要的人使用。</li><li>银行从中赚取利息的差作为利润</li><li>银行的第二个作用是促进商品和服务的买卖</li></ul></li><li>共同基金 mutual fund<ul><li>一类金融机构。它向公众出售基金份额,然后使用销售收入来购买它精选的各种股票或(和)债券,即购买证券组合 (portfolio)</li><li>证券组合价值上升,持有者获利;价值下降,持有者损失。</li></ul></li></ul><h2 id="储蓄与投资"><a href="#储蓄与投资" class="headerlink" title="储蓄与投资"></a>储蓄与投资</h2><div class="note danger">在这里，假设国家是封闭的，NX = 0</div><script type="math/tex; mode=display">\text {Y = C + I + G}</script><script type="math/tex; mode=display">\text {Y} - \text{C} - \text{G} = \text{I} \Rightarrow S = I</script><p>左边：国民储蓄。右边：投资</p><div class="note info">对于经济来说，储蓄(S)等于投资(I)</div><p>用$T$表示税收（转移支付）</p><script type="math/tex; mode=display">S = (Y - T - C) + (T - G) = 私人储蓄 + 公共储蓄</script><ul><li>私人储蓄（private saving）：家庭在缴纳税收和支付消费后剩下的那部分收入</li><li>公共储蓄（public saving）：政府在支付它的指出后剩下的那部分税收</li></ul><hr><ul><li>预算盈余（Budget Surplus）：税收收入大于政府支出 $T &gt; G$</li><li>预算赤字（Budget Deficit）：税收收入小于政府支出 $T &lt; G$<ul><li>Financed By Bonds（政府发行债券）</li></ul></li></ul><h2 id="可贷资金市场-Market-for-loanable-funds"><a href="#可贷资金市场-Market-for-loanable-funds" class="headerlink" title="可贷资金市场 - Market for loanable funds"></a>可贷资金市场 - Market for loanable funds</h2><ul><li>我们假设经济中只有一个金融市场:可贷资金市场;所有的储蓄者都要到这个市场储蓄,所有的借钱者需要到这个市场借钱。</li><li>可贷资金( anable funds):人们选择储蓄和借出(而不是用于自己消费)的所有的收入,也是投资者能借取的所有资金。</li><li>储蓄 savings 是可贷资金供给的来源supply</li><li>投资 investment 是可贷资金需求的来源 demand</li></ul><div class="note success">人们不用的闲钱存进银行，银行再把这些钱贷款出去。</div><div class="note primary">Saving是可贷资金的Supply</div><div class="note primary">Saving是可贷资金的Demand</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/5.jpg" class=""><div class="note default">纵轴：Real Interest Rate</div><div class="note primary">Supply 斜向上：银行利率上升时，人们倾向于存钱。</div><div class="note info">Demand 斜向下：银行利率上升，人么倾向于不借钱。</div><div class="note danger">手里拿着Cash的Opportunity Cost就是存钱的利息。</div><h2 id="激励储蓄的政策"><a href="#激励储蓄的政策" class="headerlink" title="激励储蓄的政策"></a>激励储蓄的政策</h2><div class="note info">人话：减税，人们的闲钱增多，倾向于存钱。</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/6.jpg" class=""><h2 id="激励投资的政策"><a href="#激励投资的政策" class="headerlink" title="激励投资的政策"></a>激励投资的政策</h2><div class="note info">人话：对公司来说，税收返现，促进投资。</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/7.jpg" class=""><div class="note warning">因为“投资=储蓄”，所以均衡时两方面都会增加。</div><h2 id="政府财政赤字的影响"><a href="#政府财政赤字的影响" class="headerlink" title="政府财政赤字的影响"></a>政府财政赤字的影响</h2><script type="math/tex; mode=display">\begin{aligned}    & 财政赤字（政府多花钱） \\ \Rightarrow~ & 政府花销 ~G > 税收~T \\ \Rightarrow~ & T - G < 0 \\    \Rightarrow ~ & 因为 S = (Y - T - C) + (T - G) , 所以S降低 \\    \Rightarrow ~ & 储蓄的降低导致 \text {Lonable Fonds}曲线左移 \\    \Rightarrow ~ & 导致 \text {Investment} 降低，\text {Interest Rate}增加\end{aligned}</script><div class="note info">同样可以理解为：政府出现财政赤字，因为Financed by bonds，所以向民众借钱，导致储蓄降低。</div><div class="note info">挤出效应（Crowding out Effect）: 由于政府资金的介入导致私人投资的下降。</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/8.jpg" class=""><h1 id="货币和价格"><a href="#货币和价格" class="headerlink" title="货币和价格"></a>货币和价格</h1><h2 id="货币体系-Monetary-System"><a href="#货币体系-Monetary-System" class="headerlink" title="货币体系 - Monetary System"></a>货币体系 - Monetary System</h2><p>货币的功能：</p><ul><li><strong>交换的媒介 - Medium of Exchange</strong></li><li><strong>账户的单位 - Unit of Acount</strong></li><li><strong>储存价值 - Store of Value</strong></li><li><strong>流动性 - Liquidity</strong>：能不能容易地转换成别的实物商品</li></ul><div class="note info">债券和存着的流动性较差。</div><h2 id="货币的种类"><a href="#货币的种类" class="headerlink" title="货币的种类"></a>货币的种类</h2><ul><li><strong>商品货币 - Commodity Money</strong>：自己值钱，且作为货币。比如：<ul><li>Cigarette</li><li>Gold</li></ul></li><li><strong>法定货币 - Flat Money</strong>：本身不值钱，但是政府说这个是货币<ul><li>Dollar</li></ul></li></ul><h2 id="美国的通行货币"><a href="#美国的通行货币" class="headerlink" title="美国的通行货币"></a>美国的通行货币</h2><ol><li>Currency: Cash + Coin</li><li>Demand Deposits (活期存款，不包括定期存款)</li></ol><ul><li>狭义货币（M1） = 流通中的现金 + 活期存款</li><li>广义货币（M2） = M1 + 储蓄存款</li></ul><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/9.jpg" class=""><div class="note primary">M1: 能迅速换商品</div><div class="note danger">信用卡：deferring payment, 延期支付。因为信用不能流通，所以信用卡不是货币。</div><h2 id="美联储-The-Federal-Reserve"><a href="#美联储-The-Federal-Reserve" class="headerlink" title="美联储 - The Federal Reserve"></a>美联储 - The Federal Reserve</h2><ul><li><strong>美联储 Federal reserve(Fed)</strong>: the central bank of the United States</li><li><strong>央行 central bank</strong>: an institution designed to oversee the banking system and regulate the quantity of money in the economy</li><li>美联储的两个职责:<ul><li>regulate banks and ensure the health of the banking system</li><li>control the quantity of money that is made available in the economy</li></ul></li><li><strong>money supply</strong>: the quantity of money available in the economy</li><li><strong>货币政策 monetary policy</strong>: the setting of the money supply by policymakers in the central bank</li></ul><div class="note primary">两种银行：央行（Central Banks）和商业银行（Commercial Banks）</div><div class="note success">央行：货币政策 Monetary Policy</div><div class="note success">政府：财政政策 Fiscal Policy</div><div class="note default">Money Supply：经济体中流通的货币数量。</div><div class="note primary">央行的职责：1. 管理商业银行 2. 控制 Money Supply</div><h2 id="银行-和-Money-Supply"><a href="#银行-和-Money-Supply" class="headerlink" title="银行 和 Money Supply"></a>银行 和 Money Supply</h2><div class="note default">如果银行把收进来的钱都存着，就叫"100-percent-reserve banking"，不会影响 MS</div><p>如果银行还向外贷款（fractional-reserve banking），会创造出钱：</p><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/10.jpg" class=""><div class="note danger">Money Supply被创造，不代表Wealth被创造，不代表GDP被创造。</div><div class="note danger">挤兑 Bank Run：大家都争相去银行取钱。</div><h2 id="货币乘数-Money-Multiplier"><a href="#货币乘数-Money-Multiplier" class="headerlink" title="货币乘数 - Money Multiplier"></a>货币乘数 - Money Multiplier</h2><ul><li><strong>Money Multiplier</strong>: The amount of money the banking system generates with each dollar of reserves.</li><li>$R$代表Reserve Ratio，则<script type="math/tex; mode=display">\text {Money Multiplier} = \frac 1 R</script></li></ul><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/11.jpg" class=""><div class="note success">Reserve Ratio 是 Fed 规定的。</div><div class="note success">Reserve Ratio 越高，银行借出的钱越少，货币乘数下降。</div><div class="note danger">Reserve Requirement的原因：Bank Run</div><h2 id="银行资本"><a href="#银行资本" class="headerlink" title="银行资本"></a>银行资本</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/12.jpg" class=""><div class="note default">银行资本 Bank Capital : 理解为开银行的人自己花的钱</div><div class="note primary">杠杆 Leverage : The use of borrowed money to supplement existing funds for purposes of investment. 用借来的钱去做投资</div><div class="note info">杠杆率 Leverage Ratio : The ratio of assets to bank capital. 上图中可以理解为：用50美金撬动了1000美金的资本，杠杆率为 $\displaystyle\frac{1000}{50} = 20$</div><h2 id="Fed-调整-Reserve-的三种方法-1"><a href="#Fed-调整-Reserve-的三种方法-1" class="headerlink" title="Fed 调整 Reserve 的三种方法 - 1"></a>Fed 调整 Reserve 的三种方法 - 1</h2><p><strong><em><font color='red'> 公开市场操作 (Open Market Operation)</font></em></strong>: 在市场上买卖债券。</p><ul><li>增加MS：Open Market Purchase<script type="math/tex; mode=display">\ce {Fed <=>[给人们\$][Fed 买Bonds] Market} \Rightarrow 增加 \text {Money Supply}</script></li><li>减少MS：Open Market Sale<script type="math/tex; mode=display">\ce {Fed <=>[Fed 卖Bonds][人们给\$] Market} \Rightarrow 减少 \text {Money Supply}</script></li></ul><h2 id="Fed-调整-Reserve-的三种方法-2"><a href="#Fed-调整-Reserve-的三种方法-2" class="headerlink" title="Fed 调整 Reserve 的三种方法 - 2"></a>Fed 调整 Reserve 的三种方法 - 2</h2><p><strong><em><font color='red'> 调整贴现率（Discount Rate） </font></em></strong></p><div class="note default">贴现率：当Commercial Bank每天存的钱没存够Reserve Requirement，就会问别的银行/央行借钱，贴现率就是央行借出去的利率。</div><div class="note success">Discount Rate $\uparrow$，银行向央行借的钱$\downarrow$，市场上的Money Supply$\downarrow$</div><div class="note success">Discount Rate $\downarrow$，银行向央行借的钱$\uparrow$，市场上的Money Supply$\uparrow$</div><h2 id="Fed-调整-Reserve-的三种方法-3"><a href="#Fed-调整-Reserve-的三种方法-3" class="headerlink" title="Fed 调整 Reserve 的三种方法 - 3"></a>Fed 调整 Reserve 的三种方法 - 3</h2><p><strong><em><font color='red'> 调整存款准备金率（Reserve Requirement） </font></em></strong></p><div class="note success">存款准备金率$\uparrow$，银行增加Reserve，loan out$\downarrow$，MS $\downarrow$</div><div class="note success">存款准备金率$\downarrow$，银行减少Reserve，loan out$\uparrow$，MS $\uparrow$</div><hr><h2 id="小知识点"><a href="#小知识点" class="headerlink" title="小知识点"></a>小知识点</h2><div class="note primary">隔夜拆借利率（Federal Funds Rate）：银行与银行之间借钱的利率，interest rate that banks charge one another while making overnight loan.</div><div class="note success">一笔钱的Real Value是这笔钱的购买力（Purchase Power），并不是由人决定的。</div><div class="note warning">M1最大的组成部分是Demand Deposit</div><div class="note info">Tax Credit提高Loanable Funds的Demand</div><div class="note primary">Investment / Saving $\uparrow$, 资本存量（Capital Stock）$\uparrow$，生产力（Productivity）$\uparrow$, PPF shift to the right 外移</div><div class="note danger">通常来说，Federal Funds Rate (隔夜拆借利率) < Discount Rate (贴现率)</div><div class="note info">Fed如果想降低隔夜拆借利率，就要营造一个宽松的市场环境。</div><h2 id="通货膨胀-Inflation"><a href="#通货膨胀-Inflation" class="headerlink" title="通货膨胀 - Inflation"></a>通货膨胀 - Inflation</h2><ul><li>通货膨胀 inflation: the increase in the overall level of prices<ul><li>Price level上升,人们手里的钱的购买力下降</li><li>如果我们用$p$代表 price level, 那么1美元的购买力, value of money是$\displaystyle\frac 1 p$</li></ul></li><li>通货紧缩 deflation: the long period during which most good prices fall</li><li>恶性通货膨胀 hyperinflation: an extraordinarily high rate of inflation</li></ul><div class="note info">通货膨胀指经济中的平均价格增长, 而不是所有价格都会增长。</div><div class="note danger">恶性通货膨胀通常是政府让央行多发货币导致的。</div><h2 id="Monetary-Equilibrium"><a href="#Monetary-Equilibrium" class="headerlink" title="Monetary Equilibrium"></a>Monetary Equilibrium</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/13.jpg" class=""><h2 id="Monetary-Injection-的-影响"><a href="#Monetary-Injection-的-影响" class="headerlink" title="Monetary Injection 的 影响"></a>Monetary Injection 的 影响</h2><blockquote><p><strong>货币数量理论 Quantity theory of money</strong>: a theory asserting that the quantity of money available determines the price level and that the growth rate in the quantity of money available determines the inflation rate 假定其他因素不变,商品价格水平涨落与货币数量成正比,货币价值的高低与货币数量的多少成反比。</p></blockquote><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/14.jpg" class=""><h2 id="古典二分法"><a href="#古典二分法" class="headerlink" title="古典二分法"></a>古典二分法</h2><ul><li><strong>The Classical Dichotomy</strong></li><li>Nominal Variables: variables measured in monetary units</li><li>Real variables: variables measured in physical units such as<ul><li>Production</li><li>Employment</li><li>Real wages: 工资的购买力</li><li>Real interest rate: it measures the rate at which people exchange goods and services today for goods and services in the future</li></ul></li><li>古典二分法 classical dichotomy: the <strong>theoretical</strong> separation of nominal and real variables<ul><li>Relative price就是 real variab|e</li><li>Money supply的变化只会影响 nominal变量, 不会影响real变量: MS增长price level也增长,wage也增长,所以最后对于real是没有仼何影响的</li></ul></li></ul><div class="note primary">人话：把东西分成Real和Nomial</div><h2 id="货币中性理论-Monetary-Neutrality"><a href="#货币中性理论-Monetary-Neutrality" class="headerlink" title="货币中性理论 - Monetary Neutrality"></a>货币中性理论 - Monetary Neutrality</h2><p><strong>Monetary Neutrality</strong>: The proposition that changes in the money supply do not affect real variables.</p><div class="note primary">人话：Nomial 不会影响 Real</div><h2 id="货币流通速度-Velocity-of-Money"><a href="#货币流通速度-Velocity-of-Money" class="headerlink" title="货币流通速度 - Velocity of Money"></a>货币流通速度 - Velocity of Money</h2><div class="note info">人话：货币转手的速度，the rate at which money changes hands</div><ul><li>$M$: 钱的数量（Money Supply）</li><li>$P$: Price Level / GDP Deflator</li><li>$Y$: <strong>Real</strong> GDP</li><li>$V$: 货币流通速度</li></ul><p><strong>Quantity Equation</strong>: the equation which relates the quantity of money the velocity of money, and the dollar value of the economys output of goods and services</p><script type="math/tex; mode=display">V = \frac{P \times Y}{M} = \frac {\text {Nomial GDP}}{M}</script><script type="math/tex; mode=display">M \times V = P \times Y</script><div class="note default">图中得出：$V$基本保持不变</div><div class="note info">如果$V$降低，会让$AD$降低</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/15.jpg" class=""><h2 id="再论Fisher-Effect-费舍效应"><a href="#再论Fisher-Effect-费舍效应" class="headerlink" title="再论Fisher Effect - 费舍效应"></a>再论Fisher Effect - 费舍效应</h2><script type="math/tex; mode=display">I = \pi + R</script><div class="note success">通货膨胀的增长最终会体现在名义利润的上升上。</div><h2 id="通货膨胀的成本"><a href="#通货膨胀的成本" class="headerlink" title="通货膨胀的成本"></a>通货膨胀的成本</h2><ul><li>皮鞋成本 - Shoeleather Cost<ul><li>通胀来临时人们会尽力减少手中的货币数量,这个过程所耗费的时间和精力成本</li></ul></li><li>菜单成本 - Menu Costs<ul><li>不停地更换价格带来的成本</li></ul></li><li>Relative-Price Variability and the misallocation of resources<ul><li>e.g. A公司直接提价12%，B公司每月提价1%</li></ul></li><li>通胀导致的税收混乱 - Inflation-Induced Tax Distortions<ul><li>e.g. 税可能收少了</li></ul></li><li>Confusion and Inconvenience<ul><li>钱不能很好地用来衡量价值</li></ul></li><li>Arbitrary Redistribution of Wealth<ul><li>Borrower在Inflation中获利 - 财富重新分配</li></ul></li></ul><h1 id="短期经济波动"><a href="#短期经济波动" class="headerlink" title="短期经济波动"></a>短期经济波动</h1><h2 id="关于经济波动的事实"><a href="#关于经济波动的事实" class="headerlink" title="关于经济波动的事实"></a>关于经济波动的事实</h2><ul><li>Fact 1: Economic Fluctuations Are irregular and Unpredictable</li><li>Fact 2: Most Macroeconomic Quantities Fluctuate Together</li><li>Fact 3: As Output Falls, Unemployment rises</li></ul><h2 id="AD-amp-AS"><a href="#AD-amp-AS" class="headerlink" title="AD &amp; AS"></a>AD &amp; AS</h2><ul><li><strong>社会总需求</strong> - <strong>Aggregate Demand</strong></li><li><strong>社会总供给</strong> - <strong>Aggregate Supply</strong></li></ul><h2 id="AD曲线"><a href="#AD曲线" class="headerlink" title="AD曲线"></a>AD曲线</h2><script type="math/tex; mode=display">\text {AD = real GDP = Y = C + I + G + NX}</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/16.jpg" class=""><h2 id="AD斜向下的原因"><a href="#AD斜向下的原因" class="headerlink" title="AD斜向下的原因"></a>AD斜向下的原因</h2><ul><li><strong>The Wealth Effect</strong>: 手里的前不变，但是Price Level变低了，就会觉得自己更加有钱，去消费，C增加，Y增加。</li><li><strong>The Interest-Rate Effect</strong>: Price Level降低，导致了IR也降低，导致I升高，导致Y升高</li><li><strong>The Exchange-Rate Effect</strong>: Price Level降低，美元贬值，NX提高，Y增加。</li></ul><h2 id="AD移动的原因"><a href="#AD移动的原因" class="headerlink" title="AD移动的原因"></a>AD移动的原因</h2><ul><li>Shifts Arising from Changes in Consumption<ul><li>如果人们忽然改变了消费观念决定多存钱为了以后养老,那么consumption会减少,在相同 price level下整个经济的需求量减少,AD曲线向左移动</li></ul></li><li>Shifts Arising from Changes in Investment<ul><li>如果现在计算机产业出现了一项新的技术, 计算机企业的老板就愿意增加投资 investment, 在相同 price level之下整个经济的需求量上升,AD曲线向右移动。</li><li>an investment tax credit投资税减免( a tax rebate tied to a firm’s investment spending</li></ul></li><li>Shifts Arising from Changes in Government Purchases</li><li>Shifts Arising from Changes in Net Exports<ul><li>当欧洲的经济整体处在萧条阶段时,他们就会减少从美国购买产品,对美国来说NX下降,AD向左移动</li></ul></li></ul><h2 id="SRAS曲线"><a href="#SRAS曲线" class="headerlink" title="SRAS曲线"></a>SRAS曲线</h2><p>Short-run Aggregate Demand Curve</p><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/17.jpg" class=""><h2 id="SRAS斜向上的原因"><a href="#SRAS斜向上的原因" class="headerlink" title="SRAS斜向上的原因"></a>SRAS斜向上的原因</h2><ul><li><strong>The Sticky-Wage Theory</strong><ul><li>nominal wage需要一定时间去适应 price leve的变化- sticky</li><li>一年之前,企业预计一年后的今天 price level是100,所以会与员工签合同时设定￥20/hour的工资;但是实际上,一年后的今天的价格水平是95,企业的收益比原来少了,但是工资还在 sticky状态,那么公司就会相应少雇佣员工、减少产量。</li></ul></li><li><strong>The Sticky-Price Theory</strong><ul><li>当市场的MS急剧减少的时候, price leve会急剧下降,但是对于企业来说,调整价格需要一些反应时间- sticky</li><li>那些没有来得及调整价格的企业,因为 price过高,销售量会急剧下滑企业就会裁员、减少产量。</li></ul></li><li><strong>The Misperceptions Theory</strong><ul><li>企业员工 nominal wage减少的时候,可能不会马上意识到周围消费品的价格也减少了,他们就会误以为自己干活不再像以前一样能拿到很多工资了,就会相应的减少他们labor的供给量</li></ul></li></ul><h2 id="SRAS移动的原因"><a href="#SRAS移动的原因" class="headerlink" title="SRAS移动的原因"></a>SRAS移动的原因</h2><ul><li>所有影响LRAS移动的原因都会带领SRAS移动</li><li>Changes in the expected price level (只移动短期曲线)<ul><li>如果生产者预计明天商品的售价提高，在今天就会减少供给量。（明天再卖）</li></ul></li></ul><h2 id="SRAS向左移动的原因"><a href="#SRAS向左移动的原因" class="headerlink" title="SRAS向左移动的原因"></a>SRAS向左移动的原因</h2><div class="note info">向左移动的原因：$\text{Wages} \uparrow, \text{Input Prices} \uparrow, \text{Inflationary Expectation} \uparrow$</div><h2 id="SRAS向右移动的原因"><a href="#SRAS向右移动的原因" class="headerlink" title="SRAS向右移动的原因"></a>SRAS向右移动的原因</h2><div class="note info">向右移动的原因：$\text{Wages} \downarrow, \text{Input Prices} \downarrow, \text{Inflationary Expectation} \downarrow$</div><h2 id="LRAS曲线"><a href="#LRAS曲线" class="headerlink" title="LRAS曲线"></a>LRAS曲线</h2><p>长期：$Y = Y_P \text { (Y Potential})$</p><p>古典二分法，货币中性理论：体现在nominal不影响real</p><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/18.jpg" class=""><div class="note default">In the long run the economys labor, capital, natural resources and technology determine the total quantity of goods and services supplied and this quantity supplied is the same regardless of what the price level happens to be.</div><h2 id="LRAS移动的原因"><a href="#LRAS移动的原因" class="headerlink" title="LRAS移动的原因"></a>LRAS移动的原因</h2><ul><li>Shifts Arising from Changes in Labor<ul><li>国会通过最低工资法案，失业率上升，$Y$变少，$LRAS$左</li></ul></li><li>Shifts Arising from Changes in Capital<ul><li>physical capital和human capital都算</li></ul></li><li>Shifts Arising from Changes in Natural Resources<ul><li>发现新的煤矿资源，$LRAS$右</li></ul></li><li>Shifts Arising from Changes in Technological Knowledge</li></ul><h2 id="LRAS带动SRAS"><a href="#LRAS带动SRAS" class="headerlink" title="LRAS带动SRAS"></a>LRAS带动SRAS</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/19.jpg" class=""><div class="note info">$P$改变是不确定的，其他因素影响。</div><h2 id="AD-AS-Model"><a href="#AD-AS-Model" class="headerlink" title="AD-AS Model"></a>AD-AS Model</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/20.jpg" class=""><h2 id="AD-曲线移动"><a href="#AD-曲线移动" class="headerlink" title="AD 曲线移动"></a>AD 曲线移动</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/21.jpg" class=""><div class="note primary">AD曲线移动，长期Y会自己回到LRAS的$Y_P$。</div><h2 id="AD-移动的结论"><a href="#AD-移动的结论" class="headerlink" title="AD 移动的结论"></a>AD 移动的结论</h2><ul><li>In the short run, shifts in aggregate demand cause fluctuations in the economys output of goods and services</li><li>In the long run, shifts in aggregate demand affect the overall price level but do not affect output.</li><li>Because policymakers influence aggregate demand, they can potentially mitigate the severity of economic fluctuations. 例如：救市。(参见前面AD移动的原因)</li></ul><h2 id="AS-曲线移动"><a href="#AS-曲线移动" class="headerlink" title="AS 曲线移动"></a>AS 曲线移动</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/22.jpg" class=""><div class="note danger">停滞性通货膨胀 Stagflation：a period of falling ouput and rising price ($Y \downarrow, P \uparrow$，即$SRAS: \leftarrow$)，无法自动回复</div><div class="note success">$SRAS: \leftarrow$, $Y \downarrow$, $P \uparrow$, $成本\uparrow$, $SRAS: \leftarrow$, 恶性循环，回不去，政府救市：$AD: \rightarrow$</div><div class="note info">政府救市：牺牲Price Level</div><div class="note default">Recession: $Y \downarrow$, $P \downarrow$, 即$AD: \leftarrow$</div><div class="note default">Depression: Severe Recession.</div><h2 id="AS-移动的结论"><a href="#AS-移动的结论" class="headerlink" title="AS 移动的结论"></a>AS 移动的结论</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/23.jpg" class=""><h2 id="LRAS-和-AD-价格和通货膨胀"><a href="#LRAS-和-AD-价格和通货膨胀" class="headerlink" title="LRAS 和 AD - 价格和通货膨胀"></a>LRAS 和 AD - 价格和通货膨胀</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/24.jpg" class=""><div class="note danger">随着LRAS在不停地增加，Price Level不断增加</div><div class="note danger">$P$一直在被往上抬，国家也在发展。</div><h2 id="有关做题技巧"><a href="#有关做题技巧" class="headerlink" title="有关做题技巧"></a>有关做题技巧</h2><div class="note info">LRAS除非生产力变化，是不会动的</div><h2 id="Supply-Shock"><a href="#Supply-Shock" class="headerlink" title="Supply Shock"></a>Supply Shock</h2><div class="note info">供给冲击（Supply Shock）：指的是特种商品价格与其他种类商品相比发生的变化，即相对价格变化。</div><div class="note info">但是经济不是独立存在的，一种商品的价格变化，会导致其他商品的生产成本发生变化，所以supply shock会使得general price level 提高。</div><div class="note primary">supply shock的例子：洪水，地震，.... 也有好的supply shock</div><h1 id="财政政策-Fiscal-Policy"><a href="#财政政策-Fiscal-Policy" class="headerlink" title="财政政策 - Fiscal Policy"></a>财政政策 - Fiscal Policy</h1><h2 id="财政政策-政府"><a href="#财政政策-政府" class="headerlink" title="财政政策 - 政府"></a>财政政策 - 政府</h2><div class="note success">Multiplier Effect：如果政府开销了一笔钱，那么AD的增加量会大于这笔钱</div><div class="note info">原因：这笔钱给了人，人们赚了钱，促进了消费，循环往复</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/25.jpg" class=""><h2 id="MPC-Marginal-Propensity-to-Consume"><a href="#MPC-Marginal-Propensity-to-Consume" class="headerlink" title="MPC - Marginal Propensity to Consume"></a>MPC - Marginal Propensity to Consume</h2><div class="note info">定义：多拿到一块钱，会花多少的比例</div><div class="note primary">例子：每当household多拿到1美金，他花了0.75，那么MPC = 3/4</div><script type="math/tex; mode=display">MPS~\text {(Savings)} = 1 - MPC</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/26.jpg" class=""><p>由上面这张图我们可以发现，对Consumption影响的总加和就是等比数列求和。我们定义20 billian前面的系数和为 <strong>Multiplier</strong>：</p><script type="math/tex; mode=display">\text {(Government Spending) Multiplier} = 1 + MPC + MPC^2 + MPC^3 + \cdots = \frac 1 {1 - MPC}</script><div class="note success">注：第一笔计入Government Spending，剩下的是增加C</div><h2 id="财政政策-减税"><a href="#财政政策-减税" class="headerlink" title="财政政策 - 减税"></a>财政政策 - 减税</h2><p>还是举个例子，如果给20 billian减税，相比Government Spending，就是减少了一开始的20 billian，之后的C的带动还是存在的，此时的Multiplier：</p><script type="math/tex; mode=display">\text {Tax Multiplier} = MPC + MPC^2 + MPC^3 + \cdots = \frac {MPC}{1 - MPC}</script><div class="note info">同等数额的G和T的调整（反向），G对于经济的AD的影响更大，差值为源头的那笔钱。</div><div class="note primary">所有的C、I、G、NX的增加，都会有Multiplier，算的方法和G的Multiplier一样。</div><h2 id="挤出效应-Crowding-out-Effect"><a href="#挤出效应-Crowding-out-Effect" class="headerlink" title="挤出效应 - Crowding out Effect"></a>挤出效应 - Crowding out Effect</h2><div class="note info">扩张性财政政策都会导致Crowding out effect</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/27.jpg" class=""><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/55.jpg" class=""><div class="note info">政府花销的增加会导致国民储蓄的减少，导致利率的增加。</div><h2 id="AE-模型"><a href="#AE-模型" class="headerlink" title="AE 模型"></a>AE 模型</h2><script type="math/tex; mode=display">AE = C + G + I + NX = \text {planned spending}</script><ul><li>y轴的截距：Autonomous Spending</li></ul><script type="math/tex; mode=display">\text {planned spending} = MPC \times \text {Real GDP} + \text {Autonomous Spending}</script><ul><li>斜率：$MPC$</li><li>交点：Equilibrium</li><li>Potential GDP = Full Employment</li><li>如果在Potential GDP的左侧，则没有Full Employment，中间Y的Gap称为Recession Gap。</li></ul><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/28.jpg" class=""><h2 id="流动性偏好理论-Liquidity-Preference"><a href="#流动性偏好理论-Liquidity-Preference" class="headerlink" title="流动性偏好理论 - Liquidity Preference"></a>流动性偏好理论 - Liquidity Preference</h2><div class="note info">在本章我们假设预期通胀率不变，则根据Fisher's Effect, nominal interest rate和real interest rate同时变化</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/29.jpg" class=""><div class="note danger">因为这里inflation rate是不变的，两个Interest rate同时变化，但是这张图就是nominal Interest rate</div><h2 id="MS-竖直的原因"><a href="#MS-竖直的原因" class="headerlink" title="MS 竖直的原因"></a>MS 竖直的原因</h2><p>因为Money Supply是Fed来决定的，和Interest Rate没关系，所以是fixed的。</p><h2 id="MD-斜向下的原因"><a href="#MD-斜向下的原因" class="headerlink" title="MD 斜向下的原因"></a>MD 斜向下的原因</h2><p>Holding Money的机会成本就是Interest Rate.</p><h2 id="Money-Market-与-AD-关系"><a href="#Money-Market-与-AD-关系" class="headerlink" title="Money Market 与 AD 关系"></a>Money Market 与 AD 关系</h2><div class="note success">解释了“AD斜向下的原因中的Interest Rate Effect”</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/30.jpg" class=""><h2 id="MD-移动"><a href="#MD-移动" class="headerlink" title="MD 移动"></a>MD 移动</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/54.jpg" class=""><h2 id="MS-MD-移动"><a href="#MS-MD-移动" class="headerlink" title="MS-MD 移动"></a>MS-MD 移动</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/31.jpg" class=""><div class="note info">AD的点动 -> MD的线动</div><div class="note info">MS的线动 -> AD的线动</div><div class="note info">MD的线动 -> AD的线动</div><h2 id="MS-MD-结论"><a href="#MS-MD-结论" class="headerlink" title="MS-MD 结论"></a>MS-MD 结论</h2><ul><li>(1) A higher price level raises money demand.</li><li>(2) Higher money demand leads to a higher interest rate.</li><li>(3) A higher interest rate reduces the quantity of goods and of goods and services demanded.<ul><li>当ir升高的时候，人们就不会倾向于借钱进行residential investment</li><li>当ir升高的时候，企业就不会倾向于节前进行business investment</li></ul></li></ul><h2 id="财政政策对可贷资金市场的影响"><a href="#财政政策对可贷资金市场的影响" class="headerlink" title="财政政策对可贷资金市场的影响"></a>财政政策对可贷资金市场的影响</h2><div class="note success">扩张性财政政策导致国民储蓄降低，可贷资金市场的供给曲线左移</div><div class="note success">紧缩性财政政策导致国民储蓄增加，可贷资金市场的供给曲线右移</div><h1 id="开放经济-Open-Economy"><a href="#开放经济-Open-Economy" class="headerlink" title="开放经济 - Open Economy"></a>开放经济 - Open Economy</h1><h2 id="开放经济的基本概念"><a href="#开放经济的基本概念" class="headerlink" title="开放经济的基本概念"></a>开放经济的基本概念</h2><script type="math/tex; mode=display">\text {NX = Value of country’s exports} - \text {Value of country’s imports}</script><ul><li><strong>Trade Balance</strong> - 就是 $\text {NX}$</li><li><strong>Trade Surplus</strong> - 出口大于进口 $\text {NX &gt; 0}$</li><li><strong>Trade Dificit</strong> - 出口小于进口 $\text {NX &lt; 0}$</li><li><strong>Balanced Trade</strong> - 出口等于进口 $\text {NX = 0}$</li></ul><h2 id="影响NX的因素"><a href="#影响NX的因素" class="headerlink" title="影响NX的因素"></a>影响NX的因素</h2><ul><li>The tastes of consumers for domestic and foreign goods<ul><li>对外国商品的兴趣增加，进口上升</li></ul></li><li>The prices of goods at home and abroad<ul><li>本国和外国的价格差距</li></ul></li><li>The exchange rates at which people can use domestic currency to buy foreign currencies<ul><li>美元升值，中国减少进口</li></ul></li><li>The incomes of consumers at home and abroad<ul><li>本国人的收入</li></ul></li><li>The cost of transporting goods from country to country<ul><li>跨国运输的费用</li></ul></li><li>Government policies toward international trade<ul><li>政府政策（Tariff、Quota、…）</li></ul></li></ul><h2 id="美国的国际贸易"><a href="#美国的国际贸易" class="headerlink" title="美国的国际贸易"></a>美国的国际贸易</h2><ul><li>out-sourcing - 外包</li></ul><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/32.jpg" class=""><h2 id="净资本外流-NCO"><a href="#净资本外流-NCO" class="headerlink" title="净资本外流 - NCO"></a>净资本外流 - NCO</h2><p><strong>Net Capital Outflow</strong> = 我们国家的买了多少国外的（钱） - 国外的买了多少我们的（钱）</p><script type="math/tex; mode=display">\text {NCO = NX}</script><p>很好的例子：</p><p>Net capital outflow = Purchase of foreign assets by domestic residents - Purchase of domestic assets by foreigners.<br>其中：capital是资本；assets是资产，比如债券股票等</p><ol><li>本国人民对外国投资买了外国的债券（资产），NCO上升，也就是说“本国的资产外流增加了/本国资产外流了”</li><li>外国人民对本国投资买了本国的债券（资产），NCO下降，也就是说“本国的资产内流增加了”</li></ol><p>在我们刚才讲的例子里，你卖了10000yen的软件，这时候你的NX增加了10000，你会如何处理这10000yen呢？</p><ol><li>不花，攥在手里，就等于你投资了10000yen（购买外币也是一种投资），NCO增加了10000，所以$NX=NCO$</li><li>或者买日本的游戏机，这时候你的NX又减少了10000，现在$NX=NCO=0$</li><li>或者对日本进行投资，比如买日本的股票，这时候$NCO$增加了10000，也就等于$NX$</li><li>或者去银行换成本国货币，但是这笔钱终究要通过银行进行上面的三种操作，所以结局还是$NCO=NX$</li></ol><script type="math/tex; mode=display">Y = C + I + G + NX</script><script type="math/tex; mode=display">Y - C - G = I + NX</script><script type="math/tex; mode=display">S = I + NX = I + NCO</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/33.jpg" class=""><h2 id="Balance-of-Payment"><a href="#Balance-of-Payment" class="headerlink" title="Balance of Payment"></a>Balance of Payment</h2><p>理解为：账本</p><ul><li>Money Coming - Credit (出口)</li><li>Money Going - Debit (进口)</li></ul><h3 id="Current-Account"><a href="#Current-Account" class="headerlink" title="Current Account"></a>Current Account</h3><div class="note info">主要考察商品和服务，以及转移支付，如：赠礼，等</div><div class="note danger">注：Current Account不等于NX，因为还有转移支付</div><script type="math/tex; mode=display">\text {Current Account} = \text {Trade Balance + Service Balance + Transfer of Money}</script><script type="math/tex; mode=display">\text {Current Account} = \text {NX + Transfer of Money}</script><h3 id="Financial-Account-Capital-Account"><a href="#Financial-Account-Capital-Account" class="headerlink" title="Financial Account (Capital Account)"></a>Financial Account (Capital Account)</h3><div class="note info">又称 Capital Account</div><div class="note primary">主要Track的是Assets</div><div class="note success">Assets: Stocks, Bonds, Captials, Factories, and land, etc.</div><script type="math/tex; mode=display">\text {Financial Account = Foreign Purchases of US Assets} - \text {US Purchase of Foreign Assets}</script><div class="note danger">注：Financial Account描述的是别的国家流进来的钱，而NCO描述的是我们国家流出去的钱。</div><div class="note default">注：如果我们国家买别的国家的多余别的国家买我们国家的，则$\text {Financial Account < 0}$，我们是Net Creditor，反之，是Net Debtor。</div><h2 id="Net-Balance-of-Payment"><a href="#Net-Balance-of-Payment" class="headerlink" title="Net Balance of Payment"></a>Net Balance of Payment</h2><script type="math/tex; mode=display">\text {Net Balance of Payment = CA + FA = 0}</script><div class="note info">不等于零的办法：加一个“Statistical Discrepancy / Reserve Account” = Fed buys or sells currency to resolve the difference</div><script type="math/tex; mode=display">CA < 0, FA > 0</script><script type="math/tex; mode=display">CA > 0, FA < 0</script><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/33.jpg" class=""><h2 id="关于Investment和Investment-Income"><a href="#关于Investment和Investment-Income" class="headerlink" title="关于Investment和Investment Income"></a>关于Investment和Investment Income</h2><div class="note info">Investment计入Financial Account</div><div class="note primary">Investment Income计入Current Account，作为转移支付</div><h2 id="Trade-Restriction"><a href="#Trade-Restriction" class="headerlink" title="Trade Restriction"></a>Trade Restriction</h2><ul><li>Embargo经济制裁: Prohibition against trading particular goods or with particular countries</li><li>Tariff/custom duties关税: A tax imposed on imported goods</li><li>Dumping倾销: A firm sells good for less abroad than it does in its home market 在国外卖的价格要比国内便宜</li><li>Import Quotas配额: Restricting the quantity of a particular good that can be imported</li><li>问题：影响国内的employment</li></ul><h2 id="汇率-Exchange-Rate"><a href="#汇率-Exchange-Rate" class="headerlink" title="汇率 - Exchange Rate"></a>汇率 - Exchange Rate</h2><ul><li><strong>Nominal Exchange Rate</strong>: the rate at which a person can trade the currency of one country for the currency of another</li><li>在实际生活中，换汇机构为了赚取利润，货币的买入价和卖出价可能不同</li><li><strong>货币升值 - appreciation</strong>: an increase in the value of a currency as measured by the amount of foreign currency it can buy<ul><li><em>“strong” or “strengthen”</em></li></ul></li><li><strong>货币贬值 - depreciation</strong>: a decrease in the value of a currency as measured by the amount of foreign currency it can buy<ul><li><em>“weak” or “weaken</em></li></ul></li><li><strong>Real Exchange Rate</strong>: the rate at which a person can trade the goods and<br>services of one country for the goods and services of another <div class="note info">Real Interest Rate可以用来衡量货币的受欢迎程度。</div></li></ul><script type="math/tex; mode=display">\text {Real Exchange Rate =} \frac {\text {Nominal Exchange Rate} \times \text {Domestic Price}}{\text {Foreign Price}}</script><p>设$e$为$\text {Nominal Interest Rate}$，$P$为美国的物价，$P^*$为国外的物价，则可以用购买力来衡量：</p><script type="math/tex; mode=display">\frac 1 P = \frac e {P^*}</script><script type="math/tex; mode=display">e = \frac {P^*} P</script><h2 id="美元的市场-Foreign-Exchange-Market-of-Dollar"><a href="#美元的市场-Foreign-Exchange-Market-of-Dollar" class="headerlink" title="美元的市场 - Foreign Exchange Market of Dollar"></a>美元的市场 - Foreign Exchange Market of Dollar</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/35.jpg" class=""><div class="note info">纵轴就是1美元能买多少Pesos，即Pesos / Dollar，Pesos per Dollar</div><div class="note info">纵轴降低代表美元贬值</div><div class="note info">纵轴提高代表美元升值</div><div class="note warning">货币升值不利于出口</div><h3 id="Demand-for-Dollars"><a href="#Demand-for-Dollars" class="headerlink" title="Demand for Dollars"></a>Demand for Dollars</h3><ul><li>别的国家对美国出口的需求<ul><li>$D_{\text{Export}} \uparrow ~~\Rightarrow~ D_{\text {Dollars}} \uparrow$<ul><li>$\text {Price Level} \downarrow ~~\Rightarrow~ D_{\text{Export}} \uparrow$</li><li>$\text {Foreign Income} \uparrow ~~\Rightarrow~ D_{\text{Export}} \uparrow$</li><li>$\text {Foreign Tastes} \uparrow ~~\Rightarrow~ D_{\text{Export}} \uparrow$</li></ul></li></ul></li><li>$\text {US IR} \uparrow~~\Rightarrow~ D_{\text {Dollars}} \uparrow, S_{\text {Pesos}} \uparrow, D_{\text{Pesos} \downarrow}$</li><li>Expected Future Exchange Rates - 预计到未来的利率</li></ul><h3 id="Supply-of-Dollars"><a href="#Supply-of-Dollars" class="headerlink" title="Supply of Dollars"></a>Supply of Dollars</h3><ul><li>美国对进口的需求增加<ul><li>$D_{\text {Import}} \uparrow~~\Rightarrow ~S_{\text {Dollars}} \uparrow$<ul><li>$\text {Foreign Price Levels} \downarrow ~~\Rightarrow~ D_{\text{Import}} \uparrow$</li><li>$\text {National Income} \uparrow ~~\Rightarrow~ D_{\text{Import}} \uparrow$</li><li>$\text {Foreign Tastes} \uparrow ~~\Rightarrow~ D_{\text{Import}} \uparrow$</li></ul></li></ul></li><li>别国利率的增加，别国货币的供给降低，美元供给增加</li></ul><h2 id="Inflationary-Gap"><a href="#Inflationary-Gap" class="headerlink" title="Inflationary Gap"></a>Inflationary Gap</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/36.jpg" class=""><p>通货膨胀通常是由AD过量产生的。</p><div class="note info">长期可以自我恢复，但是是以Price Level提高为代价（SRAS移动）。</div><div class="note success">但是Policy Makers也可以调控，使用 <b>紧缩政策 - Contractionary Policy</b>，降低AD来调控。</div><div class="note warning">但是通常情况下 Policy Makers不知道该调控多少。</div><h2 id="Recessionary-Gap"><a href="#Recessionary-Gap" class="headerlink" title="Recessionary Gap"></a>Recessionary Gap</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/37.jpg" class=""><p>由于AD降低引发的通货膨胀：</p><div class="note info">SRAS的移动，会在长期自行恢复</div><div class="note success">政府也可以用<b>扩张政策 - Expansionary Policy</b>，提高AD来调控</div><div class="note warning">不能很好地调控，比如2008年的全球金融危机。</div><h2 id="稳定经济的政策"><a href="#稳定经济的政策" class="headerlink" title="稳定经济的政策"></a>稳定经济的政策</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/38.jpg" class=""><h2 id="凯恩斯对于经济波动的理论"><a href="#凯恩斯对于经济波动的理论" class="headerlink" title="凯恩斯对于经济波动的理论"></a>凯恩斯对于经济波动的理论</h2><ul><li>Keynes (and his many followers) argued that aggregate demand fluctuates because of largely irrational waves of pessimism and optimism.</li><li>When pessimism reigns, households reduce consumption spending and firms reduce investment spending.</li><li>The result is reduced aggregate demand, lower production, and higher unemployment.</li><li>Conversely, when optimism reigns, households and firms increase spending.</li><li>The result is higher aggregate demand, higher production, and inflationary pressure.</li></ul><div class="note info">人话：市场可以被人的想法 / 谣言 所影响</div><div class="note info">在这种情况下，就需要Fed和Gov出手维护稳定。</div><div class="note success">总结：凯恩斯支持Fed / Gov 出手</div><h2 id="对凯恩斯理论的反对声音"><a href="#对凯恩斯理论的反对声音" class="headerlink" title="对凯恩斯理论的反对声音"></a>对凯恩斯理论的反对声音</h2><ul><li>These policies affect the economy with a long lag.<ul><li>货币政策是通过调整ir以影响investment来对经济进行调整的。但是对于很多企业来说，他们会提前制定投资计划，所以一些经济学家认为monetary policy至少需要六个月才能对经济的output和employment起作用</li><li>但是一旦这些政策起作用，它们的影响就是深远的，并且会导致经济进一步恶化</li><li>财政政策对经济的影响也是有延迟的：在美国的法律下，通过一条财政政策的议案需要几个月甚至几年</li><li>由于很多经济的recession和depression都是无法预测的，所以这些lag导致政策对于经济的影响并不是很有效率。</li></ul></li></ul><h2 id="经济自动稳定剂-Tax-System"><a href="#经济自动稳定剂-Tax-System" class="headerlink" title="经济自动稳定剂 - Tax System"></a>经济自动稳定剂 - Tax System</h2><div class="note info">因为实行阶梯税，所以经济繁荣，税多，经济衰退，税少</div><h2 id="经济自动稳定剂-Government-Spending"><a href="#经济自动稳定剂-Government-Spending" class="headerlink" title="经济自动稳定剂 - Government Spending"></a>经济自动稳定剂 - Government Spending</h2><div class="note info">很简单的例子：失业救济金。失业的人多，G多，反之，G少。</div><h2 id="古典经济学模型"><a href="#古典经济学模型" class="headerlink" title="古典经济学模型"></a>古典经济学模型</h2><ul><li>The fundamental principle of the classical theory is that the economy is <strong>self-regulating - 能够自我调整</strong>.</li><li>Thus: <strong>The economy is always at or near the natural level of real GDP</strong></li><li>两个重要的假设：<ul><li><strong>Say’s Law</strong></li><li>The belief that prices, wages, and interest rates are <strong>flexible</strong>.</li></ul></li></ul><div class="note info">Flexible和Sticky相对。真实情况其实是Sticky的（详见SRAS斜向上的原因）</div><div class="note primary">古典经济学家不支持政府 / Fed对经济调控</div><h2 id="Say’s-Law-萨伊市场定律"><a href="#Say’s-Law-萨伊市场定律" class="headerlink" title="Say’s Law - 萨伊市场定律"></a>Say’s Law - 萨伊市场定律</h2><ol><li>生产的目的就是为了销售，所有的商品生产后，一定可以销售。<blockquote><p><em>“Supply creates its own demand.”</em></p></blockquote></li><li>钱只是媒介<blockquote><p><em>“Money is just a medium.”</em><br>如果没有货币存在（barter economy），生产者没有必要储存多余的产品，也没有储存财富的必要，因此每个生产者也是消费者，因此总供给等于总需求，AD = AS</p></blockquote></li><li>就算有局部供求不一致产生，也会由于自由价格机制回复到使得 <strong>Demand = Supply</strong> 的情况</li></ol><h2 id="Implication-of-Say’s-Law"><a href="#Implication-of-Say’s-Law" class="headerlink" title="Implication of Say’s Law"></a>Implication of Say’s Law</h2><ul><li>劳动市场论<ul><li>Pigou’s Unemployment</li><li>除了一般的摩擦性失业和一般自愿失业者外，整个资本主义社会应该是达到充分就业的</li><li>To increase output, we should concentrate on increasing production rather than demand.</li></ul></li></ul><div class="note info">他们认为，要促进Supply来促进经济。Supply-side Economists</div><h2 id="对古典经济学模型的反对"><a href="#对古典经济学模型的反对" class="headerlink" title="对古典经济学模型的反对"></a>对古典经济学模型的反对</h2><div class="note primary">供过于求在Recession和Depression时经常发生。</div><h1 id="失业和通货膨胀的短期权衡"><a href="#失业和通货膨胀的短期权衡" class="headerlink" title="失业和通货膨胀的短期权衡"></a>失业和通货膨胀的短期权衡</h1><h2 id="扩张政策和紧缩政策"><a href="#扩张政策和紧缩政策" class="headerlink" title="扩张政策和紧缩政策"></a>扩张政策和紧缩政策</h2><ul><li><strong>扩张政策 - Expansionary Policy</strong>：增加AD<ul><li>Fiscal<ul><li>Decrease Tax</li><li>Increase G</li></ul></li><li>Monetary<ul><li>Open Market Purchase</li><li>Decrease Discount Rate</li><li>Decrease Reserve Requirement</li></ul></li></ul></li><li><strong>紧缩政策 - Contractionary Policy</strong>：减少AD</li></ul><h2 id="Phillips-Curve-菲利普斯曲线"><a href="#Phillips-Curve-菲利普斯曲线" class="headerlink" title="Phillips Curve - 菲利普斯曲线"></a>Phillips Curve - 菲利普斯曲线</h2><p><strong>Phillips curve</strong>: a curve that shows the short-run trade-off between<br>inflation and unemployment</p><div class="note info">人话：菲利普斯曲线体现出了通货膨胀和失业率的短期权衡。</div><script type="math/tex; mode=display">\text {Inflation Rate} \uparrow ~~~~~~~~ \text {Unemployment Rate} \downarrow</script><script type="math/tex; mode=display">\text {Inflation Rate} \downarrow ~~~~~~~~ \text {Unemployment Rate} \uparrow</script><h2 id="SRPC-短期菲利普斯曲线"><a href="#SRPC-短期菲利普斯曲线" class="headerlink" title="SRPC - 短期菲利普斯曲线"></a>SRPC - 短期菲利普斯曲线</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/39.jpg" class=""><h2 id="LRPC-长期菲利普斯曲线"><a href="#LRPC-长期菲利普斯曲线" class="headerlink" title="LRPC - 长期菲利普斯曲线"></a>LRPC - 长期菲利普斯曲线</h2><div class="note info">自然失业率就是长期的值</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/40.jpg" class=""><h2 id="SRPC-和-ADAS"><a href="#SRPC-和-ADAS" class="headerlink" title="SRPC 和 ADAS"></a>SRPC 和 ADAS</h2><div class="note danger">AD的线动，对于SRPC是点动</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/41.jpg" class=""><h2 id="LRPC-和-ADAS"><a href="#LRPC-和-ADAS" class="headerlink" title="LRPC 和 ADAS"></a>LRPC 和 ADAS</h2><div class="note info">AD的线动，对于LRPC也是点动</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/42.jpg" class=""><h2 id="Expected-Inflation-通货膨胀的预期"><a href="#Expected-Inflation-通货膨胀的预期" class="headerlink" title="Expected Inflation - 通货膨胀的预期"></a>Expected Inflation - 通货膨胀的预期</h2><div class="note info">又称Inflationary Expectation</div><div class="note info">人话：人们对通货膨胀的预期（Price Level的预期）</div><div class="note primary">如果在短期，Fed采用扩张政策，上调通货膨胀率，就会同时降低失业率（下面的公式），但是在长期还是会回来</div><script type="math/tex; mode=display">\text {Unemployment Rate = Natural Unemployment Rate} - \alpha (\text {Actual Inflation} - \text {Expected Inflation})</script><script type="math/tex; mode=display">\alpha > 0</script><div class="note success">所以只有出其不意的政策才能调控。（短期）</div><div class="note primary">但是如果Inflationary Expectation增高了是一件非常不好的事情，会使得Price和Wages提高，会使得SRAS向左移动，导致Stagflation。</div><div class="note danger">Expected Inflation提高，会导致SRPC向右移动。</div><h2 id="货币政策导致SRPC移动"><a href="#货币政策导致SRPC移动" class="headerlink" title="货币政策导致SRPC移动"></a>货币政策导致SRPC移动</h2><p>紧缩政策，MS减少，Expected Inflation降低，导致SRPC的左移</p><p>扩张政策，MS增加，Expected Inflation提高，导致SRPC的右移</p><h2 id="SRPC-的移动"><a href="#SRPC-的移动" class="headerlink" title="SRPC 的移动"></a>SRPC 的移动</h2><div class="note info">1. 先是政策导致AD的移动，导致SRPC的点动</div><div class="note primary">2. 再是SRAS的移动，导致SRPC的线动，失业率回到自然失业率，但是Inflation Rate (Price Level) 被永久的提高了</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/43.jpg" class=""><h2 id="LRPC-的移动"><a href="#LRPC-的移动" class="headerlink" title="LRPC 的移动"></a>LRPC 的移动</h2><div class="note info">LRPC只和Natural Unemployment Rate有关</div><div class="note info">生产力的提高，左移</div><div class="note info">生产力的降低，右移</div><h2 id="AD-AS-PC-移动综合"><a href="#AD-AS-PC-移动综合" class="headerlink" title="AD-AS-PC 移动综合"></a>AD-AS-PC 移动综合</h2><div class="note primary">Output $\uparrow$, Unemployment $\downarrow$</div><div class="note primary">Price Level $\uparrow$, Inflation $\uparrow$</div><div class="note info">无Policy Maker时，AS移动恢复</div><div class="note info">有Policy Maker时，AD移动恢复</div><div class="note info">在AS向左移动时，不可能自行恢复（Stagflation）</div><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/44.jpg" class=""><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/45.jpg" class=""><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/46.jpg" class=""><div class="note info">前面Supply Shock如果没有Policy Maker可能无法恢复，造成stagflation</div><h1 id="零碎知识点"><a href="#零碎知识点" class="headerlink" title="零碎知识点"></a>零碎知识点</h1><h2 id="Autonomous-Investment"><a href="#Autonomous-Investment" class="headerlink" title="Autonomous Investment"></a>Autonomous Investment</h2><p>不随Interest Rate变化的Investment</p><h2 id="Autonomous-Consumption"><a href="#Autonomous-Consumption" class="headerlink" title="Autonomous Consumption"></a>Autonomous Consumption</h2><p>不随Income变化的Consumption（刚需）</p><h2 id="Prime-Rate"><a href="#Prime-Rate" class="headerlink" title="Prime Rate"></a>Prime Rate</h2><p>“优惠利率” - 银行提供给信用等级最高的贷款客户的贷款利率。</p><h2 id="Interest-Sensitive-Expenditure"><a href="#Interest-Sensitive-Expenditure" class="headerlink" title="Interest-Sensitive Expenditure"></a>Interest-Sensitive Expenditure</h2><p>对利率铭感的消费：比如买房，买车（贷款的消费）</p><h2 id="如何解释Economic-Growth和Investment"><a href="#如何解释Economic-Growth和Investment" class="headerlink" title="如何解释Economic Growth和Investment"></a>如何解释Economic Growth和Investment</h2><p>答案：Because increase investment will increase capital formation, and will thus boost economic growth.</p><h2 id="一个有趣的例子"><a href="#一个有趣的例子" class="headerlink" title="一个有趣的例子"></a>一个有趣的例子</h2><p>如果欧元相对于美元升值了，原来US的Current Account = 0，问现在US的Current Account怎么变化？</p><p>答：因为美元贬值了，所以美国的对欧洲的进口减少了，所以Current Acount中出口 + Transfer Payment &gt; 进口，所以会Surplus。</p><h2 id="MS和银行的贷款能力"><a href="#MS和银行的贷款能力" class="headerlink" title="MS和银行的贷款能力"></a>MS和银行的贷款能力</h2><p>如果Fed买bonds，那么MS减少，银行贷款能力降低。</p><h2 id="Inflation和Price-Level的关系"><a href="#Inflation和Price-Level的关系" class="headerlink" title="Inflation和Price Level的关系"></a>Inflation和Price Level的关系</h2><p>Price Level下降，Inflation Rate下降，但不一定造成Deflation。</p><h2 id="Aggregate-Income"><a href="#Aggregate-Income" class="headerlink" title="Aggregate Income"></a>Aggregate Income</h2><p>可以理解为AD曲线的横轴 - Output，GDP之类的东西</p><div class="note info">扩张性政策会导致Aggregate Income增加</div><div class="note info">紧缩性政策反之。</div><h2 id="关于借钱和Inflation"><a href="#关于借钱和Inflation" class="headerlink" title="关于借钱和Inflation"></a>关于借钱和Inflation</h2><p>解释方法：real value</p><div class="note primary">inflation增加时，问别人借钱的人划算</div><div class="note info">反之，借给别人钱的人划算</div><h1 id="AP-2020-特辑"><a href="#AP-2020-特辑" class="headerlink" title="AP 2020 特辑"></a>AP 2020 特辑</h1><h2 id="考试时间"><a href="#考试时间" class="headerlink" title="考试时间"></a>考试时间</h2><ol><li>考试时间：北京时间5月22日凌晨4点</li><li>宏微观均只有2道FRQ问题<ul><li>Question 1(55%): 25 minutes+5 minutes to upload response</li><li>Question 2(45%): 15 minutes+ 5 minutes to upload response</li></ul></li><li>删减一个单元:仅考察Unt1-5,删除Unit6<ul><li>宏观: Unit 6: Open Economy-International Trade and Finance (10%-13%)</li></ul></li><li>开卷考试:允许课堂笔记计算器的使用</li><li>Q1 = FRQ2 + FRQ3</li><li>Q2 = FRQ1</li></ol><h2 id="考点"><a href="#考点" class="headerlink" title="考点"></a>考点</h2><div class="table-container"><table><thead><tr><th style="text-align:center">Units</th><th style="text-align:center">Exam Weighting</th></tr></thead><tbody><tr><td style="text-align:center">Unit 1: Basic Economic Concepts</td><td style="text-align:center">5-10%</td></tr><tr><td style="text-align:center">Unit 2: Economic Indicators and the Business Cycle</td><td style="text-align:center">12-17%</td></tr><tr><td style="text-align:center">Unit 3: National Income and Price determination</td><td style="text-align:center">17-27%</td></tr><tr><td style="text-align:center">Unit 4: Financial Sector</td><td style="text-align:center">18-23%</td></tr><tr><td style="text-align:center">Unit 5: Long- Run Consequences of Stabilization Policies</td><td style="text-align:center">20-30%</td></tr><tr><td style="text-align:center">Unit 6: Open Economy—International Trade and Finance</td><td style="text-align:center">10-13%</td></tr></tbody></table></div><ul><li>Unit 1非常容易与其他单元组合考察,如:</li><li>PPC 和 Economic growth之间的关系(生产力!)</li><li>Unit 2 + 4有可能出简单计算题目</li><li>Unit 3 + 4 + 5一定会出1道题一一一向都是综合性很强的章节<ul><li>ADAS模型/ Policymaker对经济的调控/由此对经济指标的影响</li></ul></li></ul><h2 id="Unit-1-FRQ-1"><a href="#Unit-1-FRQ-1" class="headerlink" title="Unit 1 - FRQ - 1"></a>Unit 1 - FRQ - 1</h2><p>The following table shows the number of donuts or cupcakes that John and Erica ccan each produce in one day.</p><div class="table-container"><table><thead><tr><th style="text-align:center">/</th><th style="text-align:center">Donuts</th><th style="text-align:center">Cupcakes</th></tr></thead><tbody><tr><td style="text-align:center">John</td><td style="text-align:center">200</td><td style="text-align:center">100</td></tr><tr><td style="text-align:center">Erica</td><td style="text-align:center">150</td><td style="text-align:center">50</td></tr></tbody></table></div><ul><li>(a) who has the absolute advantage in producing donuts? Explain<ul><li><strong>Solution</strong> John has the absolute advantage in producing donuts, because $200 &gt; 150$.</li></ul></li><li>(b) Who has the comparative advantage in producing donuts? Explain<ul><li><strong>Solution</strong> Erica has the comparitive advantage in producing donuts, because the opportunity cost for John to produce donuts is $0.5$ cupcakes / unit and the opportunity cost for Erica to produce donuts is $\displaystyle \frac{1}{3}$ cupcakes / unit. Since $\displaystyle\frac 1 3 &lt; \displaystyle\frac 1 2$, Erica has the comparitive advantage.</li></ul></li><li>(c) Assume that John and Erica decide to specialize according to their comparative advantages and that one cupcake is exchanged for four donuts<ul><li>(i) Indicate whether or not specialization and trade are beneficial to John.<ul><li><strong>Solution</strong> It is beneficial to John, because the the cost of a donut is $\displaystyle\frac{1}{4}$ cupcakes, which is less than the original opportunity cost which is $\displaystyle\frac{1}{2}$.</li></ul></li><li>(ii) Indicate whether or not specialization and trade are beneficial to Erica<ul><li><strong>Solution</strong> It is not beneficial to Erica. Since Erica specialize in producing  donuts, the original opportunity cost of a cupcake is $3$ donuts, but now it takes her $4$ donuts for a cupcake, which is not beneficial to her.</li></ul></li></ul></li><li>(d) Assume that Erica discovers a new cupcake production technique that will increase her daily production of cupcakes only. Using donuts on the horizontal axis, draw a correctly labeled production possibilities curve for Erica, before and after the technology change in cupcake production</li></ul><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/47.jpg" class=""><h2 id="Unit-1-FRQ-2"><a href="#Unit-1-FRQ-2" class="headerlink" title="Unit 1 - FRQ - 2"></a>Unit 1 - FRQ - 2</h2><p>Sweden and Norway use equal quantities of resources to produce food and capital goods. The table below shows the manimum possible production of food OR capital goods for each country.</p><div class="table-container"><table><thead><tr><th style="text-align:center">Country</th><th style="text-align:center">Food</th><th style="text-align:center">Capital Goods</th></tr></thead><tbody><tr><td style="text-align:center">Sweden</td><td style="text-align:center">50</td><td style="text-align:center">100</td></tr><tr><td style="text-align:center">Norway</td><td style="text-align:center">30</td><td style="text-align:center">120</td></tr></tbody></table></div><ul><li>(a) Draw a correctly labeled graph of the production possibilities curve for Sweden. Place food on the horizontal axis and capital goods on the vertical axis. Plot the relevant numerical values on the graph.</li><li>(b)On your graph in part (a), indicate the following<ul><li>(i) A point that represents an efficient level of production, labeled E</li><li>(ii) A point that represents an inefficient level of production, labeled I</li><li>(iii) A point that represents an unattainable level of production, labeled U<img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/48.jpg" class=""></li></ul></li><li>(c)Assume Sweden moves from producing 20 units of food and 60 units of capital goods to producing 30 units of food and 40 units of capital goods. What will happen to economic growth in Sweden in the future?<ul><li><strong>Solution</strong> The rate of economic growth will decrease, since the production of capital goods is reduced.</li></ul></li><li>(d) Which country has the comparative advantage in the production of capital goods? Explain<ul><li><strong>Solution</strong> Norway has the comparative advantage, because $\displaystyle\frac{1}{4} &lt; \displaystyle\frac{1}{2}$</li></ul></li><li>(e)Based on the table above, identify a specific number of units of capital goods that could be traded for 10 units of food and be mutually beneficial<ul><li><strong>Solution</strong> e.g. 30</li></ul></li></ul><h2 id="Unit-2-FRQ-1"><a href="#Unit-2-FRQ-1" class="headerlink" title="Unit 2 - FRQ - 1"></a>Unit 2 - FRQ - 1</h2><p>教科书上最后一道题</p><h2 id="Unit-3-FRQ-1"><a href="#Unit-3-FRQ-1" class="headerlink" title="Unit 3 - FRQ - 1"></a>Unit 3 - FRQ - 1</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/49.jpg" class=""><h2 id="Unit-3-FRQ-2"><a href="#Unit-3-FRQ-2" class="headerlink" title="Unit 3 - FRQ - 2"></a>Unit 3 - FRQ - 2</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/50.jpg" class=""><h2 id="Unit-4-FRQ-1"><a href="#Unit-4-FRQ-1" class="headerlink" title="Unit 4 - FRQ - 1"></a>Unit 4 - FRQ - 1</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/51.jpg" class=""><h2 id="Unit-4-FRQ-2"><a href="#Unit-4-FRQ-2" class="headerlink" title="Unit 4 - FRQ - 2"></a>Unit 4 - FRQ - 2</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/52.jpg" class=""><h2 id="Unit-4-FRQ-3"><a href="#Unit-4-FRQ-3" class="headerlink" title="Unit 4 - FRQ - 3"></a>Unit 4 - FRQ - 3</h2><img src="/2020/04/18/AP-Macroeconomics-%E8%80%83%E5%89%8D%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%87%92%E4%BA%BA%E6%97%A5%E8%AE%B0/53.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;关于生产函数&quot;&gt;&lt;a href=&quot;#关于生产函数&quot; class=&quot;headerlink&quot; title=&quot;关于生产函数&quot;&gt;&lt;/a&gt;关于生产函数&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;经济学家经常使用生产函数来描述投入物数量和产品数量之间的关系。&lt;/li&gt;
&lt;li&gt;假设$Y$表示</summary>
      
    
    
    
    <category term="Economics" scheme="http://gyrojeff.moe/categories/Economics/"/>
    
    
    <category term="Economics" scheme="http://gyrojeff.moe/tags/Economics/"/>
    
  </entry>
  
  <entry>
    <title>200416-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/16/200416-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/16/200416-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-16T07:25:17.000Z</published>
    <updated>2020-09-22T09:41:21.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-16-地理课-工业区位条件"><a href="#4-16-地理课-工业区位条件" class="headerlink" title="4/16 地理课 - 工业区位条件"></a>4/16 地理课 - 工业区位条件</h1><p>基本概念：工业区位条件是指影响工业生产布局的各种自然因素和社会经济因素。</p><script type="math/tex; mode=display">自然因素 \begin{cases}    原料 \\ 能源 \\ 土地 \\ 环境 \\ \cdots\end{cases} \\ 社会经济因素 \begin{cases}    市场 \\ 交通 \\ 劳动力 \\ 科技 \\ 土地价格 \\ \cdots\end{cases}</script><h2 id="工业区位条件"><a href="#工业区位条件" class="headerlink" title="工业区位条件"></a>工业区位条件</h2><ol><li>原料<ul><li>原料是工业发展的基本保证。原料的种类、数量、质量及运输成本对工业区位的影响较大,原料密集型工业尽可能靠近原料产地。</li><li>原料主导型工业：原料容易腐烂、变质,不便于长距离运输,如水产品加工厂、水果罐头厂等。</li></ul></li><li>能源<ul><li>充足的能源供应是工业生产的必要条件,消耗大量能源的工业应考虑接近能源供应地。</li><li>能源主导型工业：炼铝厂、炼铜厂等有色金属冶炼工业在生产过程中需要消耗大量能源,应接近火电厂、水电站或核电站布局。</li></ul></li><li>市场<ul><li>市场是工业生产实现价值的场所。销售才能实现产品的价值,产品需要大量运输的工业更应接近市场。</li><li>市场规模、市场消费特点影响到工业企业的规模和种类。</li><li>市场主导型工业：产品易过期、时效要求高、易损坏、易燃、易爆不便于长距离运输的工业,如食品厂、印刷厂、家具厂、石油化工厂等。</li></ul></li><li>劳动力<ul><li>现代大规模的工业生产不仅需要足够数量的工人,更需要高素质的技术人员和管理人员。</li><li>区域中劳动力的数量、劳动力的价格和劳动力的素质是工业布局的重要前提。</li><li>劳动力主导型工业：纺织工业、普通服装、电子装配、包带、制伞、制鞋等需要投入大量劳动力,劳动力工资成本所占比重较高的工业。</li></ul></li><li>科学技术<ul><li>纺织工业、普通服装、电子装配、包带、制伞、制鞋等需要投入大量劳动力,劳动力工资成本所占比重较高的工业。</li><li>技术主导型工业：集成电路、卫星、飞机、精密仪表等技术要求高的工业。</li></ul></li><li>交通<ul><li>运费是生产成本的重要组成部分。港口、交通枢纽以及大型航空港等交通通达度较高的地方对工业有很大的吸引力。</li><li>上海、马鞍山、武汉、重庆钢铁工业布局都与便利的水运有关。</li></ul></li><li>环境条件<ol><li>工业本身对环境条件的要求<ol><li>高耗水工业: 为便于取水, 往往沿江或沿海分布。</li><li>微电子工业: 需要无尘的生产环境和良好的水质等条件, 因此多布局在空气质量和水质较好的地方。</li></ol></li><li>工业对环境的影响<ol><li>对环境污染较严重的工厂多布局在主导风向的下风向或垂直风向的郊外; 排水口远离水源地和居民区。要求严格控制污染物的排放, 以减少对环境的污染。</li></ol></li></ol></li><li>集聚<ul><li>集聚是工业企业在空间布局上的特点之一,现代工业往往都集聚在城市附近和大型的工业园区、工业开发区内。</li><li>好：集聚可集约地利用土地资源和基础设施,降低生产成本和管理成本;有利于企业间交流信息,加强协作,促进企业的技术创新,可以集中处理污染物。</li><li>坏：如果管理不善,会造成严重的环境污染,资源、能源紧张,住房紧张,交通拥挤,企业间竞争会加剧。</li></ul></li><li>土地价格<ul><li>土地价格是城市工业布局的重要条件</li><li>大型企业厂房、仓库、堆场占地面积大,所以选择城市周边地价比较便宜的地方布局。</li></ul></li></ol><h2 id="风玫瑰图（风频图）"><a href="#风玫瑰图（风频图）" class="headerlink" title="风玫瑰图（风频图）"></a>风玫瑰图（风频图）</h2><ul><li>风玫瑰图可用来简单描述某一地区风向的分布根据各方向风出现的频率, 以相应的比例长度表示, 描在极坐标图上, 然后将各相邻方向的端点用直线连接起来, 就是风向玫瑰图。</li><li>在风玫瑰图的极坐标系上, 每一部分的长度表示该风向出现的频卒, 最长的部分表示该风向出现的频卒最高。</li></ul><img src="/2020/04/16/200416-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><h2 id="案例分析：上海宝钢的区位条件"><a href="#案例分析：上海宝钢的区位条件" class="headerlink" title="案例分析：上海宝钢的区位条件"></a>案例分析：上海宝钢的区位条件</h2><ul><li>资源与交通：上海虽然缺乏煤、铁资源,但宝钢位于上海北部,北临长江,可以利用廉价、方便的水运,从国内安徽淮南、山西等地运进燃料,从澳大利亚、印度、巴西等国进口铁矿石,降低运输成本,提高生产效益。</li><li>环境：宝钢位于长江之滨,不但用水极为方便,而且经过处理的工业污水不会影响市区;宝钢位于上海东北部沿海地区,无论冬夏,工业废气基本不影响市区。</li><li>市场：上海是全国最大的综合性工业基地,上海所在的沪宁杭工业区又是我国最重要的综合性工业区,工业的发展需要消耗大量的钢铁,宝钢建在上海,拥有了钢铁工业发展的大市场。</li><li>劳动力：上海拥有一大批高素质的产业大军和高水平的技术人员,为宝钢建设提供了雄厚的人力资源。</li><li>科学技术：上海拥有众多一流的教育、科研单位,科学技术发达,有利于促进宝钢不断研发出新产品和新技术。</li><li>集聚：上海是我国沿海地区老钢铁工业基地,众多的钢铁企业和相关企业,为宝钢建设提供经验、技术等良好的协作。</li><li>土地价格：上海人多地少,土地资源紧张,厂区选址在上海城市的最外围可以充分发挥地价低的优势。</li></ul><h2 id="学会评价某一区域工业区位条件"><a href="#学会评价某一区域工业区位条件" class="headerlink" title="学会评价某一区域工业区位条件"></a>学会评价某一区域工业区位条件</h2><ul><li>资料:2009年广西铝土矿探明储量约2.3亿吨。</li><li>评价：<ul><li>有利:邻近珠三角、北部湾和东南亚,地理位置优越;铝土矿资源丰富;水能蕴藏量大;市场广阔;铁路和海运交通便利并逐步改善;西部大开发等政策支持。</li><li>不利:环境治理压力大制约铝产业发展。</li></ul></li></ul><p>评价应建立在题目所提供的条件基础上。可以从自然条件、社会经济条件上进行分析,然后找出有利和不利条件进行阐述。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-16-地理课-工业区位条件&quot;&gt;&lt;a href=&quot;#4-16-地理课-工业区位条件&quot; class=&quot;headerlink&quot; title=&quot;4/16 地理课 - 工业区位条件&quot;&gt;&lt;/a&gt;4/16 地理课 - 工业区位条件&lt;/h1&gt;&lt;p&gt;基本概念：工业区位条件是指影</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200416-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/16/200416-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/16/200416-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-16T05:30:54.000Z</published>
    <updated>2020-04-23T05:51:32.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-16-化学课-影响化学反应速率的因素-1"><a href="#4-16-化学课-影响化学反应速率的因素-1" class="headerlink" title="4/16 化学课 - 影响化学反应速率的因素 (1)"></a>4/16 化学课 - 影响化学反应速率的因素 (1)</h1><ul><li>反应物的性质</li><li>浓度</li><li>温度</li><li>压强</li><li>催化剂</li><li>其他</li></ul><ul><li><strong>反应物的性质是决定化学反应速率的根本原因</strong></li></ul><p>浓度、温度等因素一会影响化学反应速率的大小</p><ol><li>选择研究对象 — 一个确定的化学反应<ul><li>有明显的实验现象、易于观察</li><li>速率应该始终</li><li>安全、无污染，方便易行</li></ul></li><li>选择试验方法：控制变量法</li><li>实验研究</li></ol><script type="math/tex; mode=display">\mathrm{Na}_{2} \mathrm{S}_{2} \mathrm{O}_{3}+\mathrm{H}_{2} \mathrm{SO}_{4} \rightarrow \mathrm{S} \downarrow+\mathrm{SO}_{2}+\mathrm{Na}_{2} \mathrm{SO}_{4}+\mathrm{H}_{2} \mathrm{O}</script><h2 id="浓度对化学反应速率影响的实验研究"><a href="#浓度对化学反应速率影响的实验研究" class="headerlink" title="浓度对化学反应速率影响的实验研究"></a>浓度对化学反应速率影响的实验研究</h2><ol><li>结论<br>在其他条件不变时,增大反应物的浓度,化学反应速率加快。<br>在其他条件不变时,减小反应物的浓度,化学反应速率减慢。<br>固体不考虑在内。</li><li>应用<br>日常生活中为了延长食品保质期,一些食品采用充N2包装或加入脱氧剂,其目的都是为了减小O2的浓度,减慢食品氧化变质速率。</li></ol><h2 id="颗粒大小（固体表面积）对化学反应速率影响的研究"><a href="#颗粒大小（固体表面积）对化学反应速率影响的研究" class="headerlink" title="颗粒大小（固体表面积）对化学反应速率影响的研究"></a>颗粒大小（固体表面积）对化学反应速率影响的研究</h2><ol><li>对相同质量的固体物质而言, 颗粒越大,固体表面积越小; 颗粒越小,固体表面积越大。</li><li>结论<br>在其他条件不变时,增大固体颗粒的表面积,化学反应速率加快。<br>在其他条件不变时,减小固体颗粒的表面积,化学反应速率减慢。</li><li>应用：煤粉发电、粉尘爆炸</li></ol><h2 id="温度对化学反应速率影响的研究"><a href="#温度对化学反应速率影响的研究" class="headerlink" title="温度对化学反应速率影响的研究"></a>温度对化学反应速率影响的研究</h2><p>结论：在其他条件不变时,升高反应温度,化学反应速率加快。降低反应温度,化学反应速率减慢。</p><div class="note primary">$\ce {Zn}$和稀硫酸反应速率先变大后变小，是因为这个反应是放热反应，速率先变大，后因为反应物的浓度变小，速率变小。</div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-16-化学课-影响化学反应速率的因素-1&quot;&gt;&lt;a href=&quot;#4-16-化学课-影响化学反应速率的因素-1&quot; class=&quot;headerlink&quot; title=&quot;4/16 化学课 - 影响化学反应速率的因素 (1)&quot;&gt;&lt;/a&gt;4/16 化学课 - 影响化学反</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200415-市物理课</title>
    <link href="http://gyrojeff.moe/2020/04/15/200415-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/15/200415-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-15T12:29:47.000Z</published>
    <updated>2020-04-21T03:12:56.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-15-物理课-功-1"><a href="#4-15-物理课-功-1" class="headerlink" title="4/15 物理课 - 功 (1)"></a>4/15 物理课 - 功 (1)</h1><ol><li>怎样才能做功呢?<ol><li>机械功(功,work): 如果有力作用在物体上,而且物体在力的方向上发生位移,就说力对物体做了功</li><li>功的要素: 力、力的方向上发生的位移</li></ol></li><li>简单机械省力不省功</li><li>公式（恒力做功）：<script type="math/tex; mode=display">W = \vec F \cdot \vec s = Fs\cos \theta</script></li><li>功的单位：焦耳（$J$）<script type="math/tex; mode=display">1J = 1\text {N} \cdot \text{m} = 1 \text {kg}\cdot \text{m}^2 / \text {s}^2</script></li><li>$\theta$角讨论<ul><li>${0} \leq {\theta}&lt;\frac{\pi}{2} \quad \cos \theta&gt;{0} \quad \therefore {W}&gt;\mathbf{0}$, 正功, F是动力, 促使物体运动。</li><li>$\theta=\frac{\pi}{2} \quad \cos \theta=0 \quad \therefore W=0$, 不做功</li><li>$\frac{\pi}{2}&lt;\theta \leq \pi \quad \cos \theta&lt;0 \quad \therefore W&lt;0$, 负功, F是阻力, 阻碍物体运动。可表述为物体克服这个力做功(取绝对值)</li></ul></li><li>功是标量</li><li>公式过程量</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-15-物理课-功-1&quot;&gt;&lt;a href=&quot;#4-15-物理课-功-1&quot; class=&quot;headerlink&quot; title=&quot;4/15 物理课 - 功 (1)&quot;&gt;&lt;/a&gt;4/15 物理课 - 功 (1)&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;怎样才能做功呢?&lt;ol&gt;
&lt;li</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200414-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/14/200414-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/14/200414-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-14T05:33:00.000Z</published>
    <updated>2020-09-22T09:41:20.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-14-化学课"><a href="#4-14-化学课" class="headerlink" title="4/14 化学课"></a>4/14 化学课</h1><script type="math/tex; mode=display">    化学反应条件    \begin{cases}        反应快慢 \rightarrow 化学反应速率问题 \\ 反应程度 \rightarrow 化学平衡问题    \end{cases}</script><script type="math/tex; mode=display">    研究化学反应快慢目的    \begin{cases}        认识化学反应快慢规律 \\ 科学调控反应快慢     \end{cases}</script><h2 id="化学反应的快慢"><a href="#化学反应的快慢" class="headerlink" title="化学反应的快慢"></a>化学反应的快慢</h2><ol><li>化学反应 <strong>有快有慢</strong></li><li><strong>不同的化学反应</strong> 进行的快慢往往不同</li><li>统一化学反应在 <strong>不用条件</strong> 下进行的快慢不同</li><li>可以用 <strong>化学反应速率</strong> 来表示化学反应进行的快慢</li><li>化学反应速率是 <strong>单位时间</strong> 内反应物 <strong>浓度</strong> 的减少量或生成物浓度的增加量来表示</li><li>表达式<script type="math/tex; mode=display">v = \frac {\Delta c}{\Delta t}</script></li><li>单位：$\text {mol/(L }\cdot \text{ s)或mol/(L } \cdot \text { min)}$</li><li>各物质化学反应速率之比等于化学方程式当中各物质前面的化学计量数之比</li><li>对于任意一个化学反应：<script type="math/tex; mode=display">\ce {mA + nB -> pC + qD}</script><script type="math/tex; mode=display">v(A) : v(B) : v(C) : v(D) = m : n : p : q</script></li><li>对同一化学反应,用不同物质的浓度变化所表示的化学反应速率的数值是否一定不相同?为什么?<br>不一定。同一个化学反应中,反应物浓度的减少和生成物浓度的增加都是按照化学方程式中各物质的计量数关系成比例变化的。</li><li>化学反应速率测定的方法<script type="math/tex; mode=display">化学反应速率的测定方法 \begin{cases}    化学方法 \begin{cases}        利用化学原理直接测定物质浓度 \\ 停止反应方法：骤冷、冲稀等    \end{cases} \\ 物理方法 \begin{cases}        利用物理性质与浓度之间的相关性 \\ 量气法、分光光路法、电导率法    \end{cases}\end{cases}</script></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-14-化学课&quot;&gt;&lt;a href=&quot;#4-14-化学课&quot; class=&quot;headerlink&quot; title=&quot;4/14 化学课&quot;&gt;&lt;/a&gt;4/14 化学课&lt;/h1&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
    化学反应条件</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200414-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/14/200414-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/14/200414-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-14T03:17:11.000Z</published>
    <updated>2020-04-14T03:44:30.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-14-地理课-城郊农业和现代农业"><a href="#4-14-地理课-城郊农业和现代农业" class="headerlink" title="4/14 地理课 - 城郊农业和现代农业"></a>4/14 地理课 - 城郊农业和现代农业</h1><h2 id="城郊农业"><a href="#城郊农业" class="headerlink" title="城郊农业"></a>城郊农业</h2><ol><li>特点<ol><li>产品种类多、生产周期短、商品率高</li><li>形成生产、加工、运输和销售相结合的营销体系，生产效率高</li><li>在布局上往往呈环状结构</li></ol></li><li>分布<ol><li>越靠近城镇，地租越高，因此，种植的农产品往往附加值高，或者是不易储藏、运费过高。</li></ol></li><li>城郊农业特点的新变化<ol><li>建立专业化程度较高的农副产品供应基地，满足市民的多品种、多层次的需求。</li><li>农副产品需求量巨大，蔬菜等农产品相当大的部分靠外地供应</li><li>城郊农业开始由单一的经济功能转化为经济生态等多功能</li></ol></li></ol><h2 id="现代农业"><a href="#现代农业" class="headerlink" title="现代农业"></a>现代农业</h2><ol><li>农业的发展历程<script type="math/tex; mode=display">原始农业 \longrightarrow 传统农业 \longrightarrow 现代农业</script><ul><li>原始农业是采用刀耕火种的极其简单的生产技术和生产工具进行的农业生产</li><li>传统农业是以人力为蓄力为主、施有机肥、田间管理等措施进行生产；劳动生产率和商品率都较低的农业</li><li>现代农业是生产率高、科技含量高、商品率高、资源利用率高、环境友好和产品质量高的农业</li></ul></li><li>农产品的特点<ul><li>现代人类对农产品的需求是方便、营养、卫生、安全和回归自然。无污染、无公害的农产品备受青睐</li><li>高产</li><li>高效</li><li>优质</li><li>低耗</li></ul></li><li>石油农业<ul><li>以机械化、水利化、化学化和电气化为标准的农业，是经济发达国家以石油为基础的高度工业化的农业的总称</li><li>是由农业由于高产、高效是受推崇的现代农业，但是并不符合现代农业优质、低耗的特点</li><li>石油农业由于能源和资源的高消耗，一旦资源短缺或者枯竭，农业损失较大；花费和农药的大量使用，环境质量下降；产品如果遭受污染，影响人类生命安全与健康</li></ul></li><li>生态农业<ul><li>生态农业是按照生态学原理和经济学原理，运用现代科学技术成果和现代管理手段，以及传统农业的有效经验建立起来的，能获得较高的经济利益、生态效益和社会效益的现代化高效农业</li><li>在生态农业的生产过程当中，物质在系统内部被循环利用和重复使用，节约了原料和燃料，减少了污染。</li><li>高效、高产、优质、低耗</li></ul></li><li>精准农业<ul><li>精准农业是在现代信息技术、生物技术、工程技术等一系列高新技术基础上发展起来的一种现代农业生产形式，可以精准地进行试飞、播种、灌溉、杀虫、除草、收割、销售等的农业</li><li>精准确定灌溉、试飞、杀虫等的地点；精准确定水、肥、药、种子等的使用量；精准确定各种农艺措施实施的时间；精准把握市场需求。</li></ul></li><li>休闲农业<ul><li>休闲农业是利用农业景观资源和农业生产条件，发展观光、休闲、旅游的一种新型农业生产经营形态。</li><li>一产：农业生产，异地之一，发展特色农业、循环农业、现代化高效农业</li><li>二产：“农产品更加工业”，以农业物料、人工种养的动植物资源为原料进行工业生产活动的总和</li><li>三产：“农业相关服务业”，如农业观光、科普教育、品牌展示、文化传承等。</li><li>三产结合的农业</li></ul></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-14-地理课-城郊农业和现代农业&quot;&gt;&lt;a href=&quot;#4-14-地理课-城郊农业和现代农业&quot; class=&quot;headerlink&quot; title=&quot;4/14 地理课 - 城郊农业和现代农业&quot;&gt;&lt;/a&gt;4/14 地理课 - 城郊农业和现代农业&lt;/h1&gt;&lt;h2 i</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>20200412:「抑郁」</title>
    <link href="http://gyrojeff.moe/2020/04/12/20200412-%E3%80%8C%E6%8A%91%E9%83%81%E3%80%8D/"/>
    <id>http://gyrojeff.moe/2020/04/12/20200412-%E3%80%8C%E6%8A%91%E9%83%81%E3%80%8D/</id>
    <published>2020-04-12T05:40:18.000Z</published>
    <updated>2020-04-12T05:43:04.000Z</updated>
    
    <content type="html"><![CDATA[<p>既然从被生下来起，我就是欠别人的，那我真的不想被生下来。抱歉，我的想法脱离了控制。活着好累。受罪。</p><p>对别人好 ≠ 别人想要对你对他好 ≠ 别人就应该觉得感激 ≠ 别人要对你好</p><p>真的累了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;既然从被生下来起，我就是欠别人的，那我真的不想被生下来。抱歉，我的想法脱离了控制。活着好累。受罪。&lt;/p&gt;
&lt;p&gt;对别人好 ≠ 别人想要对你对他好 ≠ 别人就应该觉得感激 ≠ 别人要对你好&lt;/p&gt;
&lt;p&gt;真的累了。&lt;/p&gt;
</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="抑郁" scheme="http://gyrojeff.moe/tags/%E6%8A%91%E9%83%81/"/>
    
  </entry>
  
  <entry>
    <title>DesktopSwitcher 开发</title>
    <link href="http://gyrojeff.moe/2020/04/10/DesktopSwitcher-%E5%BC%80%E5%8F%91/"/>
    <id>http://gyrojeff.moe/2020/04/10/DesktopSwitcher-%E5%BC%80%E5%8F%91/</id>
    <published>2020-04-10T15:50:41.000Z</published>
    <updated>2020-09-14T23:58:32.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h1><p>转自自己的GitHub：</p><blockquote><p>DesktopSwitcher is an OSX application written in swift, which is served as an tool that can switching the desktop by clicking while scrolling the scrolling wheel on the mouse. The tool can especially bring convenience to those who seldom uses trackpad and intensively relies on mouse and keyboard. If you have any suggestion or advise, please feel free to contact me.</p></blockquote><h1 id="项目创建"><a href="#项目创建" class="headerlink" title="项目创建"></a>项目创建</h1><p>不要使用storyboard</p><h1 id="鼠标的监听"><a href="#鼠标的监听" class="headerlink" title="鼠标的监听"></a>鼠标的监听</h1><p>在APPDelegate中：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">NSEvent</span>.addGlobalMonitorForEvents(matching: <span class="type">NSEvent</span>.<span class="type">EventTypeMask</span>.otherMouseUp) &#123; (event) <span class="keyword">in</span></span><br><span class="line">    <span class="comment">// Code</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>以此类推，具体详见API。</p><h1 id="Preference界面"><a href="#Preference界面" class="headerlink" title="Preference界面"></a>Preference界面</h1><p>创建WindowController，并且生成Xib。具体干活的方法和iOS差不多，就是代码要加点东西(windowNibName)：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  PreferenceWindowController.swift</span></span><br><span class="line"><span class="comment">//  DesktopSwitcher</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  Created by Jefferson Qin on 2020/4/9.</span></span><br><span class="line"><span class="comment">//  Copyright &amp;copy; 2020 Jefferson Qin. All rights reserved.</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> Cocoa</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">PreferenceWindowController</span>: <span class="title">NSWindowController</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="meta">@IBOutlet</span> <span class="keyword">var</span> desktopTextField: <span class="type">NSTextField!</span></span><br><span class="line">    </span><br><span class="line">    <span class="meta">@IBOutlet</span> <span class="keyword">var</span> externalDesktopTextField: <span class="type">NSTextField!</span></span><br><span class="line">    </span><br><span class="line">    <span class="meta">@IBAction</span> <span class="function"><span class="keyword">func</span> <span class="title">configureButtonTouched</span><span class="params">(<span class="number">_</span> sender: <span class="keyword">Any</span>)</span></span> &#123;</span><br><span class="line"><span class="comment">// code</span></span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">override</span> <span class="keyword">var</span> windowNibName : <span class="type">String!</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="string">&quot;PreferenceWindowController&quot;</span></span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">override</span> <span class="function"><span class="keyword">func</span> <span class="title">windowDidLoad</span><span class="params">()</span></span> &#123;</span><br><span class="line">        <span class="keyword">super</span>.windowDidLoad()</span><br><span class="line"></span><br><span class="line">        <span class="comment">// Implement this method to handle any initialization after your window controller&#x27;s window has been loaded from its nib file.</span></span><br><span class="line">        <span class="keyword">self</span>.window?.center()</span><br><span class="line">        <span class="keyword">self</span>.window?.makeKeyAndOrderFront(<span class="literal">nil</span>)</span><br><span class="line">        <span class="type">NSApp</span>.activate(ignoringOtherApps: <span class="literal">true</span>)</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>然后再APPDelegate当中：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">private</span> <span class="keyword">var</span> preferenceWindow = <span class="type">PreferenceWindowController</span>()</span><br><span class="line"></span><br><span class="line"><span class="meta">@IBAction</span> <span class="function"><span class="keyword">func</span> <span class="title">preferenceButtonClicked</span><span class="params">(<span class="number">_</span> sender: NSMenuItem)</span></span> &#123;</span><br><span class="line">preferenceWindow.showWindow(sender)</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="Info-plist修改"><a href="#Info-plist修改" class="headerlink" title="Info.plist修改"></a>Info.plist修改</h1><p>由于是任务栏app，所以图标什么的不要出现。在Info.plist中添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Application is agent (UIElement): YES</span><br></pre></td></tr></table></figure><h1 id="桌面切换的AppleScript实现"><a href="#桌面切换的AppleScript实现" class="headerlink" title="桌面切换的AppleScript实现"></a>桌面切换的AppleScript实现</h1><p>使用AppleScript封装好App，比方说，切换到上一个桌面就是：</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">tell</span> <span class="built_in">application</span> <span class="string">&quot;System Events&quot;</span></span><br><span class="line">key code <span class="number">123</span> using &#123;control down&#125;</span><br><span class="line"><span class="keyword">end</span> <span class="keyword">tell</span></span><br></pre></td></tr></table></figure><p>以此类推。具体源码详见我的GitHub，script可以通过解压app文件看到。</p><p>最后在Swift当中：</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">NSWorkspace</span>.shared.launchApplication(<span class="string">&quot;DLeft&quot;</span>)</span><br></pre></td></tr></table></figure><p>其中，<code>DLeft</code>是封装好的应用名。</p><h1 id="GitHub"><a href="#GitHub" class="headerlink" title="GitHub"></a>GitHub</h1><p><a href="https://github.com/JeffersonQin/DesktopSwitcher">DesktopSwitcher</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Introduction&quot;&gt;&lt;a href=&quot;#Introduction&quot; class=&quot;headerlink&quot; title=&quot;Introduction&quot;&gt;&lt;/a&gt;Introduction&lt;/h1&gt;&lt;p&gt;转自自己的GitHub：&lt;/p&gt;
&lt;blockquote&gt;
</summary>
      
    
    
    
    <category term="OSX开发" scheme="http://gyrojeff.moe/categories/OSX%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="Objective-C" scheme="http://gyrojeff.moe/tags/Objective-C/"/>
    
    <category term="MacOS" scheme="http://gyrojeff.moe/tags/MacOS/"/>
    
    <category term="监听" scheme="http://gyrojeff.moe/tags/%E7%9B%91%E5%90%AC/"/>
    
  </entry>
  
  <entry>
    <title>Swift frame和bounds的区别</title>
    <link href="http://gyrojeff.moe/2020/04/10/Swift-frame%E5%92%8Cbounds%E7%9A%84%E5%8C%BA%E5%88%AB/"/>
    <id>http://gyrojeff.moe/2020/04/10/Swift-frame%E5%92%8Cbounds%E7%9A%84%E5%8C%BA%E5%88%AB/</id>
    <published>2020-04-10T15:21:39.000Z</published>
    <updated>2020-09-14T23:58:34.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h1><p>在实际开发中，处理<code>UIView</code>的问题时，经常会分不清frame和bounds。</p><h1 id="Solution"><a href="#Solution" class="headerlink" title="Solution"></a>Solution</h1><p>下面这张图解决问题</p><img src="/2020/04/10/Swift-frame%E5%92%8Cbounds%E7%9A%84%E5%8C%BA%E5%88%AB/1.png" class=""><h1 id="Conclusion"><a href="#Conclusion" class="headerlink" title="Conclusion"></a>Conclusion</h1><ul><li>frame: 在super view当中的位置（CGRect）</li><li>bounds: 完全是自己的这个CGRect，和位置无关，用于绘图，添加subview等。</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Introduction&quot;&gt;&lt;a href=&quot;#Introduction&quot; class=&quot;headerlink&quot; title=&quot;Introduction&quot;&gt;&lt;/a&gt;Introduction&lt;/h1&gt;&lt;p&gt;在实际开发中，处理&lt;code&gt;UIView&lt;/code&gt;的问</summary>
      
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/tags/iOS%E5%BC%80%E5%8F%91/"/>
    
    <category term="iOS" scheme="http://gyrojeff.moe/tags/iOS/"/>
    
  </entry>
  
  <entry>
    <title>Swift Objective-C混编问题</title>
    <link href="http://gyrojeff.moe/2020/04/10/Swift-Objective-C%E6%B7%B7%E7%BC%96%E9%97%AE%E9%A2%98/"/>
    <id>http://gyrojeff.moe/2020/04/10/Swift-Objective-C%E6%B7%B7%E7%BC%96%E9%97%AE%E9%A2%98/</id>
    <published>2020-04-10T14:02:37.000Z</published>
    <updated>2020-09-14T23:58:37.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h1><p>在实际开发过程当中，Swift在某些情况运行效率低下，我们需要C++来实现某些功能。这就引入了混编问题。其实Swift不仅可以和Objective-C混编，还可以和C、C++混编。</p><h1 id="和Objective-C混编"><a href="#和Objective-C混编" class="headerlink" title="和Objective-C混编"></a>和Objective-C混编</h1><p>众所周知，Objective-C需要头文件来开放接口，而要让Swift和Objective-C混编，就需要将Objective-C的方法开放接口给Swift。</p><h1 id="具体实现"><a href="#具体实现" class="headerlink" title="具体实现"></a>具体实现</h1><p>New File -&gt; Objective-C，系统会弹出弹窗问要不要Create Bridge File，选择Yes。然后在Objective-C文件中import这个Bridge File作为头文件，开放的接口写在Bridge File当中</p><p>Objective-C:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#import &quot;xxxxx-Bridge-File.h&quot;</span><br><span class="line"></span><br><span class="line">@implementation ClassA</span><br><span class="line">+ (void) testMethod :(double) parameterA :(double) parameterB &#123;</span><br><span class="line">NSLog(@&quot;Hello World!&quot;);</span><br><span class="line">&#125;</span><br><span class="line">@end</span><br></pre></td></tr></table></figure><p>Header:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">#import &lt;Foundation&#x2F;Foundation.h&gt;</span><br><span class="line"></span><br><span class="line">@interface ClassA : NSObject</span><br><span class="line"></span><br><span class="line">+ (void) testMethod :(double) parameterA :(double) parameterB;</span><br><span class="line"></span><br><span class="line">@end</span><br></pre></td></tr></table></figure><p>Swift调用：<br><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">ClassA</span>.testMethod(<span class="number">1.0</span>, <span class="number">2.0</span>)</span><br></pre></td></tr></table></figure></p><h1 id="关于在项目中的设置"><a href="#关于在项目中的设置" class="headerlink" title="关于在项目中的设置"></a>关于在项目中的设置</h1><p>设置部分可以在Build Setting中找到（项目文件中）</p><h1 id="C、C-混编的实现"><a href="#C、C-混编的实现" class="headerlink" title="C、C++混编的实现"></a>C、C++混编的实现</h1><p>我们会发现，Objective-C的语法糖不多，我们更想要的是C++。而众所周知，Objective-C是可以调用Cpp的，而且将后缀名改为<code>.mm</code>之后，是Objective-C++，支持C++的方法及语法。全部都不难实现。其实只需要将所有东西分装起来即可。</p><p>比如我做OpenCV处理时分装的库：</p><p><code>HQMatProcessor.hpp</code>：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  HQMatProcessor.hpp</span></span><br><span class="line"><span class="comment">//  Page Dewarper</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  Created by Jefferson Qin on 2020/4/8.</span></span><br><span class="line"><span class="comment">//  Copyright &amp;copy; 2020 Jefferson Qin. All rights reserved.</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">ifndef</span> HQMatProcessor_hpp</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> HQMatProcessor_hpp</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;opencv2/opencv.hpp&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">namespace</span> HQCV &#123;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSharpened</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getGray</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobelX</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobelY</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobel</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">getGaussian</span><span class="params">(cv::Mat src)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">drawPoint</span><span class="params">(cv::Mat src, <span class="keyword">double</span> x, <span class="keyword">double</span> y)</span></span>;</span><br><span class="line">    <span class="function">cv::Mat <span class="title">drawLine</span><span class="params">(cv::Mat src, <span class="keyword">double</span> x1, <span class="keyword">double</span> y1, <span class="keyword">double</span> x2, <span class="keyword">double</span> y2)</span></span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">endif</span> <span class="comment">/* HQMatProcessor_hpp */</span></span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p><code>HQMatProcessor.cpp</code>：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  HQMatProcessor.cpp</span></span><br><span class="line"><span class="comment">//  Page Dewarper</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"><span class="comment">//  Created by Jefferson Qin on 2020/4/8.</span></span><br><span class="line"><span class="comment">//  Copyright &amp;copy; 2020 Jefferson Qin. All rights reserved.</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&quot;HQMatProcessor.hpp&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">namespace</span> HQCV &#123;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSharpened</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat kernel = (cv::Mat_&lt;<span class="keyword">char</span>&gt;(<span class="number">3</span>, <span class="number">3</span>) &lt;&lt; <span class="number">0</span>, <span class="number">-1</span>, <span class="number">0</span>, <span class="number">-1</span>, <span class="number">5</span>, <span class="number">-1</span>, <span class="number">0</span>, <span class="number">-1</span>, <span class="number">0</span>);</span><br><span class="line">        cv::Mat ret;</span><br><span class="line">        cv::filter2D(src, ret, CV_32F, kernel);</span><br><span class="line">        cv::convertScaleAbs(ret, ret);</span><br><span class="line">        <span class="keyword">return</span> ret;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getGray</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst;</span><br><span class="line">        cv::cvtColor(src, dst, cv::COLOR_BGR2GRAY);</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobelX</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst;</span><br><span class="line">        cv::Sobel(src, dst, CV_16S, <span class="number">1</span>, <span class="number">0</span>, <span class="number">3</span>, <span class="number">1</span>, <span class="number">0</span>, cv::BORDER_DEFAULT);</span><br><span class="line">        cv::convertScaleAbs(dst, dst);</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobelY</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst;</span><br><span class="line">        cv::Sobel(src, dst, CV_16S, <span class="number">0</span>, <span class="number">1</span>, <span class="number">3</span>, <span class="number">1</span>, <span class="number">0</span>, cv::BORDER_DEFAULT);</span><br><span class="line">        cv::convertScaleAbs(dst, dst);</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getSobel</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst;</span><br><span class="line">        cv::addWeighted(HQCV::getSobelX(src), <span class="number">0.5</span>, HQCV::getSobelY(src), <span class="number">0.5</span>, <span class="number">0</span>, dst);</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">getGaussian</span><span class="params">(cv::Mat src)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst;</span><br><span class="line">        cv::GaussianBlur(src, dst, cv::Size(<span class="number">3</span>, <span class="number">3</span>), <span class="number">0</span>, <span class="number">0</span>, cv::BORDER_DEFAULT);</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">drawPoint</span><span class="params">(cv::Mat src, <span class="keyword">double</span> x, <span class="keyword">double</span> y)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst = src.clone();</span><br><span class="line">        cv::circle(dst, cv::Point(x, y), <span class="number">8</span>, cv::Scalar(<span class="number">0</span>, <span class="number">255</span>, <span class="number">0</span>, <span class="number">255</span>));</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="function">cv::Mat <span class="title">drawLine</span><span class="params">(cv::Mat src, <span class="keyword">double</span> x1, <span class="keyword">double</span> y1, <span class="keyword">double</span> x2, <span class="keyword">double</span> y2)</span> </span>&#123;</span><br><span class="line">        cv::Mat dst = src.clone();</span><br><span class="line">        cv::line(dst, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(<span class="number">0</span>, <span class="number">255</span>, <span class="number">0</span>, <span class="number">255</span>));</span><br><span class="line">        <span class="keyword">return</span> dst;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Introduction&quot;&gt;&lt;a href=&quot;#Introduction&quot; class=&quot;headerlink&quot; title=&quot;Introduction&quot;&gt;&lt;/a&gt;Introduction&lt;/h1&gt;&lt;p&gt;在实际开发过程当中，Swift在某些情况运行效率低下，我们需</summary>
      
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/tags/iOS%E5%BC%80%E5%8F%91/"/>
    
    <category term="Objective-C" scheme="http://gyrojeff.moe/tags/Objective-C/"/>
    
  </entry>
  
  <entry>
    <title>Swift OpenCV使用</title>
    <link href="http://gyrojeff.moe/2020/04/10/Swift-OpenCV%E4%BD%BF%E7%94%A8/"/>
    <id>http://gyrojeff.moe/2020/04/10/Swift-OpenCV%E4%BD%BF%E7%94%A8/</id>
    <published>2020-04-10T13:51:45.000Z</published>
    <updated>2020-09-14T23:58:40.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h1><p>在进行iOS开发时，若涉及到图像处理，UIImage、CGImage永远是第一选择，但是系统提供的函数非常有限，效率低下，有时候并不是最好的选择。故，使用OpenCV。</p><h1 id="Download"><a href="#Download" class="headerlink" title="Download"></a>Download</h1><p>在OpenCV官网下载iOS版本的框架，各个版本均可</p><h1 id="Installation"><a href="#Installation" class="headerlink" title="Installation"></a>Installation</h1><p>打开需要使用到OpenCV的项目，右键项目 -&gt; Add Files -&gt; 选择刚才下载好解压好的Framework。编译一把，大功告成。</p><h1 id="Usage"><a href="#Usage" class="headerlink" title="Usage"></a>Usage</h1><ul><li>这个需要使用Objective-C混编。新建Objective-C文件，并且将后缀名改为<code>.mm</code>，系统会自动生成Bridge File用于向Swift开放Objective-C函数的接口。</li><li>一般，在<code>.mm</code>当中会需要用到的头文件有：<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">#import &lt;opencv2&#x2F;opencv.hpp&gt;</span><br><span class="line">#import &lt;opencv2&#x2F;imgcodecs&#x2F;ios.h&gt;</span><br><span class="line">#import &lt;Foundation&#x2F;Foundation.h&gt;</span><br></pre></td></tr></table></figure><div class="note danger">注：opencv的库一定要在最前面，否则编译过不了，具体原因可以试试写错，然后源码中有提示，是宏的定义产生的问题</div></li><li>Objective-C当中需要开放的接口在Bridge File中写</li></ul><h1 id="Warning"><a href="#Warning" class="headerlink" title="Warning"></a>Warning</h1><p>不可以随便<br><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> cv</span><br></pre></td></tr></table></figure><br>因为有很多class的名称会和Swift冲突，所以还是老老实实<code>cv::Point</code>之类的。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Introduction&quot;&gt;&lt;a href=&quot;#Introduction&quot; class=&quot;headerlink&quot; title=&quot;Introduction&quot;&gt;&lt;/a&gt;Introduction&lt;/h1&gt;&lt;p&gt;在进行iOS开发时，若涉及到图像处理，UIImage、CGI</summary>
      
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="iOS" scheme="http://gyrojeff.moe/tags/iOS/"/>
    
    <category term="OpenCV" scheme="http://gyrojeff.moe/tags/OpenCV/"/>
    
    <category term="Objective-C" scheme="http://gyrojeff.moe/tags/Objective-C/"/>
    
  </entry>
  
  <entry>
    <title>200410-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/10/200410-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/10/200410-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-10T09:07:05.000Z</published>
    <updated>2020-04-10T11:42:58.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-10-地理课-世界主要农业地域类型"><a href="#4-10-地理课-世界主要农业地域类型" class="headerlink" title="4/10 地理课 - 世界主要农业地域类型"></a>4/10 地理课 - 世界主要农业地域类型</h1><p>基本概念：<strong>农业地域类型</strong>是指在不同地内形成的具有不同部门结构和特点的农业生产类型</p><div class="table-container"><table><thead><tr><th style="text-align:center">农业地域类型</th><th style="text-align:center">主要农产品</th><th style="text-align:center">主要分布地区</th><th style="text-align:center">区位条件</th><th style="text-align:center">生产主要特点</th></tr></thead><tbody><tr><td style="text-align:center">水田农业</td><td style="text-align:center">水稻等</td><td style="text-align:center">东亚、南亚、东南亚，我国主要分布在东部季风区的秦岭淮河以南地区</td><td style="text-align:center">主要分布在季风气候区，光热水资源丰富；以平原、丘陵低山为主，人口稠密，劳动力资源丰富</td><td style="text-align:center">生产规模小；单位面积产量高；商品率低；机械化水平低和科技水平低</td></tr><tr><td style="text-align:center">旱作农业</td><td style="text-align:center">玉米、高粱、小麦、棉花、花生等</td><td style="text-align:center">中亚、南亚、非洲、拉丁美洲的干旱和半干旱地区；中国的东北、华北、西北地区</td><td style="text-align:center">水资源并不丰富；人口密度一般比水田地区低，生产水平不高</td><td style="text-align:center">机械化程度不高，生产水平较低，商品率低</td></tr><tr><td style="text-align:center">牧场畜牧业</td><td style="text-align:center">牛羊为主</td><td style="text-align:center">美国、澳大利亚、新西兰、阿根廷等</td><td style="text-align:center">气候温和、曹磊茂盛，有优良天然草场；地广人稀</td><td style="text-align:center">经营规模大，专业化水平、商品率和机械化程度高</td></tr><tr><td style="text-align:center">高度发达的商品化混合农业</td><td style="text-align:center">麦类、玉米和畜产品</td><td style="text-align:center">北美东部、西欧和中欧、澳大利亚东南部和西南部</td><td style="text-align:center">处于温带、亚热带地区、水热条件比较好；水源充足；地势平坦；交通便利；生产力水平高，经济发达；市场广大</td><td style="text-align:center">规模大，机械化、专业化、商品化程度高，实行农牧结合</td></tr><tr><td style="text-align:center">地中海型农业</td><td style="text-align:center">小麦、大麦、蔬菜、葡萄等</td><td style="text-align:center">南欧、西欧、北非地中海沿岸、南北美洲西海岸的地中海气候区</td><td style="text-align:center">地中海气候，夏季炎热干燥，有利于糖分的积累；冬季温和湿润，有利于作物越冬</td><td style="text-align:center">生产规模小，机械化程度低</td></tr><tr><td style="text-align:center">热带种植园农业</td><td style="text-align:center">橡胶、咖啡、香蕉、菠萝等</td><td style="text-align:center">亚洲、非洲、拉丁美洲一些热带地区。我国分布在海南省、云南、广东南部地区</td><td style="text-align:center">热带气候，劳动力充足</td><td style="text-align:center">专门生产一种或几种热带经济作物，商品率高，生产力低</td></tr><tr><td style="text-align:center">游牧畜牧业</td><td style="text-align:center">牛羊为主</td><td style="text-align:center">中亚、西亚、北非、南非、我国四大牧区</td><td style="text-align:center">干旱、半干旱、科技水平低</td><td style="text-align:center">游牧为主、自给为主</td></tr></tbody></table></div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-10-地理课-世界主要农业地域类型&quot;&gt;&lt;a href=&quot;#4-10-地理课-世界主要农业地域类型&quot; class=&quot;headerlink&quot; title=&quot;4/10 地理课 - 世界主要农业地域类型&quot;&gt;&lt;/a&gt;4/10 地理课 - 世界主要农业地域类型&lt;/h1&gt;&lt;</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200409-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/09/200409-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/09/200409-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-09T01:32:34.000Z</published>
    <updated>2020-04-14T03:17:36.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-9-地理课-农业区位的变化"><a href="#4-9-地理课-农业区位的变化" class="headerlink" title="4/9 地理课 - 农业区位的变化"></a>4/9 地理课 - 农业区位的变化</h1><h2 id="自然因素的利用、改善"><a href="#自然因素的利用、改善" class="headerlink" title="自然因素的利用、改善"></a>自然因素的利用、改善</h2><ol><li>气候因素<ul><li>光照<ul><li>田块布局：东西走向的田块布局往往比南北走向的田块布局更能使每一棵植株活得更充足的阳光。</li></ul></li><li>热量<ul><li>温室大棚：温室大棚则起到了透光、保温的作用，改善了农业生产的热量条件。</li></ul></li><li>水分<ul><li>集雨节灌技术：集雨节灌技术改善了降水较少且季节变化大地区农业生产的水分条件。</li><li>地膜覆盖技术：地膜覆盖技术可以提高土壤温度，保持土壤水分，间接改善了气候条件。</li></ul></li></ul></li><li>地形因素<ul><li>沿等高线修筑梯田使本不适宜发展种植业的山区业发展了水田农业。</li><li>在较陡坡面上，自上而下挖半月形呈品字形的鱼鳞坑，并在坑内植树，具有保土保水保肥作用。</li></ul></li><li>土壤因素<ul><li>呈酸性 $\rightarrow$ 撒石灰</li><li>土质黏重 $\rightarrow$ 掺沙</li><li>肥力低 $\rightarrow$ 种红花草，施有机肥</li><li>井排：钻浅层机井抽取机井附近的浅层咸水使得地下水位下降，盐分不易在地表富集</li><li>井灌：抽取深层的底下淡水用来灌溉，同时淋湿地表盐分，以治理土地的盐渍化</li></ul></li><li>水源因素<ul><li>沙特在地表水机缺的荒漠区，采用中枢灌溉系统，抽取地下水改善水源条件，形成了荒漠农田圈奇观。</li><li>我国通过修建水库和南水北调工程来改善北方地区的水源条件。</li></ul></li><li>技术因素</li></ol><h2 id="社会经济因素的变化"><a href="#社会经济因素的变化" class="headerlink" title="社会经济因素的变化"></a>社会经济因素的变化</h2><ol><li>市场因素</li><li>劳动力因素<ul><li>高质量农产品需求的增加</li><li>劳动力的数量要求下降</li><li>劳动力的素质要求上升</li></ul></li><li>政策因素</li></ol><img src="/2020/04/09/200409-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><h2 id="案例分析：丹麦农业区位变化"><a href="#案例分析：丹麦农业区位变化" class="headerlink" title="案例分析：丹麦农业区位变化"></a>案例分析：丹麦农业区位变化</h2><ul><li>早期：全年温和多雨，地势平坦、国土狭小，土壤贫瘠，排水较差，只能发展牧羊业。</li><li>19世纪中叶：通过排干沼泽的水，大量使用肥料，开始发展小麦种职业。</li><li>现在：北美联佳小麦夺走了欧洲市场，考虑欧洲人爱吃面包需要牛油、奶酪和肉类，开始发展牛畜牧业。</li></ul><script type="math/tex; mode=display">技术、交通、市场</script><h2 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h2><script type="math/tex; mode=display">\color{white}{\colorbox{red}{自然因素：影响力不断下降}}</script><script type="math/tex; mode=display">\color{white}{\colorbox{green}{社会经济因素：影响力不断上升}}</script>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-9-地理课-农业区位的变化&quot;&gt;&lt;a href=&quot;#4-9-地理课-农业区位的变化&quot; class=&quot;headerlink&quot; title=&quot;4/9 地理课 - 农业区位的变化&quot;&gt;&lt;/a&gt;4/9 地理课 - 农业区位的变化&lt;/h1&gt;&lt;h2 id=&quot;自然因素的利用、改</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200407-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/07/200407-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/07/200407-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-07T05:28:21.000Z</published>
    <updated>2020-04-07T06:43:51.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-7-化学课"><a href="#4-7-化学课" class="headerlink" title="4/7 化学课"></a>4/7 化学课</h1><h2 id="固氮"><a href="#固氮" class="headerlink" title="固氮"></a>固氮</h2><ol><li>大气固氮<script type="math/tex; mode=display">\ce {N2 + O2 ->[放电] 2NO}</script></li><li>生物固氮<script type="math/tex; mode=display">\ce {N2 ->[固氮酶][H^+] 氨基酸}</script></li><li>人工合成固氮<script type="math/tex; mode=display">\ce {N2 + 3H2 <=>[高温、高压][催化剂] 2NH3}</script></li></ol><h2 id="氮气与氮氧化物"><a href="#氮气与氮氧化物" class="headerlink" title="氮气与氮氧化物"></a>氮气与氮氧化物</h2><ol><li>$\ce {NO}$无色气体</li><li>$\ce {NO2}$红棕色气体</li><li>$\ce {N2}$无色无味气体</li></ol><script type="math/tex; mode=display">\ce {N2 + 3Mg ->[点燃] Mg3N2}</script><script type="math/tex; mode=display">\ce {N2 + 3H2 <=>[高温高压][催化剂]2NH3}</script><script type="math/tex; mode=display">\ce {N2 + O2 ->[放电] 2NO}</script><script type="math/tex; mode=display">\ce {2NO + O2 -> 2NO2}</script><script type="math/tex; mode=display">\ce {3NO2 + H2O -> 2HNO3 + NO}</script><h2 id="氨气"><a href="#氨气" class="headerlink" title="氨气"></a>氨气</h2><ol><li>水溶液呈碱性<script type="math/tex; mode=display">\ce {NH3 + H2O <=> NH3*H2O <=> NH4+ + OH-}</script><script type="math/tex; mode=display">\ce {3NH3*H2O + Fe^3+ -> Fe(OH)3 v + 3NH4+}</script></li><li>与酸反应生成铵盐<script type="math/tex; mode=display">\ce {NH3 + H+ -> NH4+}</script><script type="math/tex; mode=display">\ce {NH3 + HCl -> NH4Cl}</script><script type="math/tex; mode=display">\ce {2NH3 + H2SO4 -> (NH4)2SO4}</script></li><li>还原性<script type="math/tex; mode=display">\ce {4NH3 + 5O2 ->[催化剂][加热] 4NO + 6H2O + Q}</script><script type="math/tex; mode=display">\ce {4NH3 + 3O2 ->[点燃] 2N2 + 6H2O}</script></li></ol><h2 id="铵盐"><a href="#铵盐" class="headerlink" title="铵盐"></a>铵盐</h2><ol><li>不稳定性<script type="math/tex; mode=display">\ce {NH4Cl ->[\Delta] NH3 ^ + HCl ^}</script><script type="math/tex; mode=display">\ce {NH4HCO3 ->[\Delta] NH3 ^ + CO2 ^ + H2O}</script><script type="math/tex; mode=display">\ce {(NH4)2CO3 ->[\Delta] 2NH3 ^ + CO2 ^ + H2O}</script><script type="math/tex; mode=display">\ce {(NH4)SO4 ->[\Delta] NH3 ^ + NH4HSO4}</script><script type="math/tex; mode=display">\ce {2NH4NO3 ->[\geq 300^\circ C][或撞击] 2N2 ^ + O2 ^ + 4H2O}</script>碳酸氢铵和氯化铵的分解现象不一样，氯化铵分解生成的氨气和氯化氢可以再化合生成氯化铵。</li><li>与碱反应<script type="math/tex; mode=display">\ce {NH4+ + OH- ->[\Delta] NH3 ^ + H2O}</script><script type="math/tex; mode=display">\ce {NH4Cl + NaOH ->[\Delta] NaCl + NH3 ^ + H2O}</script><script type="math/tex; mode=display">\ce {NH4NO3 + NaOH ->[\Delta] NaNO3 + NH3 ^ + H2O}</script><script type="math/tex; mode=display">\ce {(NH4)2SO4 + 2NaOH ->[\Delta] Na2SO4 + 2NH3 ^ + 2H2O}</script>因为氨气极易溶于水，所以需要加热才能放出气体</li><li>应用：<ul><li>制氨气<script type="math/tex; mode=display">\ce {(NH4)2SO4 + Ca(OH)2 ->[\Delta] CaSO4 + 2NH3 ^ + 2H2O}</script><script type="math/tex; mode=display">\ce {s + s / \Delta}</script>氨气不可以用无水$\ce {CaCl2}$干燥，用碱石灰，氢氧化钠固体干燥。</li><li>检验铵盐：取样、加氢氧化钠溶液、加热、产生的气体使湿润的红色石蕊试纸变蓝——有$\ce {NH4+}$</li><li>铵态氮肥的储存——阴凉处</li><li>氮肥不能与碱性物质混用</li></ul></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-7-化学课&quot;&gt;&lt;a href=&quot;#4-7-化学课&quot; class=&quot;headerlink&quot; title=&quot;4/7 化学课&quot;&gt;&lt;/a&gt;4/7 化学课&lt;/h1&gt;&lt;h2 id=&quot;固氮&quot;&gt;&lt;a href=&quot;#固氮&quot; class=&quot;headerlink&quot; title=&quot;固</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>「随想」平平淡淡，真好</title>
    <link href="http://gyrojeff.moe/2020/04/05/%E3%80%8C%E9%9A%8F%E6%83%B3%E3%80%8D%E5%B9%B3%E5%B9%B3%E6%B7%A1%E6%B7%A1%EF%BC%8C%E7%9C%9F%E5%A5%BD/"/>
    <id>http://gyrojeff.moe/2020/04/05/%E3%80%8C%E9%9A%8F%E6%83%B3%E3%80%8D%E5%B9%B3%E5%B9%B3%E6%B7%A1%E6%B7%A1%EF%BC%8C%E7%9C%9F%E5%A5%BD/</id>
    <published>2020-04-05T14:40:42.000Z</published>
    <updated>2020-04-05T15:29:05.000Z</updated>
    
    <content type="html"><![CDATA[<p>感觉不知道从何时起，就有点依赖这个博客了呢（笑）。朋友圈里的老师与同学，可能或多或少也是我越来越少发朋友圈的原因吧。</p><p>因为四月即将迎来春物的完结篇，所以特意去补了春物的前两季。第一次看春物，还是初二。没有什么特别的理由，只因为刚刚入宅，因为推荐来补了番。那时，看不懂弹幕里所说的大老师，理解不了话里话外的含义，甚至一味地觉得是一部无厘头的作品。当时看了五集不到，放弃了。</p><p>记得还是初三，刷朋友圈时看到yjc对春物的评价，那是一个很高的，富有哲理的评价。可能这也为我再次打开春物，埋下了某种伏笔吧。（笑）扯远了，说回春物。再一次打开春物，熟悉而又陌生。作为一部评价很高的番剧，却在OP就有了「无人区」，让我一开始有点无所适从。但是随着剧情的发展，大老师的「名言」还是像以前一样说着，但是现在却感觉内心产生着强烈的共鸣。可能，是因为饱经了残酷现实的蹂躏了吧（笑）。</p><p>如果说第一季围绕着「谎言」展开，那么第二季就是围绕着「真物」展开。其实这「谎言」与「真物」都在描述一件事，那就是「人与人之间的真诚」。回首过去，我的青春其实充满着谎言，无论是最亲密的朋友还是陌生人，「谎言」充斥着我的日常，我也诉诸日常于「谎言」。「谎言」是自卫，是自我保护，是温柔，却也残酷。大老师所说的「如果说现实是残酷的，那么谎言就是温柔的吧」我不能完全认同。因为，得知谎言，可能就是这个世界上最大的痛楚吧。正如春物第一季雪之下对大老师假装的不认识对大老师的打击一样，初二时好友不经意的欺瞒，让我怀疑这个世界，怀疑自己的价值观与处事方式，改变自己，以让自己能合适地「生存」下去，这形成的裂隙，也为日后的关系埋下了伏笔吧。</p><p>只是，春物终是一部小说，在春物中，这成为了第一季最甜的一颗糖，雪乃和大老师在学园祭之后在教室中的「调情」，「因为我之前没有完全认识你呢」，拥有着这种美好的结尾。</p><p>其实第二季的「真物」，并不是所谓的「真实」，而是「想要让对方了解自己」，「想要告诉对方自己想说的」，正是团子的「既然不说白不说那为什么不说呢」的理论。很显然，这种关系是现实生活中不会有的。之前看老蜗牛的细节解读，最后写了这样一句话：「那么，你可以像他们一样，对你在乎的人，说出你内心里的『真话』吗」。但是答案不言而喻了吧，到头来只是一个理想罢了。</p><p>说起关系，在第一季的前半部分当中，大老师就指出过叶山与别人之间的关系：「对于那些人而言，叶山是他们的朋友，而彼此之间只是『朋友的朋友』罢了。」</p><p>蓦然回首，「技术宅的追番大队」「菜鸡群」「NWO」「技术|术语|日语学习」是为何而建立的呢？CSGO吧。可能我也已经意识到了，但是我只是像团子一样，希望这样的三人能够继续保持这样的关系，不再变得孤身一人，不再是「朋友的朋友」。可能，这也只是我的一厢情愿罢了。</p><p>但是，我永远不会忘记这个冬天。这个由「泡面」「代码」「日语」「术语」「あお」「日常」「maple」「sali」「rpi」「linux」「hexo」「next」「夜聊」「CSGO」组成的冬天。我给这个冬天加了无数个tag不想忘记，但是这终将是一个平淡无奇的冬天，随着岁月，在几人的记忆中埋没。对了，如果看到了的话，在评论区说句话吧。</p><p>突然发现，好像越来越文不对题了呢。本来只是想抒发对平淡日常的渴望，没想到又变成了致郁的文章。好像开了博客我的文笔都提高了（？）（毕竟经常会写东西）（困惑）。</p><p>话说回来，自己越来越渴望这平淡无奇的日常，每天自己有一个小目标，达到了就能体验到快乐的日常。不再期待惊喜，开始担心灾难，不再抱有期待，只求没有意外。可能这样的日常，就是我想要的「日常」吧。这样平平淡淡没有争吵的日子，还能有多少呢。可能只能珍惜当下了叭。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;感觉不知道从何时起，就有点依赖这个博客了呢（笑）。朋友圈里的老师与同学，可能或多或少也是我越来越少发朋友圈的原因吧。&lt;/p&gt;
&lt;p&gt;因为四月即将迎来春物的完结篇，所以特意去补了春物的前两季。第一次看春物，还是初二。没有什么特别的理由，只因为刚刚入宅，因为推荐来补了番。那时，</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
  </entry>
  
  <entry>
    <title>200403-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/03/200403-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/03/200403-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-03T07:32:28.000Z</published>
    <updated>2020-09-22T09:41:17.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-3-地理课-农业区位条件"><a href="#4-3-地理课-农业区位条件" class="headerlink" title="4/3 地理课 - 农业区位条件"></a>4/3 地理课 - 农业区位条件</h1><ol><li>基本概念：<strong>农业区位条件</strong>是指影响农业生产布局的各种自然因素和社会经济因素。</li></ol><script type="math/tex; mode=display">    农业区位因素    \begin{cases}        自然因素 \begin{cases}            气候 \\ 地形 \\ 土壤 \\ 水源 \\ \cdots        \end{cases} \\ 社会经济因素 \begin{cases}            市场 \\ 交通 \\ 劳动力 \\ 政策 \\ 技术 \\ \cdots        \end{cases}    \end{cases}</script><h2 id="影响农业生产布局的自然因素"><a href="#影响农业生产布局的自然因素" class="headerlink" title="影响农业生产布局的自然因素"></a>影响农业生产布局的自然因素</h2><ol><li>气候因素<ol><li>光照：<strong>光照</strong>长短和强度影响作物的品质和产量。</li><li>热量：<strong>热量</strong>影响农作物的品种、生长期和熟制。</li><li>水分：<strong>水分</strong>音响主要农作物的品种和农业生产方式。</li></ol></li><li>地形因素：不同的<strong>地形区</strong>，示意发展不同生产方式的农业。<ol><li>$坡度 &lt; 15 ^\circ$：农田</li><li>$15 ^\circ &lt; 坡度 &lt; 25 ^\circ$：林地为主，部分为梯田</li><li>$25 ^\circ &lt; 坡度 &lt; 35 ^\circ$：主要为林牧用地</li><li>$坡度 &gt; 35 ^\circ$：封山育林区</li></ol></li><li>土壤因素：<strong>土壤</strong>是作物生长的物质基础，不同的土壤类型适宜生长不同的作物。</li><li>水源因素：<strong>水源</strong>是农业生产的必备条件。<br>干旱地区：旱作农业或灌溉农业。主要分布在河流沿岸和山麓绿洲地区。因为这里深居内陆，远离海洋，气候干旱，只有灌溉水源充足的地方才能发展种植业。</li></ol><h2 id="影响农业生产布局的社会经济因素"><a href="#影响农业生产布局的社会经济因素" class="headerlink" title="影响农业生产布局的社会经济因素"></a>影响农业生产布局的社会经济因素</h2><ol><li>市场因素：<strong>市场</strong>的需求应到这农业生产的类型、规模和布局。<br>随着城市化的发展，城市人口增多，人们对生活水平的提高，人们对瓜果、蔬菜、乳、肉、禽、蛋的需求量不断增加。</li><li>交通因素：<strong>交通运输</strong>是农业区位选择的重要条件，交通运输的发展扩大了农业生产的市场范围。</li><li>劳动力因素：<strong>劳动力</strong>数量、素质影响农业区位选择。</li><li>政策因素：<strong>国家政策</strong>也会对农业区位产生深远的影响。<br>材料：为确保18亿亩国家耕地红线，我国制定了基本农业天保护条例，不准占用基本农田发展林果业、不准在基本农田内挖塘养鱼和进行畜禽养殖。<strong>确保国家粮食安全底线。</strong></li><li>技术因素：<strong>农业科学技术</strong>影响着农业生产方式，依靠技术可以培育优良品种，提高弄哦单产。</li></ol><h2 id="案例分析：美国乳蓄带的区位条件"><a href="#案例分析：美国乳蓄带的区位条件" class="headerlink" title="案例分析：美国乳蓄带的区位条件"></a>案例分析：美国乳蓄带的区位条件</h2><ol><li>主要分布在美国的东北部和五大湖的滨湖地区。</li><li>自然因素<ol><li><strong>气候</strong>：温带大陆性气候，气候温凉潮湿。</li><li><strong>地形</strong>：地形平坦，受众多河湖影响，未能集中连片。</li><li><strong>土壤</strong>：图层薄，土地贫瘠。</li><li><strong>水源</strong>：河湖众多，水源充足。</li><li><strong>结论</strong>：这里<strong>气候</strong>温凉潮湿；<strong>地形</strong>平坦；<strong>土壤</strong>贫瘠；<strong>水源</strong>充足。不利于谷物生长，有利于多汁牧草生长，适合发展乳畜业。</li></ol></li><li>社会经济因素<ol><li><strong>市场</strong>：人口密集，城市集中，经济发达，消费市场广阔。</li><li><strong>技术</strong>：欧洲移民带来饲养奶牛和种植牧草的先进经验和技术。</li><li><strong>交通</strong>：交通便利，冷藏保鲜运输技术发达。</li><li><strong>工业</strong>：为乳畜业生产提供机械。</li><li><strong>结论</strong>：这里消费市场广阔；拥有先进经验和技术；交通便利；工业基础好；有利于乳畜业形成专门化生产。</li></ol></li></ol><h2 id="学会评价某一区域的农业区位条件"><a href="#学会评价某一区域的农业区位条件" class="headerlink" title="学会评价某一区域的农业区位条件"></a>学会评价某一区域的农业区位条件</h2><ul><li><strong>评价</strong>：<ul><li><strong>有利</strong>：人口密集，经济发达，市场需求量大</li><li><strong>不利</strong>：缺少优质天然草场。</li></ul></li><li><strong>建议</strong>：加大科技投入，培育优良的畜种，提高乳蓄产品质量；研制开发青饲料、精饲料，缓解天然草场不足的问题。推进乳蓄产品的加工，延长产业链，增加附加值；利用遍历的交通、通讯网络拓展消费市场；利用区位优势，发展特色旅游等。</li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-3-地理课-农业区位条件&quot;&gt;&lt;a href=&quot;#4-3-地理课-农业区位条件&quot; class=&quot;headerlink&quot; title=&quot;4/3 地理课 - 农业区位条件&quot;&gt;&lt;/a&gt;4/3 地理课 - 农业区位条件&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;基本概念：&lt;strong</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200402-市化学课</title>
    <link href="http://gyrojeff.moe/2020/04/02/200402-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/02/200402-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-04-02T05:25:40.000Z</published>
    <updated>2020-04-03T07:31:53.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-2-化学课"><a href="#4-2-化学课" class="headerlink" title="4/2 化学课"></a>4/2 化学课</h1><h2 id="铵盐"><a href="#铵盐" class="headerlink" title="铵盐"></a>铵盐</h2><h3 id="物理性质"><a href="#物理性质" class="headerlink" title="物理性质"></a>物理性质</h3><ol><li>都是晶体</li><li>一般能溶于水</li></ol><h3 id="结构"><a href="#结构" class="headerlink" title="结构"></a>结构</h3><ol><li>离子化合物</li><li>能电离出铵离子</li></ol><h3 id="化学性质"><a href="#化学性质" class="headerlink" title="化学性质"></a>化学性质</h3><ol><li><p>与$\ce {OH-}$反应</p><script type="math/tex; mode=display">\ce {NH4+ + OH- ->[\Delta] NH3 ^ + H2O}</script><p>实验室制备氨气：</p><ul><li>气体发生装置：固固加热</li><li>药品：氢氧化钙固体 + 铵盐<ul><li>注：氢氧化钠和氢氧化钾腐蚀玻璃太厉害了，所以选用氢氧化钙</li></ul></li><li>向下排空气法收集（氨气密度比空气小）</li><li>湿润的红色石蕊试纸检验<ul><li><script type="math/tex; mode=display">\ce {NH3 + H2O <=> NH3*H2O <=> NH4+ + OH-}</script></li></ul></li></ul></li><li><p>受热分解</p><script type="math/tex; mode=display">\ce {NH4HCO3 ->[\Delta] NH3 ^ + H2O + CO2 ^}</script><script type="math/tex; mode=display">\ce {NH4Cl ->[\Delta] NH3 ^ + HCl ^}</script><script type="math/tex; mode=display">\ce {NH3 + HCl -> NH4Cl}</script><p> 受热分解 — 低温、密封、深施盖土<br> 与碱反应生成氨气 — 不能与碱性物质混合使用</p></li><li>尿素：$\ce {CO(NH2)2}$</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-2-化学课&quot;&gt;&lt;a href=&quot;#4-2-化学课&quot; class=&quot;headerlink&quot; title=&quot;4/2 化学课&quot;&gt;&lt;/a&gt;4/2 化学课&lt;/h1&gt;&lt;h2 id=&quot;铵盐&quot;&gt;&lt;a href=&quot;#铵盐&quot; class=&quot;headerlink&quot; title=&quot;铵</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200401-市地理课</title>
    <link href="http://gyrojeff.moe/2020/04/02/200401-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/04/02/200401-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-04-02T04:47:47.000Z</published>
    <updated>2020-04-02T05:07:15.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="4-1-地理课"><a href="#4-1-地理课" class="headerlink" title="4/1 地理课"></a>4/1 地理课</h1><h2 id="城市问题"><a href="#城市问题" class="headerlink" title="城市问题"></a>城市问题</h2><ol><li>基本概念：随着城市化进程的推进，城市人口<strong>迅速增长</strong>，<strong>城市规模不断扩大</strong>，在创造由于物质生活条件的同时，也带来了许多问题，这些问题统称为<strong>城市问题</strong></li></ol><ul><li>环境问题：空气、水、垃圾、噪声等污染</li><li>交通问题：车流量过大，道路不看重负，交通堵塞严重</li><li>居住问题：住宅密度过高，居住面积狭小，舒适性差</li><li>社会问题：就业压力大、社会治安恶化</li></ul><h2 id="产生原因"><a href="#产生原因" class="headerlink" title="产生原因"></a>产生原因</h2><ul><li>城市人口过快增长和城市的无序扩张，规模过大、过于集中，城市基础设施不敷使用。</li><li>对急剧膨胀真被不足，城市规划跟不上发展，内部功能分区不合理，城市管理和视屏素质水平有待提升。</li><li>片面追求理论和速度，忽视工作、生活等环境建设。</li><li>交通堵塞，能耗和排放巨大，城市环境不断恶化。</li></ul><h2 id="解决措施"><a href="#解决措施" class="headerlink" title="解决措施"></a>解决措施</h2><ol><li>基本概念：城市问题是城市哦发展到一定阶段的必然产物，各种问题相互影响，相互制约。解决城市问题是一项系统工程。宏观上，要发展经济、政策调控、合理规划，完善法律；微观上，要针对具体城市问题有的放矢，采取可续合理可行的措施</li></ol><div class="note info no-icon">            <h3 id="宏观层面"><a href="#宏观层面" class="headerlink" title="宏观层面"></a>宏观层面</h3><ul><li>进行科学合力的城市规划，开发新区，建立卫星城市，分散城市职能。</li><li>完善现代城市管理制度，优化大城市治理体系。</li></ul>          </div><div class="note success no-icon">            <h3 id="微观层面"><a href="#微观层面" class="headerlink" title="微观层面"></a>微观层面</h3><ul><li><strong>环境问题</strong>：保护和智力环境、减少污染排放、加强绿化建设</li><li><strong>交通问题</strong>：积极发展共欧诺个交通、大力发展节能环保“绿色交通”，如轨道交通和大运量公交等，合理规划城市交通设施。</li><li><strong>居住问题</strong>：改善居住条件、推广廉价租房等。</li><li><strong>社会问题</strong>：提高就业率、完善社会保障和治理体系。</li></ul>          </div>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;4-1-地理课&quot;&gt;&lt;a href=&quot;#4-1-地理课&quot; class=&quot;headerlink&quot; title=&quot;4/1 地理课&quot;&gt;&lt;/a&gt;4/1 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市问题&quot;&gt;&lt;a href=&quot;#城市问题&quot; class=&quot;headerlink&quot; titl</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200331-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/31/200331-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/31/200331-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-31T05:27:52.000Z</published>
    <updated>2020-09-22T12:59:27.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-31-化学课"><a href="#3-31-化学课" class="headerlink" title="3/31 化学课"></a>3/31 化学课</h1><h2 id="固氮"><a href="#固氮" class="headerlink" title="固氮"></a>固氮</h2><ol><li>定义：把大气中游离态的氮转化为氮的化合物的过程</li><li>途经<ol><li>大气固氮（打雷，氧气和氮气反应生成一氧化氮）<script type="math/tex; mode=display">\ce {O2 + N2 ->[放电] 2NO}</script><script type="math/tex; mode=display">\ce {2NO + O2 -> 2NO2（红棕色）}</script><script type="math/tex; mode=display">\ce {3NO2 + H2O -> 2HNO3 + NO}</script><script type="math/tex; mode=display">\ce {NH3 + HNO3 -> NH4NO3}</script>重点：这里会发生一系列反应，是考察重点。</li><li>生物固氮（根瘤菌）<script type="math/tex; mode=display">\ce {N2 ->[固氮酶][H^+] 氨基酸}</script></li><li><script type="math/tex; mode=display">\ce {N2 + 3H2 <=>[高温、高压][催化剂] 2NH3}</script></li></ol></li></ol><h2 id="氨气"><a href="#氨气" class="headerlink" title="氨气"></a>氨气</h2><ol><li>分子结构</li><li>物理性质<ul><li>无色、具有刺激性气味的气体</li><li>密度比空气小</li><li>易液化</li><li>极易溶于水：常温下，1体积水溶解700体积氨气（防止倒吸）</li></ul></li><li>化学性质<ol><li>水溶液呈碱性<script type="math/tex; mode=display">\ce {NH3 + H2O <=> NH3*H2O <=> NH4+ + OH-}</script>一水合氨：一元弱碱，浓氨气可以挥发出氨气。<br>使用浓氨水和生石灰制备氨气：<script type="math/tex; mode=display">\ce {CaO(s) + H2O(l) -> Ca(OH)2 + Q} \Rightarrow T \uparrow</script></li><li>与酸反应（生成铵盐）<script type="math/tex; mode=display">\ce {NH3 + H+ -> NH4+}</script><script type="math/tex; mode=display">\ce {NH3 + HCl -> NH4Cl}</script>浓盐酸和浓氨水 -&gt; 白烟（浓硫酸不挥发，看不到）<script type="math/tex; mode=display">\ce {2NH3 + H2SO4 -> (NH4)2SO4}</script>注意和碳酸反应是可能生成碳酸铵和碳酸氢铵，取决于过量和不过量。<script type="math/tex; mode=display">\ce {NH3 + H2O + CO2 -> NH4+ + HCO3-}</script><script type="math/tex; mode=display">\ce {3NH3*H2O + Fe^3+ -> Fe(OH)3 v + 3NH4+}</script></li><li>还原性（催化氧化）<script type="math/tex; mode=display">\ce {4NH3 + 5O2 ->[催化剂][加热] 4NO + 6H2O }</script>在氧气中安静地燃烧<script type="math/tex; mode=display">\ce {4NH3 + 3O2 ->[点燃] 2N2 + 6H2O}</script>注意：这里氮气和氧气在不同的条件下会发生不同的反应，需要格外注意。</li></ol></li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;3-31-化学课&quot;&gt;&lt;a href=&quot;#3-31-化学课&quot; class=&quot;headerlink&quot; title=&quot;3/31 化学课&quot;&gt;&lt;/a&gt;3/31 化学课&lt;/h1&gt;&lt;h2 id=&quot;固氮&quot;&gt;&lt;a href=&quot;#固氮&quot; class=&quot;headerlink&quot; titl</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200331-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/31/200331-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/31/200331-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-31T02:39:32.000Z</published>
    <updated>2020-09-22T09:41:05.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-31-地理课"><a href="#3-31-地理课" class="headerlink" title="3/31 地理课"></a>3/31 地理课</h1><h2 id="城市化的主要阶段"><a href="#城市化的主要阶段" class="headerlink" title="城市化的主要阶段"></a>城市化的主要阶段</h2><ol><li>城市化初期：<strong>人口</strong>和<strong>资本</strong>向中心城区<strong>聚集</strong><ul><li>城市人口迅速增长</li><li>城市用地规模扩大</li></ul></li><li>郊区化时期：<strong>人口</strong>和<strong>资本</strong>从城区向<strong>郊区迁移</strong><ul><li>中心城区人口迁往郊区</li><li>郊区农业人口变为城市人口</li><li>城市总人口增加</li><li>城市用地规模扩大</li></ul></li><li>逆城市化时期：<strong>人口</strong>和<strong>资本</strong>从大城市向<strong>周边中小城市或乡村</strong>迁移<ul><li>人口从大城市向周边中小城市或乡村扩散</li><li>大城市总人口减少，周边中小城市或乡村人口增加</li></ul></li></ol><a id="more"></a><h2 id="郊区化"><a href="#郊区化" class="headerlink" title="郊区化"></a>郊区化</h2><ol><li>基本概念：<strong>中心城区</strong>人口向<strong>郊区</strong>迁移的过程<ol><li>原先位于城市郊区的<strong>农业用地</strong>转变为<strong>城市用地</strong>，城市用地<strong>规模不断扩大</strong></li><li>中心城区人口<strong>向郊区</strong>迁移，大量郊区农业人口转为<strong>非农业人口</strong>，使得<strong>中心城区人口减少</strong>，<strong>郊区人口增加</strong>，城市<strong>总人口增加</strong>。</li></ol></li><li>郊区化的主要原因<ol><li>对于中心城区（迁出区）而言<ul><li>人口过度集中</li><li>环境问题日益严重</li><li>居民期盼改善居住条件和居住环境</li><li>居住用地被商业、工业设施用地置换</li><li>地价上涨</li></ul></li><li>对于郊区（迁入区）而言<ul><li>新建住宅位于城市的郊区</li><li>轨道交通发展</li><li>私家车普及</li><li>基础设施逐步完善</li></ul></li></ol></li></ol><h2 id="逆城市化"><a href="#逆城市化" class="headerlink" title="逆城市化"></a>逆城市化</h2><ol><li>基本概念：<strong>大城市</strong>人口向<strong>周边中小城市或乡村地区</strong>迁移的过程<ol><li>大城市人口<strong>向周边</strong>中小城市或乡村迁移</li><li>大城市人口<strong>减少</strong>，周边中小城市或乡村从事非农业生产的人口<strong>增加</strong></li></ol></li><li>逆城市化的主要原因<ol><li>对于大城市而言<ul><li>环境问题日益严重</li><li>对居住环境的质量要求越来越高</li><li>弹性工作时间和家庭办公方式兴起</li><li>城乡差距缩小</li></ul></li><li>对中小城市或乡村而言<ul><li>环境优美、空气清新、生活闲适</li><li>基础设施逐步完善，城乡差距缩小，生活设施更加完善</li><li>私家车高度普及和高速公路网络日益发达</li></ul></li></ol></li></ol><h2 id="郊区化和逆城市化的主要区别"><a href="#郊区化和逆城市化的主要区别" class="headerlink" title="郊区化和逆城市化的主要区别"></a>郊区化和逆城市化的主要区别</h2><ol><li>从人口迁移来看<ul><li>郊区化：人口从城市中心向郊区迁移</li><li>逆城市化：人口从大城向周边中小城市或乡村迁移</li></ul></li><li>从城市空间来看<ul><li>郊区化：农业用地转变为城市用地，城市规模扩大</li><li>逆城市化：大城市的区域拓展速度减缓或停滞不前</li></ul></li><li>从城市人口数量来看<ul><li>郊区化：中心城区人口减少，郊区非农业人口增加，城市总人口在增加。</li><li>逆城市化：人口流向大城市以外地区，城市人口减少</li></ul></li></ol><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">郊区化和逆城市化 \begin{cases}    郊区化 \begin{cases}        主要过程 \\ 主要原因    \end{cases} \\ 逆城市化 \begin{cases}        主要过程 \\ 主要原因    \end{cases}\end{cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-31-地理课&quot;&gt;&lt;a href=&quot;#3-31-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/31 地理课&quot;&gt;&lt;/a&gt;3/31 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市化的主要阶段&quot;&gt;&lt;a href=&quot;#城市化的主要阶段&quot; class=&quot;headerlink&quot; title=&quot;城市化的主要阶段&quot;&gt;&lt;/a&gt;城市化的主要阶段&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;城市化初期：&lt;strong&gt;人口&lt;/strong&gt;和&lt;strong&gt;资本&lt;/strong&gt;向中心城区&lt;strong&gt;聚集&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;城市人口迅速增长&lt;/li&gt;
&lt;li&gt;城市用地规模扩大&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;郊区化时期：&lt;strong&gt;人口&lt;/strong&gt;和&lt;strong&gt;资本&lt;/strong&gt;从城区向&lt;strong&gt;郊区迁移&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;中心城区人口迁往郊区&lt;/li&gt;
&lt;li&gt;郊区农业人口变为城市人口&lt;/li&gt;
&lt;li&gt;城市总人口增加&lt;/li&gt;
&lt;li&gt;城市用地规模扩大&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;逆城市化时期：&lt;strong&gt;人口&lt;/strong&gt;和&lt;strong&gt;资本&lt;/strong&gt;从大城市向&lt;strong&gt;周边中小城市或乡村&lt;/strong&gt;迁移&lt;ul&gt;
&lt;li&gt;人口从大城市向周边中小城市或乡村扩散&lt;/li&gt;
&lt;li&gt;大城市总人口减少，周边中小城市或乡村人口增加&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>Distribute the App on the Website</title>
    <link href="http://gyrojeff.moe/2020/03/31/Distribute-the-App-on-the-Website/"/>
    <id>http://gyrojeff.moe/2020/03/31/Distribute-the-App-on-the-Website/</id>
    <published>2020-03-31T01:45:30.000Z</published>
    <updated>2020-09-14T23:57:38.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>因为开发了一个小Demo，系统没有升级（OSX 10.14, iOS 13.4），所以没办法通过数据线传到手机。正好手上有这个Blog的网站，就想着能不能从Web上来下载。</p><a id="more"></a><h1 id="提示"><a href="#提示" class="headerlink" title="提示"></a>提示</h1><p>由于我不是企业账号，所以只能让有限的人数进行下载，而且必须要获得使用设备的UUID，获取方法：<a href="https://www.iclarified.com/52179/how-to-find-your-iphones-udid">https://www.iclarified.com/52179/how-to-find-your-iphones-udid</a></p><h1 id="关于开发者账号"><a href="#关于开发者账号" class="headerlink" title="关于开发者账号"></a>关于开发者账号</h1><p>如果没有developer账号，详情请看我上一篇博客</p><h1 id="PreSTEP"><a href="#PreSTEP" class="headerlink" title="PreSTEP"></a>PreSTEP</h1><p>如果你有enterprise账号，请跳过此步骤。前往developer官网，登陆之后：</p><ol><li>Certificates, IDs &amp; Profiles（侧边栏）</li><li>获得一个iOS Distribution的证书<ul><li><a href="https://help.apple.com/xcode/mac/current/#/dev3a05256b8">https://help.apple.com/xcode/mac/current/#/dev3a05256b8</a></li><li>-&gt; Certificates -&gt; Create(加号) -&gt; 选择iOS Distribution（如果有Xcode 11的话选择Apple Development） -&gt; Continue</li><li>证书请求的上传，参考资料：<a href="https://help.apple.com/developer-account/#/devbfa00fef7">https://help.apple.com/developer-account/#/devbfa00fef7</a></li></ul></li><li>在Device当中加入你收集到的UUID</li><li>在Identifiers中加入你想build的app的bundle ID</li></ol><h1 id="打包"><a href="#打包" class="headerlink" title="打包"></a>打包</h1><ol><li>在Provision Profiles中新建一个跟你的APP ID绑定的AdHoc Distribution的profile,这里会让你选择certificate来确保不会被盗用<ul><li>下载这个profile，你会得到一个mobileprovision文件，暂时大功告成，你得到了一个可以给App签名的文件,双击安装这个文件</li><li>注：如果你懒，此步跳过</li><li>注：有Enterprise的也可以跳过</li></ul></li><li>Xcode当中，Archive</li><li>点击Distribute</li><li>选择Ad Hoc（有钱买企业证书的就Enterprise）</li><li>然后一路next下去, 记得选上Generate Manifest.plist,如果不必要不要选 rebuild from bitcode（项目小问题不大）, 不然会很慢</li><li>会让你填IPA，Logo的网站（Logo无关紧要）</li><li>填错没关系，可以打开plist更改</li><li>把生成的manifest.plist和ipa文件扔到正确的网址上去</li><li>在你的下载页面添加如下标签提供下载： <figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">a</span> <span class="attr">href</span>=<span class="string">&quot;itms-services://?action=download-manifest&amp;url=https://gyrojeff.moe/playingcarddemo/index/manifest.plist&quot;</span>&gt;</span> Download App <span class="tag">&lt;/<span class="name">a</span>&gt;</span></span><br></pre></td></tr></table></figure> 其中网址改成你plist所在的网址。注：必须https。</li></ol><p>大功告成。（累死了</p><h1 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h1><p><a href="https://youyue123.github.io/tech/2016/12/14/use-Node.js-Bluemix-build-iOS-distribution-website.html">https://youyue123.github.io/tech/2016/12/14/use-Node.js-Bluemix-build-iOS-distribution-website.html</a></p><p>TestFlight使用：<a href="https://blog.coding.net/blog/ios-testFlight">https://blog.coding.net/blog/ios-testFlight</a></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;因为开发了一个小Demo，系统没有升级（OSX 10.14, iOS 13.4），所以没办法通过数据线传到手机。正好手上有这个Blog的网站，就想着能不能从Web上来下载。&lt;/p&gt;</summary>
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="plist" scheme="http://gyrojeff.moe/tags/plist/"/>
    
    <category term="iOS" scheme="http://gyrojeff.moe/tags/iOS/"/>
    
    <category term="IPA" scheme="http://gyrojeff.moe/tags/IPA/"/>
    
    <category term="Web" scheme="http://gyrojeff.moe/tags/Web/"/>
    
  </entry>
  
  <entry>
    <title>Apple Developer账号申请</title>
    <link href="http://gyrojeff.moe/2020/03/31/Apple-Developer%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7/"/>
    <id>http://gyrojeff.moe/2020/03/31/Apple-Developer%E8%B4%A6%E5%8F%B7%E7%94%B3%E8%AF%B7/</id>
    <published>2020-03-31T01:26:13.000Z</published>
    <updated>2020-09-14T23:57:24.000Z</updated>
    
    <content type="html"><![CDATA[<p>前两天给Apple交了税，因为前年尝试过，没有成功，特此记录。现在Apple貌似把以前的WWDC的app改成了Apple Developer，下载之后就可以在app内注册缴费。</p><p>官网：developer.apple.com</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;前两天给Apple交了税，因为前年尝试过，没有成功，特此记录。现在Apple貌似把以前的WWDC的app改成了Apple Developer，下载之后就可以在app内注册缴费。&lt;/p&gt;
&lt;p&gt;官网：developer.apple.com&lt;/p&gt;
</summary>
      
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/tags/iOS%E5%BC%80%E5%8F%91/"/>
    
    <category term="iOS" scheme="http://gyrojeff.moe/tags/iOS/"/>
    
  </entry>
  
  <entry>
    <title>200327-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/27/200327-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/27/200327-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-27T07:31:36.000Z</published>
    <updated>2020-09-22T09:41:04.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-27-地理课"><a href="#3-27-地理课" class="headerlink" title="3/27 地理课"></a>3/27 地理课</h1><h2 id="城市化的基本概念"><a href="#城市化的基本概念" class="headerlink" title="城市化的基本概念"></a>城市化的基本概念</h2><ol><li><strong>城市化</strong>是指<strong>农村人口</strong>转变为<strong>城市人口</strong>，<strong>农村地域</strong>转变为<strong>城市地域</strong>的过程。</li><li>衡量城市化的重要标志：城市人口<strong>占</strong>总人口的<strong>比重</strong>。</li></ol><a id="more"></a><h2 id="城市化的过程"><a href="#城市化的过程" class="headerlink" title="城市化的过程"></a>城市化的过程</h2><img src="/2020/03/27/200327-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><ol><li>世界城市化进程<ol><li>发展中国家：起步晚，水平低，速度快</li><li>发达国家：起步早，水平高，速度减缓</li><li>1800年前，世界城市化发展<strong>极为缓慢</strong>，城市<strong>数量少，规模小</strong>，城市人口呈<strong>低水平增长</strong>。</li><li>1800年~20世纪中叶，生产力发展推动<strong>城市化发展</strong>，世界城市化发展<strong>速度加快</strong>。</li><li>二战以后，世界城市化<strong>速度空前</strong>，城市人口比重<strong>迅速攀升</strong>。预测2030年城市化率达到60%。</li></ol></li><li>世界城市化的主要特点<ol><li>城市化进程大大加快</li><li>城市规模不断扩大</li><li>出现城市群</li><li>世界城市化的主流由发达国家转移到发展中国家</li><li>一般来说，发达国家城市化发展趋于缓慢，发展中国家城市化速度逐步加快</li></ol></li></ol><h2 id="城市化与社会经济发展"><a href="#城市化与社会经济发展" class="headerlink" title="城市化与社会经济发展"></a>城市化与社会经济发展</h2><ol><li>城市是区域经济增长中心<br><strong>规模效应和聚集效应显著</strong></li><li>城市是区域服务中心<br><strong>满足物质生活和精神文化的需要求</strong></li><li>城市化促进区域产业结构现代化<br><strong>城市化水平与经济结构相适应</strong></li><li>城市化带动农村现代化<br><strong>城市化过程也是农业和农村现代化过程</strong></li><li>城市化是社会经济发展的标志<br><strong>城市发展与经济增长相互促进</strong></li></ol><ul><li>城市化的速度<ul><li>城市化水平与经济发展相适应</li><li>超前城市化与之后城市化都不利于社会、经济的稳定</li><li>要保持城市化速度与经济发展速度协调</li></ul></li></ul><script type="math/tex; mode=display">\begin{aligned}    &城市化水平提高 \\    \Rightarrow &吸纳了大量农村剩余劳动力 \\     \Rightarrow &\begin{cases}        \begin{aligned}            &为第二第三产业提提供充裕的劳动力 \\            \Rightarrow &第二、三产业比重提高 \\             \Rightarrow &促进产业结构现代化        \end{aligned} \\        \begin{aligned}            &农村人均农业资源增加，农业生产规模扩大，生产效率提高 \\            \Rightarrow & 缩小工农业和城乡差距 \\            \Rightarrow & 促进农业和农村现代化        \end{aligned}    \end{cases} \\     \Rightarrow & 城乡一体化发展\end{aligned}</script><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">城市化过程 \begin{cases}    基本概念 \\ 城市化过程 \begin{cases}        世界城市化过程 \\ 世界城市化的重要特点    \end{cases} \\ 城市化与社会经济发展 - 保持城市化速度与经济发展速度的协调\end{cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-27-地理课&quot;&gt;&lt;a href=&quot;#3-27-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/27 地理课&quot;&gt;&lt;/a&gt;3/27 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市化的基本概念&quot;&gt;&lt;a href=&quot;#城市化的基本概念&quot; class=&quot;headerlink&quot; title=&quot;城市化的基本概念&quot;&gt;&lt;/a&gt;城市化的基本概念&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;城市化&lt;/strong&gt;是指&lt;strong&gt;农村人口&lt;/strong&gt;转变为&lt;strong&gt;城市人口&lt;/strong&gt;，&lt;strong&gt;农村地域&lt;/strong&gt;转变为&lt;strong&gt;城市地域&lt;/strong&gt;的过程。&lt;/li&gt;
&lt;li&gt;衡量城市化的重要标志：城市人口&lt;strong&gt;占&lt;/strong&gt;总人口的&lt;strong&gt;比重&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200326-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/26/200326-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/26/200326-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-26T01:30:16.000Z</published>
    <updated>2020-09-22T09:41:02.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-26-地理课"><a href="#3-26-地理课" class="headerlink" title="3/26 地理课"></a>3/26 地理课</h1><h2 id="城市群的基本概念"><a href="#城市群的基本概念" class="headerlink" title="城市群的基本概念"></a>城市群的基本概念</h2><ol><li><strong>城市群</strong>是社会经济发展到<strong>较高程度</strong>后，在一定范围内出现的一种<strong>城市集聚现象</strong>。</li><li>对比城市体系：<ul><li>城市体系：大部分国家、地区都有</li><li>城市群：经济发达和人口规模大的区域</li></ul></li></ol><a id="more"></a><h2 id="城市群的特征和形成条件"><a href="#城市群的特征和形成条件" class="headerlink" title="城市群的特征和形成条件"></a>城市群的<strong>特征</strong>和形成条件</h2><ol><li>城市群的特征<ol><li>具有一定数量、高度密集、不同等级、不同类型的城市。</li><li>以一个或若干个特大城市为核心。</li><li>城市之间存在着内在联系。</li></ol></li><li>城市群的形成条件<ol><li>优越的地理位置和适宜的自然条件<br>  世界六大城市群都位于<strong>温暖、湿润和中纬度沿海</strong>地区</li><li>社会经济发达，人口密集<br>  发达国家的城市群<strong>远多于</strong>发展中国家<br>  发展中国家的城市群集中在<strong>国内经济最发达的地区</strong></li><li>交通通讯发达，对外联系便捷</li></ol></li></ol><h2 id="世界六大城市群"><a href="#世界六大城市群" class="headerlink" title="世界六大城市群"></a>世界六大城市群</h2><ol><li>以<strong>巴黎</strong>为中心的<strong>欧洲西北部</strong>城市群</li><li>以<strong>伦敦</strong>为中心的<strong>英国</strong>城市群</li><li>以<strong>上海</strong>为中心的<strong>中国长江三角洲</strong>城市群</li><li>以<strong>东京</strong>为中心的<strong>日本太平洋沿岸</strong>城市群</li><li>以<strong>芝加哥</strong>为中心的<strong>北美五大湖沿岸</strong>城市群</li><li>以<strong>纽约</strong>为中心的<strong>美国东北部大西洋沿岸</strong>城市群</li></ol><h2 id="我国四大城市群"><a href="#我国四大城市群" class="headerlink" title="我国四大城市群"></a>我国四大城市群</h2><ol><li>辽中南城市群</li><li>京津唐城市群</li><li>长江三角洲城市群</li><li>珠江三角洲城市群</li></ol><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">城市群 \begin{cases}    基本概念 \\ 城市群的特征和形成条件 \begin{cases}        城市群特征 \\ 城市群形成条件    \end{cases} \\ 世界六大城市群 \\ 我国四大城市群\end{cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-26-地理课&quot;&gt;&lt;a href=&quot;#3-26-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/26 地理课&quot;&gt;&lt;/a&gt;3/26 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市群的基本概念&quot;&gt;&lt;a href=&quot;#城市群的基本概念&quot; class=&quot;headerlink&quot; title=&quot;城市群的基本概念&quot;&gt;&lt;/a&gt;城市群的基本概念&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;城市群&lt;/strong&gt;是社会经济发展到&lt;strong&gt;较高程度&lt;/strong&gt;后，在一定范围内出现的一种&lt;strong&gt;城市集聚现象&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;对比城市体系：&lt;ul&gt;
&lt;li&gt;城市体系：大部分国家、地区都有&lt;/li&gt;
&lt;li&gt;城市群：经济发达和人口规模大的区域&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>当爱好变成特长,就是苦难到来之时</title>
    <link href="http://gyrojeff.moe/2020/03/24/%E5%BD%93%E7%88%B1%E5%A5%BD%E5%8F%98%E6%88%90%E7%89%B9%E9%95%BF-%E5%B0%B1%E6%98%AF%E8%8B%A6%E9%9A%BE%E5%88%B0%E6%9D%A5%E4%B9%8B%E6%97%B6/"/>
    <id>http://gyrojeff.moe/2020/03/24/%E5%BD%93%E7%88%B1%E5%A5%BD%E5%8F%98%E6%88%90%E7%89%B9%E9%95%BF-%E5%B0%B1%E6%98%AF%E8%8B%A6%E9%9A%BE%E5%88%B0%E6%9D%A5%E4%B9%8B%E6%97%B6/</id>
    <published>2020-03-24T10:35:59.000Z</published>
    <updated>2020-04-05T15:34:19.000Z</updated>
    
    <content type="html"><![CDATA[<div id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">  <div class="hbe-input-container">  <input type="password" id="hbePass" placeholder="" />    <label for="hbePass">输入密码，查看文章。</label>    <div class="bottom-line"></div>  </div>  <script id="hbeData" type="hbeData" data-hmacdigest="6bdff625ca6e6cfa392321e5de8db79df1fb2f576c017b04d4dc4a666761b9df">61aa5a8c0891ee664bcbf5c405b7fe132466ae06e6bd5a84e9a8bc0b1666ab9f720a7068e6c004175e7ab7f41a8b4353d7a2e2266e8ae3224d3524d1530a2c6af40138e9b7c262ed3f688a652b5265241e0ff88bae9880939a1ee21fc5721aaae53ba1319664bfb2b7ab73536f27d9f55d98455a5a4a33bb912f32c5c571b39000a48bb020f60f6ce81e9961cca03b487c5b2667a10e0419f7d6d4ee221ec5933b0a84da9ff1a9ff2fc687aff8959fcd48d06749fa504bb85a86c1038f3cbdb3d54a7cf8725d740585b01579480c5b357430f67f564bafabac4de76bcaace8cc42cbbbc4070726028892ae2dd13d820ccd45c12bdd73964b7196c7bba9fe693c6229c37ae14d7bbb0acfb0328966aa21698a3ae365f2ff5da594adba0d6b1e4a48e7a952b87180a6b6c430f7bcc9264fca781e78cda9a53a4171848ed4e773c97acf3675e96e592732f969601bfb37789dd055ae59151fcc2718ececbd67a6a82fa96b559246897622c6bd6734c808b5fb19dc33039355153c9f9ce59ae252090a255d5c8be8a29a617d69e05289b1005d35d13b334e231441a9e96cc6a4f499a23709f79693c8b1f4d1ce399cb0a2af520fe6efeda1289a557f5b1be1ea305fefb494884c979bb14678820f849b2d90f2e001456824f00ec79caa3b2633499bdd6a6e5484bd01d02693ae8eb6b0819b89eced49eb65895318bc9c3b5205ef21e38c9107c23384bd7cc09adef5ff7674903ba174bc6bebfd00eb1b06fd265015bd8e5f3e87531381f95eb8ed3f9f203dd93313ebb18e30cb40ad0a190368d674141c4c5679e66cac8e8773d50b25b9adfc97cbe6a1d050b7191ab5edf94f29b571f8874f7968c52e1e8c70b2d496fee10ddac94aeb25ff2bfae989dd3c32320f0d67f5008b4a9062ce978bbf7bb2205b80f0db7d7936945bd6eb4f4d5862988512f2979a38026a3088ba8aebf7d5432da682d84cf953c929cf7e587c2c711929e4b4c09ff46780d57839bfc0612bb247ae0ebd34d99ada4e184d76d66f14b7e93b9524e989cf571d73d32325c9f12e7493dda58871054db638eb871b47e6cb8c13e98aa4d6a194cdfe416e3f9e5414f4482a926ee1435e2c36546fc3bdda51f9de3686250652ed1332ec7e290194635753d9b0118e9188f070ed88f3ae6faea43b1a832f425dfa8342ab7a95f30cf6b716a6e7e726be1d421548de56cde724471f29295343d785d9192ee015aa7c7e81414881d3e0ef721070c77e8b35cd1a1d6d8c4f1028124f72a8bff0cce61b3bcb14a711a57b03a477d8798c38b8da77c8ad13038812307cbb41e95ecd2f8367bcbfa30e365aec018ff8628c8848076d9f9418e08fa304a7aa673f71a7d141dd263fa2c942626f4cbb0cb883ea11084dd49c6824a91293f20d1bf3788d55a2aa09426f9bfb39b5baeadb013fe87148db02544732114bcaa21c574a013b5813fee00bb8d4399be5482e37e00c18f1addb14b321c3aea883bc9d4ee4d49d659a5c7aab32369d19e319706b3a0baf55f25478ea5e78af471654485ee861f2305b5fffc9654fd4637ac281e26c04b91a1556b1168d12da558ffcd4ad554086d41700c9536c89df693a18308d2a7d6c47752270d7514a0076f53cb16154581f9b108a898391c79b47a2bd4bbdd859d3fc9aeae7e91499541aa2c5d241dcebcb8bb1570d58fbfd50a2bd89bc32eb33f408195134a6318c1b5e779b774ab62d5805715e5abb59ab816e03428419cfb8edc8a5c1fd3eeeec4648b464d6c15515986dd3879ca29c86ac340ca8e34ac1bdf5714c62adad7a8c8b1b83a727d7556d1af78b0423aa6ef1b670bdd2f8b88ae7ddfd88ea76c69d5500543546ea4d22f90bc22d5bda46b2042df74c6a5704ad2472a2bc04839a6759f15c9cfde00b6bf9184909240e348aed2c0dceb56fbb139ffdcf5fbb3b7049967be156a7b3c2576d4a914b2767074a993c0fd1b838c4a3603a349be04d3ed3cfe0fcae35abad3a68d451e4531860843aaabcf1b9533253ee2855f3ec44574d086cc61c158370b16f4fa6f8a8d17395d938d45db77f858e968e3699cfb2e71798b05b3a7571e660ed1fce1ca1f39ddde18c583b2ae524ad29c34f896b06a1b4171c16eab9154d789f4e568e57bdbb3ad5a6168133ccb2a1fab61bdff944eee326fed1243eb8a3e92b05293f53d28582ba8a72eeff73137f7df154782d743e7254d3b2ac46d4c5b25671c0200aa19a152b78e4b8d2fd96a89fb033941004e5f83c417dc45445990478cf0965ea4c23ecd242de7d32ff3d0d8e9bf54255467d82f0e816da22b112ff20da5d735d3739f05b92636458d35509dbf8ea37ddfc5662afcc40e60c619b10b2def2ce6d0e4bcf4ffb0a6081b9e2a7f3c50f8b550dbd144df4a39fcdf58cd007368588250df8ed92b708883e7b7b5ef21c7861e07eb4a6d2f9cd290881778e631434cea627262c4157ca22e5c8307db42bd14e8311c5de30ec99ca7aba9c26402b1084377c89e0f1e886ade4b250b88aaa5e333fd5f5e28bb2f35b423e3c8cb92ac51c146089d78f2ac8faeb32461295fd00bf42180d34e1b0bb118fcf9a696dfab6a7fba91ae08318fa767d41c1a8762f418a40ddb546dbb6c5b03187541579ddd4e7503eb07ff72f9575611ae368e61104d8fc677d559ff38123136d79e2bd65308741436752c6675732ae5cc1383f7145565c25ce828539893d36e121acbb2fcfef6cb83731fd59e12b158654b88ec736b56b8b74b5194cd628b63f7b1147be676c3d831f40751ac9ef82f84b3babed76bdd16fa323d466dfd58cbc6001dc19c76c15991f250de743a3790e4d5cc051d2e65a52eb8e57084c5e8c29d4657c35f32a27779431011f5df1297d97768b11f6fe90e1120fd6c9b004dd24c3179f35828f974966cf60810d89248b3e7a56468f38421a0c4939a4c05c8664f1fcf24dd3ff004d840ac17a4553390c85b88f8c2b0a9b6a36e4599408bec2c4849a2e0f17108a0b00685a3f565d9ed6221493bb76dac5f7398d2378543b27610b0637b973dcdf47fd0f63f3b1d15d06a08ea6869c6327dc</script></div><script src="/lib/blog-encrypt.js"></script><link href="/css/blog-encrypt.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">这是一篇加密文章，内容可能是个人情感宣泄或者收费技术。如果你确实想看，请与我联系。</summary>
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
  </entry>
  
  <entry>
    <title>200324-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-24T05:25:45.000Z</published>
    <updated>2020-09-22T12:59:24.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-24-化学课"><a href="#3-24-化学课" class="headerlink" title="3/24 化学课"></a>3/24 化学课</h1><h2 id="浓硫酸"><a href="#浓硫酸" class="headerlink" title="浓硫酸"></a>浓硫酸</h2><h3 id="浓硫酸的物理性质"><a href="#浓硫酸的物理性质" class="headerlink" title="浓硫酸的物理性质"></a>浓硫酸的物理性质</h3><ol><li>无色、粘稠油状液体</li><li>沸点高、难挥发 <div class="note info no-icon">            <p>利用难挥发的性质可以制易挥发酸</p><script type="math/tex; mode=display">\ce {NaCl + H2SO4(浓) ->[微热] NaHSO4 + HCl ^}</script><script type="math/tex; mode=display">\ce {NaNO3 + H2SO4(浓) ->[微热] NaHSO4 + HNO3 ^}</script>          </div></li><li>能与水以任意比例互溶</li><li>稀释浓硫酸<ul><li>酸入水</li><li>沿器壁</li><li>慢慢倒</li><li>不断搅</li></ul></li><li>发烟硫酸（酸雾）<script type="math/tex; mode=display"> \ce {SO3 + H2O -> H2SO4}</script></li></ol><a id="more"></a><div class="table-container"><table><thead><tr><th style="text-align:center"></th><th style="text-align:center">稀硫酸</th><th style="text-align:center">浓硫酸</th></tr></thead><tbody><tr><td style="text-align:center">溶质微粒</td><td style="text-align:center">$\ce {H^+, SO_4^{2-}}$</td><td style="text-align:center">$\ce {H2SO4}$</td></tr></tbody></table></div><script type="math/tex; mode=display">\ce {H2SO4 + nH2O -> H2SO4·nH2O}</script><h3 id="浓硫酸的化学性质"><a href="#浓硫酸的化学性质" class="headerlink" title="浓硫酸的化学性质"></a>浓硫酸的化学性质</h3><ol><li>酸的通性<script type="math/tex; mode=display">     \ce {H2SO4 -> 2H+ + SO4^2-}</script></li><li>吸水性<br><div class="note warning">常用于干燥不与浓硫酸反应的气体</div><div class="note warning no-icon">            <p>浓硫酸可以使结晶水合物失去结晶水</p><script type="math/tex; mode=display"> \ce {CuSO4·5H2O ->[浓H2SO4] CuSO4 + 5H2O}</script>          </div></li><li>脱水性<br><div class="note warning">浓硫酸能按水的组成比脱去有机物中氢、氧元素，使有机物碳化</div><div class="note warning no-icon">            <p>黑面包实验</p><p>实验现象：蔗糖逐渐变黑，体积膨胀，放出大量热。</p><script type="math/tex; mode=display"> \ce {C11H22O11 ->[浓H2SO4] 11C + 11H2O}</script>          </div></li><li>强氧化性<ol><li>与碳发生反应<script type="math/tex; mode=display">  \ce {C + 2H2SO4(浓) ->[\Delta] CO2 ^ + 2SO2 ^ + 2H2O}</script></li><li>与金属反应<ol><li><script type="math/tex; mode=display">     \ce {Cu + 2H2SO4(浓) ->[\Delta] CuSO4 + SO2 ^ + 2H2O}</script>实验现象：铜逐渐溶解，有大量气体产生，能使品红溶液褪色，使紫色石蕊试液变红。<br>检验$\ce {Cu2+}$：算入水，显蓝色。</li><li>如果足量铜片与少量浓硫酸反应，由于硫酸浓度逐渐变低，所以残留的是硫酸和硫酸铜的混合溶液。</li><li>如果足量的锌和少量浓硫酸反应，会先进行氧化还原反应，等到硫酸变稀之后发生酸和活泼金属的置换反应。<script type="math/tex; mode=display">     \ce {Zn + 2H2SO4(浓) -> ZnSO4 + SO2 ^ + 2H2O}</script><script type="math/tex; mode=display">     \ce {Zn + H2SO4 -> ZnSO4 + H2 ^}</script></li><li>常温下：<script type="math/tex; mode=display">\ce {Fe / Al + H2SO4(浓) -> 钝化}</script></li><li>在加热条件下，浓硫酸可以和大多数金属反应产生相应的硫酸盐、二氧化硫、水。<script type="math/tex; mode=display">\ce {(大多数)金属 + H2SO4(浓) -> 硫酸盐 + SO2 ^ + H2O}</script></li><li>可以将$\ce {Fe}$氧化成铁离子：<script type="math/tex; mode=display">     \ce {2Fe + 6H2SO4(浓) ->[\Delta] Fe2(SO4)3 + 3SO2 ^ + 6H2O}</script></li><li>过量的$\ce {Zn}$剩余的溶液都是$\ce {ZnSO4}$</li><li>过量的$\ce {Fe}$剩余的溶液是$\ce {FeSO4, Fe2(SO4)3}$的混合溶液</li></ol></li></ol></li></ol><h2 id="硫酸盐"><a href="#硫酸盐" class="headerlink" title="硫酸盐"></a>硫酸盐</h2><ol><li>硫酸钡$\ce {(BaSO4)}$<ul><li>白色固体</li><li>不溶于水、不溶于酸</li><li>用途：钡餐</li></ul></li><li>硫酸钙$\ce {(CaSO4)}$<ul><li>生石膏：$\ce {(CaSO4*2H2O)}$</li><li>熟石灰：$\ce {(2CaSO4*H2O)}$</li><li><script type="math/tex; mode=display">\ce {生石灰<=>[\Delta][H2O]熟石灰}</script></li><li>用途：石膏模型、石膏绷带、调节水泥凝固时间</li></ul></li><li>硫酸铜$\ce {(CuSO4)}$<ul><li>白色粉末（无水）</li><li>蓝色晶体（结晶水合物）：$\ce {CuSO4*5H2O}$</li><li>用途：检验水分、农药、电解液</li></ul></li><li>明矾，十二水合硫酸铝钾：$\ce {KAl(SO4)2*12H2O}$<ul><li>无色晶体</li><li><script type="math/tex; mode=display">\ce {KAl(SO4)2 -> K+ + Al^3+ + 2SO4^2-}</script></li><li>用途：净水剂（原理：铝离子水解）</li></ul></li><li>绿矾：$\ce {FeSO4*7H2O}$</li><li>芒硝：$\ce {Na2SO4*10H2O}$</li></ol><h2 id="硫酸根的检验"><a href="#硫酸根的检验" class="headerlink" title="硫酸根的检验"></a>硫酸根的检验</h2><ol><li>原理：<script type="math/tex; mode=display">     \ce {Ba^2+ + SO4^2- -> BaSO4 v}</script></li><li>加入盐酸酸化，然后加入氯化钡溶液，有白色沉淀生成。</li></ol><h2 id="ce-CO2-SO2-混合气体检验"><a href="#ce-CO2-SO2-混合气体检验" class="headerlink" title="$\ce {CO2,SO2}混合气体检验$"></a>$\ce {CO2,SO2}混合气体检验$</h2><script type="math/tex; mode=display">\ce {品红溶液(检验SO2) -> KMnO4/~H+(除尽SO2) -> 品红溶液(证明是否除尽了SO2) -> 澄清石灰水(检验CO2)}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-24-化学课&quot;&gt;&lt;a href=&quot;#3-24-化学课&quot; class=&quot;headerlink&quot; title=&quot;3/24 化学课&quot;&gt;&lt;/a&gt;3/24 化学课&lt;/h1&gt;&lt;h2 id=&quot;浓硫酸&quot;&gt;&lt;a href=&quot;#浓硫酸&quot; class=&quot;headerlink&quot; title=&quot;浓硫酸&quot;&gt;&lt;/a&gt;浓硫酸&lt;/h2&gt;&lt;h3 id=&quot;浓硫酸的物理性质&quot;&gt;&lt;a href=&quot;#浓硫酸的物理性质&quot; class=&quot;headerlink&quot; title=&quot;浓硫酸的物理性质&quot;&gt;&lt;/a&gt;浓硫酸的物理性质&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;无色、粘稠油状液体&lt;/li&gt;
&lt;li&gt;沸点高、难挥发 &lt;div class=&quot;note info no-icon&quot;&gt;
            &lt;p&gt;利用难挥发的性质可以制易挥发酸&lt;/p&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;\ce {NaCl + H2SO4(浓) -&gt;[微热] NaHSO4 + HCl ^}&lt;/script&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;\ce {NaNO3 + H2SO4(浓) -&gt;[微热] NaHSO4 + HNO3 ^}&lt;/script&gt;
          &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;能与水以任意比例互溶&lt;/li&gt;
&lt;li&gt;稀释浓硫酸&lt;ul&gt;
&lt;li&gt;酸入水&lt;/li&gt;
&lt;li&gt;沿器壁&lt;/li&gt;
&lt;li&gt;慢慢倒&lt;/li&gt;
&lt;li&gt;不断搅&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;发烟硫酸（酸雾）&lt;script type=&quot;math/tex; mode=display&quot;&gt;
 \ce {SO3 + H2O -&gt; H2SO4}&lt;/script&gt;&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200324-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-24T02:14:13.000Z</published>
    <updated>2020-09-22T09:41:01.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-24-地理课"><a href="#3-24-地理课" class="headerlink" title="3/24 地理课"></a>3/24 地理课</h1><h2 id="中心地理论"><a href="#中心地理论" class="headerlink" title="中心地理论"></a>中心地理论</h2><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>为研究和探索城市空间结构分布规律，德国地理学家克里斯·泰勒与1933年提出了”<strong>中心地理论</strong>“</p>            <i class="fa fa-quote-right"></i>          </blockquote><p><strong>中心地理论</strong>揭示了城市商业，行政等事物的<strong>空间结构特征</strong>，被认为是20世纪人文地理对社会经济文化发展的<strong>最重要贡献之一</strong></p><ul><li>在一定区域内，大小不同的中心地（城市或城市内的商业中心）基本都呈现一定的<strong>等级体系</strong>。</li><li>中心地的服务区呈<strong>六边形</strong>，中心地位于六边形的<strong>中心</strong></li><li>中心地理论在<strong>国土整治</strong>、<strong>区域开发</strong>、<strong>商业规划</strong>、<strong>城镇体系规划</strong>等领域应用广泛。</li></ul><a id="more"></a><div class="table-container"><table><thead><tr><th style="text-align:center">城市等级</th><th style="text-align:center">规模</th><th style="text-align:center">职能</th><th style="text-align:center">服务范围</th><th style="text-align:center">城市数量</th></tr></thead><tbody><tr><td style="text-align:center">高</td><td style="text-align:center">大</td><td style="text-align:center">多</td><td style="text-align:center">大</td><td style="text-align:center">少</td></tr><tr><td style="text-align:center">低</td><td style="text-align:center">小</td><td style="text-align:center">少</td><td style="text-align:center">小</td><td style="text-align:center">多</td></tr></tbody></table></div><center><svg width="1048px" height="518px" viewBox="0 0 1048 518" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">    <!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->    <title>Rectangle</title>    <desc>Created with Sketch.</desc>    <defs>        <circle id="path-1" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-2" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-3" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-4" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-5" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-6" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-7" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-8" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-9" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-10" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-11" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-12" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-13" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-14" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-15" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-16" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-17" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-18" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-19" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-20" cx="22.5" cy="22.5" r="1"></circle>        <circle id="path-21" cx="22.5" cy="22.5" r="1"></circle>    </defs>    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">        <g id="Rectangle">            <rect fill="#F7FEFF" fill-rule="evenodd" x="0" y="0" width="1047.6" height="518.4"></rect>            <g id="Oval" transform="translate(23.400000, 14.400000)">                <g transform="translate(41.400000, 39.600000)" stroke="#979797" stroke-width="1.8">                    <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                    <g id="Oval-2">                        <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-1"></use>                        <use xlink:href="#path-1"></use>                    </g>                </g>                <g transform="translate(241.200000, 0.000000)" stroke="#979797" stroke-width="1.8">                    <g transform="translate(0.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-2"></use>                            <use xlink:href="#path-2"></use>                        </g>                    </g>                    <g transform="translate(45.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-3"></use>                            <use xlink:href="#path-3"></use>                        </g>                    </g>                    <g transform="translate(90.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-4"></use>                            <use xlink:href="#path-4"></use>                        </g>                    </g>                    <g transform="translate(135.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-5"></use>                            <use xlink:href="#path-5"></use>                        </g>                    </g>                    <g transform="translate(0.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-6"></use>                            <use xlink:href="#path-6"></use>                        </g>                    </g>                    <g transform="translate(45.000000, 79.200000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-7"></use>                            <use xlink:href="#path-7"></use>                        </g>                    </g>                    <g transform="translate(23.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-8"></use>                            <use xlink:href="#path-8"></use>                        </g>                    </g>                    <g transform="translate(68.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-9"></use>                            <use xlink:href="#path-9"></use>                        </g>                    </g>                    <g transform="translate(113.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-10"></use>                            <use xlink:href="#path-10"></use>                        </g>                    </g>                    <g transform="translate(158.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-11"></use>                            <use xlink:href="#path-11"></use>                        </g>                    </g>                    <g transform="translate(23.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-12"></use>                            <use xlink:href="#path-12"></use>                        </g>                    </g>                    <g transform="translate(68.400000, 39.600000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-13"></use>                            <use xlink:href="#path-13"></use>                        </g>                    </g>                    <g transform="translate(45.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-14"></use>                            <use xlink:href="#path-14"></use>                        </g>                    </g>                    <g transform="translate(90.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-15"></use>                            <use xlink:href="#path-15"></use>                        </g>                    </g>                    <g transform="translate(135.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-16"></use>                            <use xlink:href="#path-16"></use>                        </g>                    </g>                    <g transform="translate(180.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-17"></use>                            <use xlink:href="#path-17"></use>                        </g>                    </g>                    <g transform="translate(45.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-18"></use>                            <use xlink:href="#path-18"></use>                        </g>                    </g>                    <g transform="translate(90.000000, 0.000000)">                        <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                        <g id="Oval-2">                            <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-19"></use>                            <use xlink:href="#path-19"></use>                        </g>                    </g>                    <path d="M43.2,84.6 L40.5,87.3" id="Path"></path>                    <path d="M46.8,84.6 L41.4,90" id="Path-2"></path>                    <path d="M50.4,84.6 L42.3,92.7" id="Path-3"></path>                    <path d="M88.2,84.6 L85.5,87.3" id="Path"></path>                    <path d="M91.8,84.6 L86.4,90" id="Path-2"></path>                    <path d="M95.4,84.6 L87.3,92.7" id="Path-3"></path>                    <path d="M133.2,84.6 L130.5,87.3" id="Path"></path>                    <path d="M136.8,84.6 L131.4,90" id="Path-2"></path>                    <path d="M140.4,84.6 L132.3,92.7" id="Path-3"></path>                    <path d="M66.6,45 L63.9,47.7" id="Path"></path>                    <path d="M70.2,45 L64.8,50.4" id="Path-2"></path>                    <path d="M73.8,45 L65.7,53.1" id="Path-3"></path>                    <path d="M111.6,45 L108.9,47.7" id="Path"></path>                    <path d="M115.2,45 L109.8,50.4" id="Path-2"></path>                    <path d="M118.8,45 L110.7,53.1" id="Path-3"></path>                    <path d="M156.6,45 L153.9,47.7" id="Path"></path>                    <path d="M160.2,45 L154.8,50.4" id="Path-2"></path>                    <path d="M163.8,45 L155.7,53.1" id="Path-3"></path>                    <g id="Path" transform="translate(135.000000, 35.100000) rotate(-180.000000) translate(-135.000000, -35.100000) translate(84.600000, 30.600000)">                        <path d="M3.6,0 L0.9,2.7"></path>                        <path d="M7.2,0 L1.8,5.4" id="Path-2"></path>                        <path d="M10.8,0 L2.7,8.1" id="Path-3"></path>                        <path d="M48.6,0 L45.9,2.7"></path>                        <path d="M52.2,0 L46.8,5.4" id="Path-2"></path>                        <path d="M55.8,0 L47.7,8.1" id="Path-3"></path>                        <path d="M93.6,0 L90.9,2.7"></path>                        <path d="M97.2,0 L91.8,5.4" id="Path-2"></path>                        <path d="M100.8,0 L92.7,8.1" id="Path-3"></path>                    </g>                    <g id="Path" transform="translate(113.400000, 74.700000) rotate(-180.000000) translate(-113.400000, -74.700000) translate(63.000000, 70.200000)">                        <path d="M3.6,0 L0.9,2.7"></path>                        <path d="M7.2,0 L1.8,5.4" id="Path-2"></path>                        <path d="M10.8,0 L2.7,8.1" id="Path-3"></path>                        <path d="M48.6,0 L45.9,2.7"></path>                        <path d="M52.2,0 L46.8,5.4" id="Path-2"></path>                        <path d="M55.8,0 L47.7,8.1" id="Path-3"></path>                        <path d="M93.6,0 L90.9,2.7"></path>                        <path d="M97.2,0 L91.8,5.4" id="Path-2"></path>                        <path d="M100.8,0 L92.7,8.1" id="Path-3"></path>                    </g>                </g>                <g transform="translate(579.600000, 39.600000)" stroke="#979797" stroke-width="1.8">                    <g>                        <g>                            <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                            <g id="Oval-2">                                <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-20"></use>                                <use xlink:href="#path-20"></use>                            </g>                        </g>                        <g transform="translate(32.400000, 0.000000)">                            <circle fill="#FEFFEC" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                            <g id="Oval-2">                                <use fill="#D8D8D8" fill-rule="evenodd" xlink:href="#path-21"></use>                                <use xlink:href="#path-21"></use>                            </g>                        </g>                        <circle fill-opacity="0" fill="#D8D8D8" fill-rule="evenodd" cx="22.5" cy="22.5" r="22.5"></circle>                    </g>                    <path d="M38.7,6.3 L38.7,37.8" id="Path" stroke-dasharray="3.6"></path>                </g>                <g id="Path" transform="translate(806.400000, 9.000000)" stroke="#000000" stroke-width="1.8">                    <g transform="translate(0.000000, 46.800000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(0.000000, 16.200000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(108.000000, 46.800000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(108.000000, 16.200000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(27.000000, 0.900000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(27.000000, 62.100000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(27.000000, 31.500000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(54.000000, 46.800000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(54.000000, 16.200000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(81.000000, 0.900000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(81.000000, 62.100000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                    <g transform="translate(81.000000, 31.500000)">                        <path d="M10.8,32.4 L28.8,32.4 M2.04981132,16.9557714 L11.0498113,32.5442286 M11.0498113,1.65577137 L2.04981132,17.2442286 M28.8,1.8 L10.8,1.8 M37.5501887,17.2442286 L28.5501887,1.65577137 M28.5501887,32.5442286 L37.5501887,16.9557714" stroke-linecap="round"></path>                        <circle id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="19.8" cy="17.1" r="1"></circle>                    </g>                </g>                <g id="Path" transform="translate(288.000000, 255.600000)">                    <g stroke="#000000" stroke-width="2.592">                        <g transform="translate(0.000000, 69.888000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(0.000000, 21.504000)">                            <path d="M15.2791579,51.4168163 L40.7444211,51.4168163 M2.8999436,28.2499523 L15.6325752,50.3035171 M15.6325752,3.96978902 L2.8999436,26.0233538 M40.7444211,2.8564898 L15.2791579,2.8564898 M53.1236354,26.0233538 L40.3910038,3.96978902 M40.3910038,50.3035171 L53.1236354,28.2499523" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="27.1366531" rx="1.27326316" ry="1.4282449"></ellipse>                        </g>                        <g transform="translate(38.304000, 0.000000)">                            <path d="M15.2791579,48.5603265 L40.7444211,48.5603265 M2.8999436,26.0679115 L15.6325752,48.1214763 M15.6325752,3.13664617 L2.8999436,25.190211 M40.7444211,2.69779592 L15.2791579,2.69779592 M53.1236354,25.190211 L40.3910038,3.13664617 M40.3910038,48.1214763 L53.1236354,26.0679115" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="25.6290612" rx="1.27326316" ry="1.34889796"></ellipse>                        </g>                        <g transform="translate(38.304000, 91.392000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(38.304000, 45.696000)">                            <path d="M15.2791579,48.5603265 L40.7444211,48.5603265 M2.8999436,26.0679115 L15.6325752,48.1214763 M15.6325752,3.13664617 L2.8999436,25.190211 M40.7444211,2.69779592 L15.2791579,2.69779592 M53.1236354,25.190211 L40.3910038,3.13664617 M40.3910038,48.1214763 L53.1236354,26.0679115" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="25.6290612" rx="1.27326316" ry="1.34889796"></ellipse>                        </g>                        <g transform="translate(76.608000, 69.888000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(76.608000, 21.504000)">                            <path d="M15.2791579,51.4168163 L40.7444211,51.4168163 M2.8999436,28.2499523 L15.6325752,50.3035171 M15.6325752,3.96978902 L2.8999436,26.0233538 M40.7444211,2.8564898 L15.2791579,2.8564898 M53.1236354,26.0233538 L40.3910038,3.96978902 M40.3910038,50.3035171 L53.1236354,28.2499523" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="27.1366531" rx="1.27326316" ry="1.4282449"></ellipse>                        </g>                    </g>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="79.3235821 64.8 93.258806 57.24 106.12209 64.8 106.12209 81 93.258806 87.48 79.3235821 78.84"></polygon>                </g>                <g id="Path" transform="translate(552.600000, 255.600000)">                    <g stroke="#000000" stroke-width="2.592">                        <g transform="translate(0.000000, 69.888000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(0.000000, 21.504000)">                            <path d="M15.2791579,51.4168163 L40.7444211,51.4168163 M2.8999436,28.2499523 L15.6325752,50.3035171 M15.6325752,3.96978902 L2.8999436,26.0233538 M40.7444211,2.8564898 L15.2791579,2.8564898 M53.1236354,26.0233538 L40.3910038,3.96978902 M40.3910038,50.3035171 L53.1236354,28.2499523" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="27.1366531" rx="1.27326316" ry="1.4282449"></ellipse>                        </g>                        <g transform="translate(38.304000, 0.000000)">                            <path d="M15.2791579,48.5603265 L40.7444211,48.5603265 M2.8999436,26.0679115 L15.6325752,48.1214763 M15.6325752,3.13664617 L2.8999436,25.190211 M40.7444211,2.69779592 L15.2791579,2.69779592 M53.1236354,25.190211 L40.3910038,3.13664617 M40.3910038,48.1214763 L53.1236354,26.0679115" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="25.6290612" rx="1.27326316" ry="1.34889796"></ellipse>                        </g>                        <g transform="translate(38.304000, 91.392000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(38.304000, 45.696000)">                            <path d="M15.2791579,48.5603265 L40.7444211,48.5603265 M2.8999436,26.0679115 L15.6325752,48.1214763 M15.6325752,3.13664617 L2.8999436,25.190211 M40.7444211,2.69779592 L15.2791579,2.69779592 M53.1236354,25.190211 L40.3910038,3.13664617 M40.3910038,48.1214763 L53.1236354,26.0679115" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="25.6290612" rx="1.27326316" ry="1.34889796"></ellipse>                        </g>                        <g transform="translate(76.608000, 69.888000)">                            <path d="M15.2791579,45.7038367 L40.7444211,45.7038367 M2.8999436,23.8858707 L15.6325752,45.9394355 M15.6325752,2.30350331 L2.8999436,24.3570681 M40.7444211,2.53910204 L15.2791579,2.53910204 M53.1236354,24.3570681 L40.3910038,2.30350331 M40.3910038,45.9394355 L53.1236354,23.8858707" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="24.1214694" rx="1.27326316" ry="1.26955102"></ellipse>                        </g>                        <g transform="translate(76.608000, 21.504000)">                            <path d="M15.2791579,51.4168163 L40.7444211,51.4168163 M2.8999436,28.2499523 L15.6325752,50.3035171 M15.6325752,3.96978902 L2.8999436,26.0233538 M40.7444211,2.8564898 L15.2791579,2.8564898 M53.1236354,26.0233538 L40.3910038,3.96978902 M40.3910038,50.3035171 L53.1236354,28.2499523" stroke-linecap="round"></path>                            <ellipse id="Oval-2" fill="#D8D8D8" fill-rule="evenodd" cx="28.0117895" cy="27.1366531" rx="1.27326316" ry="1.4282449"></ellipse>                        </g>                    </g>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="79.3235821 63.72 93.258806 56.16 106.12209 63.72 106.12209 79.92 93.258806 86.4 79.3235821 77.76"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="66.4602985 85.32 80.3955224 77.76 93.258806 85.32 93.258806 101.52 80.3955224 108 66.4602985 99.36"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="92.1868657 42.12 106.12209 34.56 118.985373 42.12 118.985373 58.32 106.12209 64.8 92.1868657 56.16"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="64.3164179 41.58 78.2516418 33.48 92.1868657 41.58 92.1868657 56.6228571 78.8090507 63.72 64.3164179 56.6228571"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="78.2516418 18.36 92.1868657 9.72 106.12209 18.9 106.12209 34.56 92.1868657 42.12 78.2516418 33.48"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="50.381194 18.36 64.3164179 8.64 78.2516418 18.36 78.2516418 33.48 64.3164179 42.12 50.381194 33.48"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="52.5250746 63.72 64.3164179 57.24 79.3235821 64.26 79.3235821 77.76 66.4602985 85.32 52.5250746 77.76"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="37.5179104 42.12 50.9171642 33.48 64.3164179 42.12 64.3164179 56.6584615 53.1503731 63.72 37.5179104 56.16"></polygon>                    <polygon id="Path-2" stroke="#00C5FF" stroke-width="2.16" points="25.7265672 63.1384615 37.5179104 56.16 52.5250746 63.72 52.5250746 78.2584615 39.661791 86.4 25.7265672 78.2584615"></polygon>                    <path d="M74.5472612,71.28 L84.1947239,71.28 M70.4608342,63.3225261 L75.2845655,71.6774739 M75.2845655,55.7625261 L70.4608342,64.1174739 M84.1947239,56.16 L74.5472612,56.16 M88.2811509,64.1174739 L83.4574196,55.7625261 M83.4574196,71.6774739 L88.2811509,63.3225261" id="Path-3" stroke="#FF0000" stroke-width="2.16"></path>                    <path d="M61.6839776,63.72 L71.3314403,63.72 M57.5975506,55.7625261 L62.4212819,64.1174739 M62.4212819,48.2025261 L57.5975506,56.5574739 M71.3314403,48.6 L61.6839776,48.6 M75.4178673,56.5574739 L70.594136,48.2025261 M70.594136,64.1174739 L75.4178673,55.7625261" id="Path-3" stroke="#FF0000" stroke-width="2.16"></path>                    <path d="M74.5472612,56.16 L84.1947239,56.16 M70.4608342,48.2025261 L75.2845655,56.5574739 M75.2845655,40.6425261 L70.4608342,48.9974739 M84.1947239,41.04 L74.5472612,41.04 M88.2811509,48.9974739 L83.4574196,40.6425261 M83.4574196,56.5574739 L88.2811509,48.2025261" id="Path-3" stroke="#FF0000" stroke-width="2.16"></path>                    <path d="M61.6839776,48.6 L71.3314403,48.6 M57.5975506,40.6425261 L62.4212819,48.9974739 M62.4212819,33.0825261 L57.5975506,41.4374739 M71.3314403,33.48 L61.6839776,33.48 M75.4178673,41.4374739 L70.594136,33.0825261 M70.594136,48.9974739 L75.4178673,40.6425261" id="Path-3" stroke="#FF0000" stroke-width="2.16"></path>                </g>                <text id="中心地及其-服务区呈圆形" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="10.8" y="107.6" fill="#000000">中心地及其</tspan>                    <tspan x="-1.42108547e-14" y="137.6" fill="#000000">服务区呈</tspan>                    <tspan x="86.4" y="137.6" fill="#FF0000">圆形</tspan>                </text>                <text id="3个中心地及服务区-之间出现得不到-服务" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="263.1348" y="145.4" fill="#000000">3个中心地及服务区</tspan>                    <tspan x="279" y="175.4" fill="#000000">之间出现得不到</tspan>                    <tspan x="289.8" y="205.4" fill="#000000">服务的</tspan>                    <tspan x="354.6" y="205.4" fill="#FF0000">阴影区</tspan>                </text>                <text id="两个相邻的中心地-的服务区重叠，-充分竞" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="532.8" y="114.8" fill="#000000">两个相邻的中心地</tspan>                    <tspan x="543.6" y="144.8" fill="#000000">的</tspan>                    <tspan x="565.2" y="144.8" fill="#FF0000">服务区重叠</tspan>                    <tspan x="673.2" y="144.8" fill="#000000">，</tspan>                    <tspan x="532.8" y="174.8" fill="#000000">充分竞争然后彻底</tspan>                    <tspan x="554.4" y="204.8" fill="#000000">瓜分相交部分</tspan>                </text>                <text id="形成紧密的六边形服务区" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="761.4" y="158" fill="#000000">形成紧密的</tspan>                    <tspan x="869.4" y="158" fill="#FF0000">六边形服务区</tspan>                </text>                <path d="M150.3,62.1 L210.6,62.1" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M210.6,62.1 L199.8,59.1 L199.8,65.1 L210.6,62.1 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path d="M481.5,60.3 L541.8,60.3" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M541.8,60.3 L531,57.3 L531,63.3 L541.8,60.3 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path d="M715.5,60.3 L775.8,60.3" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M775.8,60.3 L765,57.3 L765,63.3 L775.8,60.3 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path d="M150.3,330.3 L210.6,330.3" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M210.6,330.3 L199.8,327.3 L199.8,333.3 L210.6,330.3 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path d="M481.5,328.5 L541.8,328.5" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M541.8,328.5 L531,325.5 L531,331.5 L541.8,328.5 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path d="M715.5,328.5 L775.8,328.5" id="Line" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <path id="Line-decoration-1" d="M775.8,328.5 L765,325.5 L765,331.5 L775.8,328.5 Z" stroke="#FF0000" stroke-width="3.6" fill="#FF0000" fill-rule="evenodd" stroke-linecap="square"></path>                <text id="次一级中心地在服务-最薄弱处产生，-即在" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="257.4" y="419" fill="#000000">次一级中心地在服务</tspan>                    <tspan x="279" y="449" fill="#FF0000">最薄弱处</tspan>                    <tspan x="365.4" y="449" fill="#000000">产生，</tspan>                    <tspan x="268.2" y="479" fill="#000000">即在</tspan>                    <tspan x="311.4" y="479" fill="#FF0000">六边形结点</tspan>                    <tspan x="419.4" y="479" fill="#000000">上</tspan>                </text>                <text id="中心地之间相互-协调，形成不同-等级的中" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="543.6" y="419" fill="#000000">中心地之间相互</tspan>                    <tspan x="543.6" y="449" fill="#000000">协调，形成不同</tspan>                    <tspan x="532.8" y="479" fill="#000000">等级的</tspan>                    <tspan x="597.6" y="479" fill="#FF0000">中心地体系</tspan>                </text>                <text id="发展成为城市体系" font-family="STSongti-SC-Regular, Songti SC" font-size="21.6" font-weight="normal">                    <tspan x="811.8" y="336.2" fill="#000000">发展成为</tspan>                    <tspan x="898.2" y="336.2" fill="#FF0000">城市体系</tspan>                </text>            </g>        </g>    </g></svg></center><h2 id="城市体系"><a href="#城市体系" class="headerlink" title="城市体系"></a>城市体系</h2><div class="note default">            <p>基本概念：城市体系是指在一定相应完整的区域或国家中，以<strong>中心城市</strong>为<strong>核心</strong>，由一系列<strong>不同规模</strong>、<strong>不同职能</strong>的城市密切联系，互相依存所形成的<strong>城市集合</strong>。</p>          </div><ol><li>世界范围内城市等级的划分<ol><li>世界城市：在世界经济中居于<strong>举足轻重</strong>的地位，是<strong>“全球性金融结合点”</strong>。<ul><li>纽约、东京、伦敦</li></ul></li><li>区域性国际中心城市：对国际区域空间有<strong>重要</strong>影响，<strong>某些领域</strong>具有全球意义。<ul><li>巴黎、布鲁塞尔、香港、苏黎世、法兰克福、多伦多、新加坡等</li></ul></li></ol></li><li>我国城市的六级体系<br><div class="note success">等级越低，数量越多，规模越小。</div><ol><li>全国性中心城市：<strong>北京、上海</strong></li><li>跨省区区域中心城市：<strong>广州、深圳、武汉、重庆、天津、沈阳、大连、西安、兰州，等</strong></li><li>省会城市和省区主要城市：呼和浩特<strong>和</strong>包头、济南<strong>和</strong>青岛、长春<strong>和</strong>吉林\</li><li>省内区域中心城市：<strong>温州、宁波、苏州、无锡，等</strong></li><li>县级中心城市：<strong>浙江嘉善、江苏昆山</strong></li><li>县级以下中心镇：<strong>浙江西塘、江苏周庄、上海朱家角</strong><div class="note info no-icon">            <p>按非农业生产人口数量划分</p><ul><li>超大城市：1kw以上</li><li>特大城市：500w ~ 1kw</li><li>大城市：100w ~ 500w</li><li>中等城市：50w ~ 100w</li><li>小城市：&lt; 50w</li></ul>          </div></li></ol></li><li>按城市职能划分综合性城市和专业性城市<ol><li>综合性城市：一般而言，综合性城市多为大城市<ul><li>北京、上海、…</li></ul></li><li>专业性城市：一般而言，专业性城市多为中小城市。专业性城市智能单一，如行政城市、交通城市、工矿城市、贸易城市、旅游城市等。<ul><li>辽宁鞍山市、内蒙古满洲里市、海南三亚、…</li></ul></li></ol></li></ol><h2 id="城市体系规划的重要意义"><a href="#城市体系规划的重要意义" class="headerlink" title="城市体系规划的重要意义"></a>城市体系规划的重要意义</h2><div class="note primary no-icon">            <p>一个区域的城市体系由<strong>不同等级、不同职能</strong>的城市构成，城市间相互<strong>协调发展</strong>，逐步形成区域的<strong>发展轴带</strong>。</p><p><strong>合理科学</strong>地规划城市体系，对于区域经济的发展具有<strong>重要意义</strong>。</p>          </div><ol><li>有利于中心城市引领整个区域协调发展</li><li>有利于不同城市优势互补、分工协作</li><li>有利于明确发展方向形成城市特色</li></ol><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">城市体系 \begin{cases}        中心地理论 \begin{cases}            主要观点 \\ 应用范围        \end{cases} \\         城市体系 \begin{cases}            世界范围内城市体系的划分 \\ 我国城市的六级体系 \\ 按城市职能划分综合性城市和专业性城市        \end{cases} \\         城市体系规划的意义 - 三个有利\end{cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-24-地理课&quot;&gt;&lt;a href=&quot;#3-24-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/24 地理课&quot;&gt;&lt;/a&gt;3/24 地理课&lt;/h1&gt;&lt;h2 id=&quot;中心地理论&quot;&gt;&lt;a href=&quot;#中心地理论&quot; class=&quot;headerlink&quot; title=&quot;中心地理论&quot;&gt;&lt;/a&gt;中心地理论&lt;/h2&gt;&lt;blockquote class=&quot;blockquote-center&quot;&gt;
            &lt;i class=&quot;fa fa-quote-left&quot;&gt;&lt;/i&gt;
            &lt;p&gt;为研究和探索城市空间结构分布规律，德国地理学家克里斯·泰勒与1933年提出了”&lt;strong&gt;中心地理论&lt;/strong&gt;“&lt;/p&gt;

            &lt;i class=&quot;fa fa-quote-right&quot;&gt;&lt;/i&gt;
          &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;中心地理论&lt;/strong&gt;揭示了城市商业，行政等事物的&lt;strong&gt;空间结构特征&lt;/strong&gt;，被认为是20世纪人文地理对社会经济文化发展的&lt;strong&gt;最重要贡献之一&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在一定区域内，大小不同的中心地（城市或城市内的商业中心）基本都呈现一定的&lt;strong&gt;等级体系&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;中心地的服务区呈&lt;strong&gt;六边形&lt;/strong&gt;，中心地位于六边形的&lt;strong&gt;中心&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;中心地理论在&lt;strong&gt;国土整治&lt;/strong&gt;、&lt;strong&gt;区域开发&lt;/strong&gt;、&lt;strong&gt;商业规划&lt;/strong&gt;、&lt;strong&gt;城镇体系规划&lt;/strong&gt;等领域应用广泛。&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200324-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/24/200324-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-24T01:28:12.000Z</published>
    <updated>2020-09-22T12:59:25.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-24-物理课-机械波"><a href="#3-24-物理课-机械波" class="headerlink" title="3/24 物理课 - 机械波"></a>3/24 物理课 - 机械波</h1><ol><li>概念：<strong>机械振动</strong>在<strong>介质中</strong>由近及远的<strong>传播</strong>就是机械波。<ul><li>水波、声波就是机械波</li><li>无线电波不是机械波<a id="more"></a></li></ul></li><li>条件<ol><li>波源（产生机械振动的物体）</li><li>介质（传播机械振动的介质）<div class="note primary">有振动不一定有机械波；有机械波一定有振动。</div></li></ol></li><li>特征<ol><li>质点在平衡位置附近振动，并不随波迁移。</li><li>质点间存在相互作用，前质点（近波源点）带动后质点（远波源点），后跟前，波由近及远传播。</li><li>质点振动有先后，各质点振动周期与波源相同，且起振方向一致。<div class="note primary">机械波传播的是运动形式和能量</div></li></ol></li><li>波形图（横波）<ol><li>横波：质点振动方向与波的传播方向垂直</li><li>正弦 / 余弦 函数</li><li>凸起：波峰，凹下去：波谷。</li><li>质点振动方向的判断<ul><li>某一个质点的振动方向是向前质点的方向</li><li>某一个质点的振动方向还可以通过画出下一个时刻的波形图来判断（微分思想）</li><li>用同样地方法可以判断波的传播方向</li></ul></li><li>坐标轴<ul><li>x轴：格致店的平衡位置</li><li>y轴：某一时刻格致店偏离平衡位置的位移</li></ul></li></ol></li><li>纵波<ol><li>传播方向与振动方向同一条直线</li><li>密集处：密部；稀疏处：疏部。</li></ol></li><li>描述波的几个物理量<ol><li>波长($\lambda$)<ul><li>振动位移总是相同的点之间的距离叫做波长</li><li>由波源和介质决定</li><li>横波当中两个波峰之间的距离就是波长（波谷也是）</li></ul></li><li>波速($v$)<ul><li>波在介质中传播的速度</li><li>波速是由介质决定的</li></ul></li><li>周期($T$)<ul><li>一个波的周期取决于波源的振动周期</li><li>周期和介质无关</li></ul></li></ol></li><li>几个物理量之间的关系：<script type="math/tex; mode=display">     v = \frac \lambda T</script></li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-24-物理课-机械波&quot;&gt;&lt;a href=&quot;#3-24-物理课-机械波&quot; class=&quot;headerlink&quot; title=&quot;3/24 物理课 - 机械波&quot;&gt;&lt;/a&gt;3/24 物理课 - 机械波&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;概念：&lt;strong&gt;机械振动&lt;/strong&gt;在&lt;strong&gt;介质中&lt;/strong&gt;由近及远的&lt;strong&gt;传播&lt;/strong&gt;就是机械波。&lt;ul&gt;
&lt;li&gt;水波、声波就是机械波&lt;/li&gt;
&lt;li&gt;无线电波不是机械波</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200323-市历史课</title>
    <link href="http://gyrojeff.moe/2020/03/23/200323-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/23/200323-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/</id>
    <published>2020-03-23T05:49:59.000Z</published>
    <updated>2020-03-23T06:00:26.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第三课-中古时期的欧洲"><a href="#第三课-中古时期的欧洲" class="headerlink" title="第三课 中古时期的欧洲"></a>第三课 中古时期的欧洲</h1><a id="more"></a><img src="/2020/03/23/200323-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/1.png" class="">]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;第三课-中古时期的欧洲&quot;&gt;&lt;a href=&quot;#第三课-中古时期的欧洲&quot; class=&quot;headerlink&quot; title=&quot;第三课 中古时期的欧洲&quot;&gt;&lt;/a&gt;第三课 中古时期的欧洲&lt;/h1&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="History" scheme="http://gyrojeff.moe/tags/History/"/>
    
  </entry>
  
  <entry>
    <title>炮姐T - 08 阿伟死去活来</title>
    <link href="http://gyrojeff.moe/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/"/>
    <id>http://gyrojeff.moe/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/</id>
    <published>2020-03-22T12:05:08.000Z</published>
    <updated>2020-03-22T15:44:42.000Z</updated>
    
    <content type="html"><![CDATA[<p>食蜂真的好可爱哇</p><a id="more"></a><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/1.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/2.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/3.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/4.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/5.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/6.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/7.PNG" class=""><img src="/2020/03/22/%E7%82%AE%E5%A7%90T-08-%E9%98%BF%E4%BC%9F%E6%AD%BB%E5%8E%BB%E6%B4%BB%E6%9D%A5/8.PNG" class="">]]></content>
    
    
    <summary type="html">&lt;p&gt;食蜂真的好可爱哇&lt;/p&gt;</summary>
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="某科学的超电磁炮" scheme="http://gyrojeff.moe/tags/%E6%9F%90%E7%A7%91%E5%AD%A6%E7%9A%84%E8%B6%85%E7%94%B5%E7%A3%81%E7%82%AE/"/>
    
    <category term="食蜂" scheme="http://gyrojeff.moe/tags/%E9%A3%9F%E8%9C%82/"/>
    
    <category term="炮姐" scheme="http://gyrojeff.moe/tags/%E7%82%AE%E5%A7%90/"/>
    
  </entry>
  
  <entry>
    <title>TI-nspire 式量计算</title>
    <link href="http://gyrojeff.moe/2020/03/22/TI-nspire-%E5%BC%8F%E9%87%8F%E8%AE%A1%E7%AE%97/"/>
    <id>http://gyrojeff.moe/2020/03/22/TI-nspire-%E5%BC%8F%E9%87%8F%E8%AE%A1%E7%AE%97/</id>
    <published>2020-03-22T08:54:45.000Z</published>
    <updated>2020-09-15T02:37:47.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="开发思路"><a href="#开发思路" class="headerlink" title="开发思路"></a>开发思路</h1><ol><li>使用<code>on.charIn(c)</code>、<code>on.backspaceKey()</code>、<code>on.clearKey()</code>、<code>on.enterKey()</code>方法监听键盘，获取输入</li><li>页面完全使用gc绘制</li><li>计算<ul><li>拆分出大小写以及数字</li><li>括号处理（不涉及嵌套）</li></ul></li></ol><a id="more"></a><h1 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h1><figure class="highlight lua"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">local</span> w = platform.window:width()</span><br><span class="line"><span class="keyword">local</span> h = platform.window:height()</span><br><span class="line"><span class="keyword">local</span> BOX_HEIGHT = <span class="number">60</span></span><br><span class="line"><span class="keyword">local</span> BOX_WIDTH = <span class="number">250</span></span><br><span class="line"><span class="keyword">local</span> input_text = <span class="string">&quot;&quot;</span></span><br><span class="line"><span class="keyword">local</span> output_text = <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.paint</span><span class="params">(gc)</span></span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">local</span> titleText = <span class="string">&quot;ChemCalc By Haoyun Qin (c) 2020&quot;</span></span><br><span class="line">    <span class="keyword">local</span> tTw = gc:getStringWidth(titleText)</span><br><span class="line">    gc:setColorRGB(<span class="number">0</span>, <span class="number">30</span>, <span class="number">120</span>)</span><br><span class="line">    gc:drawString(titleText, (w - tTw) / <span class="number">2</span>, <span class="number">0</span>)</span><br><span class="line">    titleText = <span class="string">&quot;Type in the chemical formula&quot;</span></span><br><span class="line">    tTw = gc:getStringWidth(titleText)</span><br><span class="line">    gc:drawString(titleText, (w - tTw) / <span class="number">2</span>, <span class="number">20</span>)</span><br><span class="line">    titleText = <span class="string">&quot;Then press Enter&quot;</span></span><br><span class="line">    tTw = gc:getStringWidth(titleText)</span><br><span class="line">    gc:drawString(titleText, (w - tTw) / <span class="number">2</span>, <span class="number">40</span>)</span><br><span class="line">    </span><br><span class="line">    gc:setColorRGB(<span class="number">255</span>, <span class="number">30</span>, <span class="number">30</span>)</span><br><span class="line">    gc:setPen(<span class="string">&quot;medium&quot;</span>, <span class="string">&quot;smooth&quot;</span>)</span><br><span class="line">    gc:drawRect((w - BOX_WIDTH) / <span class="number">2</span>, (h - BOX_HEIGHT) / <span class="number">2</span>, BOX_WIDTH, BOX_HEIGHT)</span><br><span class="line">    </span><br><span class="line">    gc:setColorRGB(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>)</span><br><span class="line">    gc:setFont(<span class="string">&quot;serif&quot;</span>, <span class="string">&quot;b&quot;</span>, <span class="number">16</span>)</span><br><span class="line">    <span class="keyword">local</span> itw = gc:getStringWidth(input_text)</span><br><span class="line">    <span class="keyword">local</span> ith = gc:getStringHeight(input_text)</span><br><span class="line">    gc:drawString(input_text, (w - itw) / <span class="number">2</span>, (h - ith) / <span class="number">2</span>)</span><br><span class="line">    gc:setColorRGB(<span class="number">0</span>, <span class="number">100</span>, <span class="number">0</span>)</span><br><span class="line">    gc:setFont(<span class="string">&quot;serif&quot;</span>, <span class="string">&quot;r&quot;</span>, <span class="number">16</span>)</span><br><span class="line">    <span class="keyword">local</span> otw = gc:getStringWidth(output_text)</span><br><span class="line">    gc:drawString(output_text, (w - otw) / <span class="number">2</span>, <span class="number">150</span>)</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.charIn</span><span class="params">(char)</span></span></span><br><span class="line">    input_text = input_text..<span class="built_in">char</span></span><br><span class="line">    platform.window:invalidate()</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.backspaceKey</span><span class="params">()</span></span></span><br><span class="line">    input_text = input_text:usub(<span class="number">0</span>, <span class="number">-2</span>)</span><br><span class="line">    platform.window:invalidate()</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.clearKey</span><span class="params">()</span></span></span><br><span class="line">    input_text = <span class="string">&quot;&quot;</span></span><br><span class="line">    platform.window:invalidate()</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.enterKey</span><span class="params">()</span></span></span><br><span class="line">    <span class="keyword">if</span> (input_text == <span class="string">&quot;&quot;</span>) <span class="keyword">then</span></span><br><span class="line">        output_text = <span class="string">&quot;Error: Input cannot be empty&quot;</span></span><br><span class="line">        <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">local</span> c_arr = &#123;&#125;</span><br><span class="line">    <span class="keyword">local</span> c_arr_copy = &#123;&#125;</span><br><span class="line">    <span class="keyword">local</span> error_flag = <span class="literal">false</span></span><br><span class="line">    <span class="keyword">local</span> N = <span class="built_in">string</span>.<span class="built_in">len</span>(input_text)</span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        c_arr[i] = <span class="built_in">string</span>.<span class="built_in">byte</span>(input_text, i)</span><br><span class="line">        c_arr_copy[i] = <span class="built_in">string</span>.<span class="built_in">char</span>(c_arr[i])</span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">local</span> start_flag = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> ans_flag = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">string</span>.<span class="built_in">byte</span>(input_text, i) == <span class="built_in">string</span>.<span class="built_in">byte</span>(<span class="string">&#x27;(&#x27;</span>)) <span class="keyword">then</span></span><br><span class="line">            start_flag = i</span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">string</span>.<span class="built_in">byte</span>(input_text, i) == <span class="built_in">string</span>.<span class="built_in">byte</span>(<span class="string">&#x27;)&#x27;</span>)) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">local</span> tmp_mass = subMass(<span class="built_in">string</span>.<span class="built_in">sub</span>(input_text, start_flag + <span class="number">1</span>, i - <span class="number">1</span>))</span><br><span class="line">            <span class="keyword">if</span> (tmp_mass &lt; <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                <span class="built_in">print</span>(tmp_mass)</span><br><span class="line">                <span class="keyword">local</span> tmp_num = <span class="number">1</span></span><br><span class="line">                <span class="keyword">if</span> (i + <span class="number">1</span> &lt;= N) <span class="keyword">then</span></span><br><span class="line">                    <span class="keyword">if</span> (c_arr[i + <span class="number">1</span>] &gt;= <span class="number">48</span> <span class="keyword">and</span> c_arr[i + <span class="number">1</span>] &lt;= <span class="number">57</span>) <span class="keyword">then</span></span><br><span class="line">                        tmp_num = c_arr[i + <span class="number">1</span>] - <span class="number">48</span></span><br><span class="line">                        c_arr_copy[i + <span class="number">1</span>] = <span class="string">&quot;&quot;</span></span><br><span class="line">                        <span class="keyword">if</span> (i + <span class="number">2</span> &lt;= N) <span class="keyword">then</span></span><br><span class="line">                            <span class="keyword">if</span> (c_arr[i + <span class="number">2</span>] &gt;= <span class="number">48</span> <span class="keyword">and</span> c_arr[i + <span class="number">2</span>] &lt;= <span class="number">57</span>) <span class="keyword">then</span></span><br><span class="line">                                tmp_num = tmp_num * <span class="number">10</span> + c_arr[i + <span class="number">2</span>] - <span class="number">48</span></span><br><span class="line">                                c_arr_copy[i + <span class="number">2</span>] = <span class="string">&quot;&quot;</span></span><br><span class="line">                                <span class="keyword">if</span> (i + <span class="number">3</span> &lt;= N) <span class="keyword">then</span></span><br><span class="line">                                    <span class="keyword">if</span> (c_arr[i + <span class="number">3</span>] &gt;= <span class="number">48</span> <span class="keyword">and</span> c_arr[i + <span class="number">3</span>] &lt;= <span class="number">57</span>) <span class="keyword">then</span></span><br><span class="line">                                        tmp_num = tmp_num * <span class="number">10</span> + c_arr[i + <span class="number">3</span>] - <span class="number">48</span></span><br><span class="line">                                        c_arr_copy[i + <span class="number">3</span>] = <span class="string">&quot;&quot;</span></span><br><span class="line">                                    <span class="keyword">end</span></span><br><span class="line">                                <span class="keyword">end</span></span><br><span class="line">                            <span class="keyword">end</span></span><br><span class="line">                        <span class="keyword">end</span></span><br><span class="line">                    <span class="keyword">end</span></span><br><span class="line">                <span class="keyword">end</span></span><br><span class="line">                <span class="built_in">print</span>(tmp_num)</span><br><span class="line">                <span class="built_in">print</span>(tmp_mass)</span><br><span class="line">                tmp_mass = tmp_mass * tmp_num</span><br><span class="line">                <span class="keyword">if</span> (<span class="built_in">math</span>.<span class="built_in">floor</span>(tmp_mass) ~= tmp_mass) <span class="keyword">then</span></span><br><span class="line">                    ans_flag = ans_flag + tmp_mass - <span class="built_in">math</span>.<span class="built_in">floor</span>(tmp_mass)</span><br><span class="line">                    tmp_mass = <span class="built_in">math</span>.<span class="built_in">floor</span>(tmp_mass)</span><br><span class="line">                <span class="keyword">end</span></span><br><span class="line">                <span class="built_in">print</span>(tmp_mass)</span><br><span class="line">                <span class="keyword">for</span> k = start_flag, i <span class="keyword">do</span></span><br><span class="line">                    c_arr_copy[k] = <span class="string">&#x27;&#x27;</span></span><br><span class="line">                <span class="keyword">end</span></span><br><span class="line">                c_arr_copy[i] = <span class="string">&#x27;H&#x27;</span>..tmp_mass</span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">local</span> working_text = <span class="string">&#x27;&#x27;</span></span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        working_text = working_text..c_arr_copy[i]</span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="built_in">print</span>(working_text)</span><br><span class="line">    N = <span class="built_in">string</span>.<span class="built_in">len</span>(working_text)</span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        c_arr[i] = <span class="built_in">string</span>.<span class="built_in">byte</span>(working_text, i)</span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">local</span> ans = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> last_upper = <span class="number">-100000</span></span><br><span class="line">    <span class="keyword">local</span> last_lower = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> num = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> tmp_ans = <span class="number">0</span></span><br><span class="line">    <span class="comment">--- up: 1, down: 2, num: 3</span></span><br><span class="line">    <span class="keyword">local</span> last_kind = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        <span class="keyword">local</span> c = c_arr[i]</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">48</span> <span class="keyword">and</span> c &lt;= <span class="number">57</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            </span><br><span class="line">            num = num * <span class="number">10</span> + c - <span class="number">48</span></span><br><span class="line">            last_kind = <span class="number">3</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">65</span> <span class="keyword">and</span> c &lt;= <span class="number">90</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="comment">--- calculate ---</span></span><br><span class="line">            <span class="keyword">if</span> (last_upper &gt; <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                <span class="keyword">if</span> (last_lower == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                    <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper))</span><br><span class="line">                    <span class="keyword">else</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper)) * num</span><br><span class="line">                    <span class="keyword">end</span></span><br><span class="line">                <span class="keyword">else</span></span><br><span class="line">                    <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower))</span><br><span class="line">                    <span class="keyword">else</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower)) * num</span><br><span class="line">                    <span class="keyword">end</span></span><br><span class="line">                <span class="keyword">end</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            num = <span class="number">0</span></span><br><span class="line">            last_upper = c</span><br><span class="line">            last_lower = <span class="number">0</span></span><br><span class="line">            last_kind = <span class="number">1</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">97</span> <span class="keyword">and</span> c &lt;= <span class="number">122</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">2</span> <span class="keyword">or</span> last_kind == <span class="number">3</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            num = <span class="number">0</span></span><br><span class="line">            last_lower = c</span><br><span class="line">            last_kind = <span class="number">2</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (error_flag == <span class="literal">false</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">if</span> (last_lower == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper))</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper)) * num</span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower))</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower)) * num</span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    ans = ans + ans_flag</span><br><span class="line">    <span class="keyword">if</span> (error_flag == <span class="literal">false</span>) <span class="keyword">then</span></span><br><span class="line">        output_text = <span class="string">&quot;M(&quot;</span>..input_text..<span class="string">&quot;)=&quot;</span>..ans</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        output_text = <span class="string">&quot;Error: Wrong Format&quot;</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    platform.window:invalidate()</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">subMass</span><span class="params">(text)</span></span></span><br><span class="line">    <span class="keyword">local</span> c_arr = &#123;&#125;</span><br><span class="line">    <span class="keyword">local</span> N = <span class="built_in">string</span>.<span class="built_in">len</span>(text)</span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        c_arr[i] = <span class="built_in">string</span>.<span class="built_in">byte</span>(text, i)</span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">local</span> ans = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> last_upper = <span class="number">-100000</span></span><br><span class="line">    <span class="keyword">local</span> last_lower = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> num = <span class="number">0</span></span><br><span class="line">    <span class="keyword">local</span> error_flag = <span class="literal">false</span></span><br><span class="line">    <span class="comment">--- up: 1, down: 2, num: 3</span></span><br><span class="line">    <span class="keyword">local</span> last_kind = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i = <span class="number">1</span>, N <span class="keyword">do</span></span><br><span class="line">        <span class="keyword">local</span> c = c_arr[i]</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">48</span> <span class="keyword">and</span> c &lt;= <span class="number">57</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            num = num * <span class="number">10</span> + c - <span class="number">48</span></span><br><span class="line">            </span><br><span class="line">            last_kind = <span class="number">3</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">65</span> <span class="keyword">and</span> c &lt;= <span class="number">90</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="comment">--- calculate ---</span></span><br><span class="line">            <span class="keyword">if</span> (last_upper &gt; <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                <span class="keyword">if</span> (last_lower == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                    <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper))</span><br><span class="line">                    <span class="keyword">else</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper)) * num</span><br><span class="line">                    <span class="keyword">end</span></span><br><span class="line">                <span class="keyword">else</span></span><br><span class="line">                    <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower))</span><br><span class="line">                    <span class="keyword">else</span></span><br><span class="line">                        ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower)) * num</span><br><span class="line">                    <span class="keyword">end</span></span><br><span class="line">                <span class="keyword">end</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            num = <span class="number">0</span></span><br><span class="line">            last_upper = c</span><br><span class="line">            last_lower = <span class="number">0</span></span><br><span class="line">            last_kind = <span class="number">1</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">if</span> (c &gt;= <span class="number">97</span> <span class="keyword">and</span> c &lt;= <span class="number">122</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            <span class="keyword">if</span> (last_kind == <span class="number">2</span> <span class="keyword">or</span> last_kind == <span class="number">3</span>) <span class="keyword">then</span></span><br><span class="line">                error_flag = <span class="literal">true</span></span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">            num = <span class="number">0</span></span><br><span class="line">            last_lower = c</span><br><span class="line">            last_kind = <span class="number">2</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (error_flag == <span class="literal">false</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">if</span> (last_lower == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">            <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper))</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper)) * num</span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            <span class="keyword">if</span> (num == <span class="number">0</span>) <span class="keyword">then</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower))</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                ans = ans + getMass(<span class="built_in">string</span>.<span class="built_in">char</span>(last_upper, last_lower)) * num</span><br><span class="line">            <span class="keyword">end</span></span><br><span class="line">        <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (error_flag == <span class="literal">false</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> ans</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">-1000000</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    platform.window:invalidate()</span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getMass</span><span class="params">(c)</span></span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;H&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;H&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;He&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">4</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Li&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">7</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Be&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">9</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;B&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">11</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;C&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">12</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;N&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">14</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;O&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">16</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;F&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">19</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ne&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">20</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Na&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">23</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Mg&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">24</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Al&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">27</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Si&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">28</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;P&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">31</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;S&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">32</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Cl&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">35.5</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ar&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">40</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;K&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">39</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ca&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">40</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Sc&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">45</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ti&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">48</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;V&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">51</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Cr&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">52</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Mn&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">55</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Fe&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">56</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Co&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">59</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ni&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">59</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Cu&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">64</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Zn&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">65</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ga&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">70</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ge&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">73</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;As&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">75</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Se&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">79</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Br&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">80</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Kr&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">84</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Rb&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">85</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Sr&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">88</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Y&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">89</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Zr&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">91</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Nb&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">93</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Mo&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">96</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Tc&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">99</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ru&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">101</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Rh&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">103</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Pd&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">106</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ag&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">108</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Cd&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">112</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;In&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">115</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Sn&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">119</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Sb&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">122</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Te&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">128</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;I&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">127</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Xe&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">131</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Cs&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">133</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ba&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">137</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;W&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">184</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ir&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">192</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Pt&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">195</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Au&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">197</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Hg&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">201</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Tl&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">204</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Pb&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">207</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Bi&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">209</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Po&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">209</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;At&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">201</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line">    <span class="keyword">if</span> (c == <span class="string">&#x27;Ac&#x27;</span>) <span class="keyword">then</span></span><br><span class="line">        <span class="keyword">return</span> <span class="number">59</span></span><br><span class="line">    <span class="keyword">end</span></span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure><p>第一次写Lua而且急于求成，代码质量很差（flag满天飞），勿喷</p><h2 id="反思总结"><a href="#反思总结" class="headerlink" title="反思总结"></a>反思总结</h2><ol><li>计算部分太冗长了，其实可以调用内部<code>math.eval()</code>方法来进行计算，先分割出一个一个元素，然后将数字与元素之间用加号、乘号连接，元素替换为数字，然后执行该方法会非常简单</li><li>输入有点简陋（但是毕竟快），可以使用mathbox（教程中有提到）</li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;开发思路&quot;&gt;&lt;a href=&quot;#开发思路&quot; class=&quot;headerlink&quot; title=&quot;开发思路&quot;&gt;&lt;/a&gt;开发思路&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;使用&lt;code&gt;on.charIn(c)&lt;/code&gt;、&lt;code&gt;on.backspaceKey()&lt;/code&gt;、&lt;code&gt;on.clearKey()&lt;/code&gt;、&lt;code&gt;on.enterKey()&lt;/code&gt;方法监听键盘，获取输入&lt;/li&gt;
&lt;li&gt;页面完全使用gc绘制&lt;/li&gt;
&lt;li&gt;计算&lt;ul&gt;
&lt;li&gt;拆分出大小写以及数字&lt;/li&gt;
&lt;li&gt;括号处理（不涉及嵌套）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="TI-nspire" scheme="http://gyrojeff.moe/categories/TI-nspire/"/>
    
    
    <category term="TI-nspire" scheme="http://gyrojeff.moe/tags/TI-nspire/"/>
    
    <category term="CAS" scheme="http://gyrojeff.moe/tags/CAS/"/>
    
    <category term="Lua" scheme="http://gyrojeff.moe/tags/Lua/"/>
    
    <category term="TI-Lua" scheme="http://gyrojeff.moe/tags/TI-Lua/"/>
    
    <category term="计算器" scheme="http://gyrojeff.moe/tags/%E8%AE%A1%E7%AE%97%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>TI-nspire 计算器开发总结</title>
    <link href="http://gyrojeff.moe/2020/03/22/TI-nspire-%E8%AE%A1%E7%AE%97%E5%99%A8%E5%BC%80%E5%8F%91%E6%80%BB%E7%BB%93/"/>
    <id>http://gyrojeff.moe/2020/03/22/TI-nspire-%E8%AE%A1%E7%AE%97%E5%99%A8%E5%BC%80%E5%8F%91%E6%80%BB%E7%BB%93/</id>
    <published>2020-03-22T08:30:39.000Z</published>
    <updated>2020-09-14T23:57:49.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>由于要考AP，所以破费买了一个TI-nspire CX II CAS。和隔壁茶铺老板交流了之后就好像发现了新大陆一样。昨天终于有时间玩一下，然后就开始了瞎搞。</p><h2 id="开发环境"><a href="#开发环境" class="headerlink" title="开发环境"></a>开发环境</h2><p>由于TI的软件是Java写的，故需要JDK安装好。软件在官网上有，由于这个系统已经达到了5.*，所以要下载更高级的版本（学生软件）。（Connector是无效的）</p><p>使用数据线将计算器和电脑连接起来，就可以传文件。注：如果连接中断，需要重启软件。</p><a id="more"></a><h2 id="开发"><a href="#开发" class="headerlink" title="开发"></a>开发</h2><ol><li>在模拟器上新建一个模拟器的页面（最好是手持的）</li><li>Insert -&gt; Script -&gt; New Script</li><li>起个名字，随意</li></ol><h3 id="Hello-World"><a href="#Hello-World" class="headerlink" title="Hello World!"></a>Hello World!</h3><p>在这个新建出来的文件内键入：</p><figure class="highlight lua"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">on.paint</span><span class="params">(gc)</span></span></span><br><span class="line">    gc:drawString(<span class="number">0</span>, <span class="number">0</span>, <span class="string">&quot;Hello World!&quot;</span>)</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure><ul><li><code>gc</code>是graphic context</li><li><code>drawString</code>是一个method</li><li><code>0, 0, &quot;Hello World!&quot;</code>分别代表字符串在屏幕上<code>x,y</code>坐标和显示内容</li></ul><h3 id="具体教程与学习"><a href="#具体教程与学习" class="headerlink" title="具体教程与学习"></a>具体教程与学习</h3><p>Lua：<a href="https://www.runoob.com/lua/lua-tutorial.html">https://www.runoob.com/lua/lua-tutorial.html</a></p><p>TI-Lua：<a href="http://compasstech.com.au/TNS_Authoring/Scripting/index.html">http://compasstech.com.au/TNS_Authoring/Scripting/index.html</a></p><p>某个nb论坛：<a href="https://www.cncalc.org/">https://www.cncalc.org/</a></p><h3 id="开发总结与感想"><a href="#开发总结与感想" class="headerlink" title="开发总结与感想"></a>开发总结与感想</h3><ol><li><code>button</code>这个东西接触下来（貌似）没有，需要靠draw和handle <code>click</code>的位置来弄</li><li><code>slider</code>是通过<code>doc -&gt; Page Layout -&gt; Custom Layout / Select Layout</code>来控制布局，在新建的SubPage里选择Geometry，然后<code>Menu -&gt; Actions -&gt; Insert Slider</code>，会要求设置一系列东西，按要求搞就行，变量关联在教程当中有说。（貌似这种slider无法做到时时控制，因为是跨页面的。时时控制得自己用graphics来写）</li><li><code>math.eval()</code>好强大</li><li><code>Lua</code>有点烦</li></ol><h2 id="真机测试"><a href="#真机测试" class="headerlink" title="真机测试"></a>真机测试</h2><ol><li>文件导入（通过学生软件，直接拖文件进去）</li><li>Home -&gt; Browse -&gt; 存放的位置 -&gt; Open</li><li>Enjoy</li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;由于要考AP，所以破费买了一个TI-nspire CX II CAS。和隔壁茶铺老板交流了之后就好像发现了新大陆一样。昨天终于有时间玩一下，然后就开始了瞎搞。&lt;/p&gt;
&lt;h2 id=&quot;开发环境&quot;&gt;&lt;a href=&quot;#开发环境&quot; class=&quot;headerlink&quot; title=&quot;开发环境&quot;&gt;&lt;/a&gt;开发环境&lt;/h2&gt;&lt;p&gt;由于TI的软件是Java写的，故需要JDK安装好。软件在官网上有，由于这个系统已经达到了5.*，所以要下载更高级的版本（学生软件）。（Connector是无效的）&lt;/p&gt;
&lt;p&gt;使用数据线将计算器和电脑连接起来，就可以传文件。注：如果连接中断，需要重启软件。&lt;/p&gt;</summary>
    
    
    
    <category term="TI-nspire" scheme="http://gyrojeff.moe/categories/TI-nspire/"/>
    
    
    <category term="TI-nspire" scheme="http://gyrojeff.moe/tags/TI-nspire/"/>
    
    <category term="CAS" scheme="http://gyrojeff.moe/tags/CAS/"/>
    
    <category term="Lua" scheme="http://gyrojeff.moe/tags/Lua/"/>
    
    <category term="TI-Lua" scheme="http://gyrojeff.moe/tags/TI-Lua/"/>
    
    <category term="计算器" scheme="http://gyrojeff.moe/tags/%E8%AE%A1%E7%AE%97%E5%99%A8/"/>
    
  </entry>
  
  <entry>
    <title>残峨眉下的泪水</title>
    <link href="http://gyrojeff.moe/2020/03/20/%E6%AE%8B%E5%B3%A8%E7%9C%89%E4%B8%8B%E7%9A%84%E6%B3%AA%E6%B0%B4/"/>
    <id>http://gyrojeff.moe/2020/03/20/%E6%AE%8B%E5%B3%A8%E7%9C%89%E4%B8%8B%E7%9A%84%E6%B3%AA%E6%B0%B4/</id>
    <published>2020-03-20T15:47:50.000Z</published>
    <updated>2020-03-20T15:49:39.000Z</updated>
    
    <content type="html"><![CDATA[<p>看了一个京吹的番评，确实，</p><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>京阿尼给残酷的青春上了一层浪漫的滤镜。</p>            <i class="fa fa-quote-right"></i>          </blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;看了一个京吹的番评，确实，&lt;/p&gt;
&lt;blockquote class=&quot;blockquote-center&quot;&gt;
            &lt;i class=&quot;fa fa-quote-left&quot;&gt;&lt;/i&gt;
            &lt;p&gt;京阿尼给残酷的青春上了一层浪漫的滤镜。&lt;</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="京吹" scheme="http://gyrojeff.moe/tags/%E4%BA%AC%E5%90%B9/"/>
    
  </entry>
  
  <entry>
    <title>200320-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/20/200320-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/20/200320-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-20T07:27:53.000Z</published>
    <updated>2020-09-22T09:41:01.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-20-地理课"><a href="#3-20-地理课" class="headerlink" title="3/20 地理课"></a>3/20 地理课</h1><h2 id="城市功能分区"><a href="#城市功能分区" class="headerlink" title="城市功能分区"></a>城市功能分区</h2><ol><li>基本概念：城市内部有商业、工业、居住、行政、文化教育、金融等<strong>不同功能</strong>的地区，在布局上有自己独特的<strong>要求和特点</strong>。</li><li>城市的主要功能分区：<ul><li>商业区</li><li>工业区</li><li>居住区</li><li>文教区、风景区等</li></ul></li><li>不同时期，城市的功能分区会发生变化</li><li>城市工业区、居住区、商业区等<strong>不同功能区</strong>对土地利用、交通等的要求不同，<strong>合理分区</strong>有利于充分发挥城市功能，<strong>缓解城市问题</strong>，如交通拥挤、居住环境优化、发挥商业效益、提高文教辐射影响。</li></ol><a id="more"></a><div class="table-container"><table><thead><tr><th style="text-align:center">功能区</th><th style="text-align:center">组成</th><th style="text-align:center">布局要求 </th></tr></thead><tbody><tr><td style="text-align:center">商业区</td><td style="text-align:center">各种商业街和购物中心</td><td style="text-align:center">位于城市或区域中心，交通方便，人流量大，常在城市主要道路的两侧或交汇处</td></tr><tr><td style="text-align:center">工业区</td><td style="text-align:center">若干相关工业企业组合</td><td style="text-align:center">远离居住区，土地资源充足，交通便利，有良好协作条件的城市外围地区。若有污染工业，除了力求清洁生产外，在布局上要考虑配置在城市盛行风的下风向、水源下游等处</td></tr><tr><td style="text-align:center">居住区</td><td style="text-align:center">成片的住宅群以及商店、学校、医院、绿地等</td><td style="text-align:center">一般位于城市交通较为便利、居住环境良好、污染轻微的地区</td></tr><tr><td style="text-align:center">文教区</td><td style="text-align:center">集中高校、科研园所等文化机构和设施</td><td style="text-align:center">较好的交通、通讯条件，环境优美</td></tr><tr><td style="text-align:center">风景区</td><td style="text-align:center">具有观赏价值的自然和人文资源等</td><td style="text-align:center">城市郊区或临海、临山、临江等地区</td></tr></tbody></table></div><h2 id="城市空间结构的差异"><a href="#城市空间结构的差异" class="headerlink" title="城市空间结构的差异"></a>城市空间结构的差异</h2><ol><li>基本概念：城市空间结构手<strong>城市规模</strong>、<strong>城市职能</strong>和<strong>城市所处的地理环境</strong>的影响。不同类型的城市、不同地区的城市存在明显<strong>差异</strong>。</li></ol><ul><li>城市规模：城市规模越大….<ul><li>单中心同心圆圈层结构（小城市）</li><li>多中心结构（大城市）</li></ul></li><li>城市职能<ul><li>工业城市：鞍山、…</li><li>商业、金融城市：香港、…</li><li>风景旅游城市：三亚、黄山、…</li></ul></li><li>城市所处的自然环境<ul><li>沿江布局：<strong>沿江狭长布局</strong></li><li>山谷绵延：<strong>沿山谷绵延扩展</strong></li><li>港口中心：<strong>以港口为中心想腹地扩展</strong></li><li>均匀扩展：<strong>平原地区的城市以中心城区向四周均匀扩展</strong></li></ul></li></ul><p>上海的空间城市结构有哪些特征：</p><ul><li><strong>规模</strong>：特大型城市，规模大，多中心</li><li><strong>职能</strong>：综合了工业、商业、金融、旅游、交通等职能</li><li><strong>自然地环境</strong>：沿江沿海，以港口为中心向腹地扩展；平原地区，以城市为中心向四周扩展</li></ul><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">\begin{cases}    城市功能分区 \begin{cases}        商业区 \\ 居住区 \\ 工业区 \\ 其他功能区    \end{cases} \\    城市空间结构的差异 \begin{cases}        城市规模 \\ 城市职能 \begin{cases}            工业 \\ 商业金融 \\ 风景旅游 \\ 交通运输        \end{cases} \\ 城市所处的自然环境\begin{cases}            沿江布局 \\ 山谷绵延 \\ 港口中心 \\ 均匀扩展        \end{cases}    \end{cases}\end{cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-20-地理课&quot;&gt;&lt;a href=&quot;#3-20-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/20 地理课&quot;&gt;&lt;/a&gt;3/20 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市功能分区&quot;&gt;&lt;a href=&quot;#城市功能分区&quot; class=&quot;headerlink&quot; title=&quot;城市功能分区&quot;&gt;&lt;/a&gt;城市功能分区&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;基本概念：城市内部有商业、工业、居住、行政、文化教育、金融等&lt;strong&gt;不同功能&lt;/strong&gt;的地区，在布局上有自己独特的&lt;strong&gt;要求和特点&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;城市的主要功能分区：&lt;ul&gt;
&lt;li&gt;商业区&lt;/li&gt;
&lt;li&gt;工业区&lt;/li&gt;
&lt;li&gt;居住区&lt;/li&gt;
&lt;li&gt;文教区、风景区等&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;不同时期，城市的功能分区会发生变化&lt;/li&gt;
&lt;li&gt;城市工业区、居住区、商业区等&lt;strong&gt;不同功能区&lt;/strong&gt;对土地利用、交通等的要求不同，&lt;strong&gt;合理分区&lt;/strong&gt;有利于充分发挥城市功能，&lt;strong&gt;缓解城市问题&lt;/strong&gt;，如交通拥挤、居住环境优化、发挥商业效益、提高文教辐射影响。&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200319-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/19/200319-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/19/200319-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-19T01:35:25.000Z</published>
    <updated>2020-03-22T09:11:38.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-19-地理课"><a href="#3-19-地理课" class="headerlink" title="3/19 地理课"></a>3/19 地理课</h1><h2 id="城市的基本特征"><a href="#城市的基本特征" class="headerlink" title="城市的基本特征"></a>城市的基本特征</h2><ol><li><strong>基本概念</strong>：城市是具有一定人口规模，以<strong>非农业人口</strong>为主的居民聚居地，是人类活动的主要场所，也是区域将经济发展的核心</li><li>城市的特征：<ol><li>人口和经济活动高度集中</li><li>产业结构以第二、第三产业为主</li><li>科技、教育、文化事业发达</li></ol></li><li><strong>具有动态性强、节奏快、效率高的特点</strong></li></ol><h2 id="城市土地利用的空间结构"><a href="#城市土地利用的空间结构" class="headerlink" title="城市土地利用的空间结构"></a>城市土地利用的空间结构</h2><script type="math/tex; mode=display">商业用地为主 \rightarrow 居住用地为主 \rightarrow 工业用地为主 \rightarrow 农业用地为主</script><script type="math/tex; mode=display">市中区 \longrightarrow 郊区</script><p><strong><em>重要影响因素：地价</em></strong></p><a id="more"></a><img src="/2020/03/19/200319-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><ul><li>距离市中心的远近（一般情况下，距离市中心越远，地价越低）</li><li>交通的便捷程度（越便捷，越高）</li><li>配套基础设施</li><li>土地利用类型</li><li>…</li></ul><ol><li>商业用地</li><li>居住用地</li><li>工业用地</li><li>农业用地</li></ol><p><strong><em>决定土地属于哪种使用方式，取决于</em></strong><font color='red'> 生产效益的高低 </font><strong><em>和</em></strong><font color='red'> 地租支付能力 </font><strong><em>。</em></strong></p><img src="/2020/03/19/200319-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/2.jpg" class=""><img src="/2020/03/19/200319-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/3.jpg" class="">]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-19-地理课&quot;&gt;&lt;a href=&quot;#3-19-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/19 地理课&quot;&gt;&lt;/a&gt;3/19 地理课&lt;/h1&gt;&lt;h2 id=&quot;城市的基本特征&quot;&gt;&lt;a href=&quot;#城市的基本特征&quot; class=&quot;headerlink&quot; title=&quot;城市的基本特征&quot;&gt;&lt;/a&gt;城市的基本特征&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基本概念&lt;/strong&gt;：城市是具有一定人口规模，以&lt;strong&gt;非农业人口&lt;/strong&gt;为主的居民聚居地，是人类活动的主要场所，也是区域将经济发展的核心&lt;/li&gt;
&lt;li&gt;城市的特征：&lt;ol&gt;
&lt;li&gt;人口和经济活动高度集中&lt;/li&gt;
&lt;li&gt;产业结构以第二、第三产业为主&lt;/li&gt;
&lt;li&gt;科技、教育、文化事业发达&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;具有动态性强、节奏快、效率高的特点&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;城市土地利用的空间结构&quot;&gt;&lt;a href=&quot;#城市土地利用的空间结构&quot; class=&quot;headerlink&quot; title=&quot;城市土地利用的空间结构&quot;&gt;&lt;/a&gt;城市土地利用的空间结构&lt;/h2&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
商业用地为主 \rightarrow 居住用地为主 \rightarrow 工业用地为主 \rightarrow 农业用地为主&lt;/script&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
市中区 \longrightarrow 郊区&lt;/script&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;重要影响因素：地价&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200318-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/18/200318-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/18/200318-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-18T05:08:20.000Z</published>
    <updated>2020-09-22T09:40:59.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-18-物理课"><a href="#3-18-物理课" class="headerlink" title="3/18 物理课"></a>3/18 物理课</h1><script type="math/tex; mode=display">机械振动 \begin {cases}概念：物体在某一中心位置附近做往复运动，简称振动 \\条件：存在指向平衡位置（中心位置）的回复力 \begin{cases}    平衡位置F_回为零的位置 \\ 回复力有力提供是效果力\end{cases} \\运动情况：变加速运动 \begin{cases}    弹簧振子是一种理想化模型 \\ x,F_回,a,v做周期性变化\end{cases} \\ 描述\begin {cases}图像：振动位移- 时间图像，通常叫做振动图像，是正弦或余弦函数的图像 \\物理量 \begin{cases}    周期(T)：物体完成一次全振动所用的时间，单位：s \\    频率(f)：单位时间内完成全振动的次数，单位：\text {Hz} \\    振幅(A)：物体振动过程中，离开平衡位置的最大距离，单位：m\end{cases}\end {cases}\end{cases}</script><img src="/2020/03/18/200318-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/1.jpg" class="">]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;3-18-物理课&quot;&gt;&lt;a href=&quot;#3-18-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/18 物理课&quot;&gt;&lt;/a&gt;3/18 物理课&lt;/h1&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
机械振动 \begi</summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200317-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-17T05:32:06.000Z</published>
    <updated>2020-09-22T12:59:22.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-17-化学课"><a href="#3-17-化学课" class="headerlink" title="3/17 化学课"></a>3/17 化学课</h1><h2 id="配置一定物质的量浓度的溶液"><a href="#配置一定物质的量浓度的溶液" class="headerlink" title="配置一定物质的量浓度的溶液"></a>配置一定物质的量浓度的溶液</h2><script type="math/tex; mode=display">c = \frac n V</script><p>精确确实溶质的质量</p><ul><li>仪器：电子天平<br>精确确定溶液的体积</li><li>仪器：容量瓶（容量固定）</li><li>使用前需检漏</li><li>体积不具有可加性</li></ul><a id="more"></a><h2 id="具体配置过程"><a href="#具体配置过程" class="headerlink" title="具体配置过程"></a>具体配置过程</h2><ol><li>确定溶质的质量</li><li>称量</li><li>溶解<ul><li>用玻璃棒搅拌加速溶解</li></ul></li><li>冷却之后转移<ul><li>用玻璃棒引流</li></ul></li><li>洗涤<ul><li>避免溶质损失</li><li>洗涤液注入容量瓶</li></ul></li><li>定容<ul><li>加水到容量瓶刻度线2~3cm处</li><li>使用胶头滴管滴加，直至凹液面底部与刻度线相切</li></ul></li><li>摇匀<div class="note info">摇匀后液面变低是因为附着在了顶部，无需加水。</div></li></ol><div class="note danger">容量瓶不能储存液体。</div><h2 id="实验误差"><a href="#实验误差" class="headerlink" title="实验误差"></a>实验误差</h2><ol><li>未进行洗涤操作<br>$n \downarrow  \rightarrow c \downarrow$</li><li>转移前容量瓶中有多余的蒸馏水：$n无影响$</li><li>俯视刻度线：度数偏高，体积偏小，浓度偏高</li><li>仰视刻度线：度数偏低，体积偏大，浓度偏低</li></ol><img src="/2020/03/17/200317-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/1.jpg" class=""><h2 id="水的离子积"><a href="#水的离子积" class="headerlink" title="水的离子积"></a>水的离子积</h2><ol><li>水的微弱电离<script type="math/tex; mode=display">     \ce {H2O <=> H+ + OH-}</script></li><li>水的离子积<script type="math/tex; mode=display">     K_W = \ce {c(H+) \times c(OH^-)}</script></li><li>试验测定：$25 ^\circ \text C$时，1L纯水当中有$1 \times 10^{-7} \text {mol}$的水发生电离。</li><li>$25 ^ \circ \text C$时，水的$\text {pH}$为$7$</li><li>常温下，不仅是纯水，而且在酸性或碱性的<strong>稀</strong>溶液也成立</li><li>酸碱性<ul><li>在中性溶液中<script type="math/tex; mode=display">\ce {c(H+) = c(OH^-)}</script></li><li>在酸性溶液中<script type="math/tex; mode=display">\ce {c(H+) > c(OH^-)}</script></li><li>在碱性溶液当中<script type="math/tex; mode=display">\ce {c(H+) < c(OH^-)}</script>特别地，在常温下，中性溶液$\ce {pH = 7}$</li></ul></li><li>$\ce {pH}$值越小，酸性增强，越大，碱性增强</li><li>$\ce {pH}$纯粹是为了方便而引进的</li><li>在碱液当中，$\ce {H+}$是水当中电离出来的</li><li>符号：</li></ol><script type="math/tex; mode=display">\ce {c(H+) \times c(OH^-) = 1 \times 10^{-14}}</script><script type="math/tex; mode=display">\ce {[-\lg c(H+)] + [-\lg c(OH^-)]} = 14</script><script type="math/tex; mode=display">\ce {pH + pOH = 14}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-17-化学课&quot;&gt;&lt;a href=&quot;#3-17-化学课&quot; class=&quot;headerlink&quot; title=&quot;3/17 化学课&quot;&gt;&lt;/a&gt;3/17 化学课&lt;/h1&gt;&lt;h2 id=&quot;配置一定物质的量浓度的溶液&quot;&gt;&lt;a href=&quot;#配置一定物质的量浓度的溶液&quot; class=&quot;headerlink&quot; title=&quot;配置一定物质的量浓度的溶液&quot;&gt;&lt;/a&gt;配置一定物质的量浓度的溶液&lt;/h2&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
c = \frac n V&lt;/script&gt;&lt;p&gt;精确确实溶质的质量&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仪器：电子天平&lt;br&gt;精确确定溶液的体积&lt;/li&gt;
&lt;li&gt;仪器：容量瓶（容量固定）&lt;/li&gt;
&lt;li&gt;使用前需检漏&lt;/li&gt;
&lt;li&gt;体积不具有可加性&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200317-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-17T02:29:51.000Z</published>
    <updated>2020-03-17T05:31:37.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-17-地理课"><a href="#3-17-地理课" class="headerlink" title="3/17 地理课"></a>3/17 地理课</h1><h2 id="人口素质"><a href="#人口素质" class="headerlink" title="人口素质"></a>人口素质</h2><ol><li>定义：在一定社会条件下的人口总体在<strong>思想道德素质</strong>、<strong>科学文化素质</strong>和<strong>身体素质</strong>等方面的<strong>综合特征</strong>。</li></ol><ul><li>思想道德素质<ul><li>垃圾分类</li><li>乱闯红灯</li></ul></li><li>科学文化素质<ul><li>学识渊博</li><li>目不识丁</li></ul></li><li>身体素质 - 健康长寿<a id="more"></a></li></ul><ol><li>思想道德素质<ol><li>含义：国民的思想道德水平、意志品质等。</li><li>影响因素：意识形态、国家制度、民族传统、文化教育等。</li><li>中华民族素有勤劳、勇敢、善良、热爱和平的传统美德</li><li>积极培育和践行富强民主文明和谐；自由平等公正法治；爱国敬业诚信友善的社会主义核心价值观</li><li>思想道德素质是<strong>国民素质的灵魂</strong></li></ol></li><li>科学文化素质<ol><li>含义：人的劳动技能、科学文化水平等</li><li>影响因素：教育程度、技术训练等因素</li><li>衡量指标：文盲率，大中小学入学率，受教育年限，具有中、高级专业技术职称的指标</li></ol></li><li>身体素质<ol><li>含义：主要人口的健康状况</li><li>音响因素：居民生活水平、医疗卫生水平、社会保障水平等。</li><li>衡量指标：死亡率、平均期望寿命、营养水平、身高、体重等</li><li>平均期望寿命：指同时代出生的一代人语气可能活到的岁数。他与某一年世纪死亡者的平均寿命不同。</li></ol></li></ol><h2 id="发达国家人口素质普遍高于发展中国家的原因"><a href="#发达国家人口素质普遍高于发展中国家的原因" class="headerlink" title="发达国家人口素质普遍高于发展中国家的原因"></a>发达国家人口素质普遍高于发展中国家的原因</h2><ul><li>发达国家经济实力雄厚</li><li>对医疗卫生投入大，社会保障好</li><li>发展中国家没有足够额经济实力支撑完善的医疗系统和社会保障体系</li><li>发达国际生活水平高</li></ul><h2 id="发展中国家提高人口素质的措施"><a href="#发展中国家提高人口素质的措施" class="headerlink" title="发展中国家提高人口素质的措施"></a>发展中国家提高人口素质的措施</h2><ul><li>加快发展经济，从根本上改变国家的落后面貌</li><li>控制人口的过快增长，提高人均福利水平</li><li>注重卫生和医疗事业的发展</li><li>提高全民教育水平</li></ul><h2 id="我国人口素质的提高"><a href="#我国人口素质的提高" class="headerlink" title="我国人口素质的提高"></a>我国人口素质的提高</h2><ol><li>取得的成就<ul><li>教育经费年均增长13.4%，人口素质不断提高</li><li>目前，我国已经建成了当今世界规模最大的教育体系</li><li>卫生经费投入：2018年中国卫生总费用占GDP的6.4%</li><li>社会保障支出</li><li>体育强国</li></ul></li><li>我国人口素质目前存在的主要问题<ol><li>高素质专业劳动力和专业人才的比例不高，文化教育水平有待提高</li><li>人口素质的地域不平衡问题突出</li></ol></li></ol><h3 id="提高人口素质的主要举措"><a href="#提高人口素质的主要举措" class="headerlink" title="提高人口素质的主要举措"></a>提高人口素质的主要举措</h3><ol><li>积极发展教育、卫生、体育和社会福利事业</li><li>完善人口发展战略，实行优生优育，加强妇女保健的工作</li><li>减小城乡差距，大力推进农村和欠发达地区的社会经济发展</li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-17-地理课&quot;&gt;&lt;a href=&quot;#3-17-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/17 地理课&quot;&gt;&lt;/a&gt;3/17 地理课&lt;/h1&gt;&lt;h2 id=&quot;人口素质&quot;&gt;&lt;a href=&quot;#人口素质&quot; class=&quot;headerlink&quot; title=&quot;人口素质&quot;&gt;&lt;/a&gt;人口素质&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;定义：在一定社会条件下的人口总体在&lt;strong&gt;思想道德素质&lt;/strong&gt;、&lt;strong&gt;科学文化素质&lt;/strong&gt;和&lt;strong&gt;身体素质&lt;/strong&gt;等方面的&lt;strong&gt;综合特征&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;思想道德素质&lt;ul&gt;
&lt;li&gt;垃圾分类&lt;/li&gt;
&lt;li&gt;乱闯红灯&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;科学文化素质&lt;ul&gt;
&lt;li&gt;学识渊博&lt;/li&gt;
&lt;li&gt;目不识丁&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;身体素质 - 健康长寿</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200317-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/17/200317-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-17T01:34:58.000Z</published>
    <updated>2020-03-24T01:37:17.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-17-物理课"><a href="#3-17-物理课" class="headerlink" title="3/17 物理课"></a>3/17 物理课</h1><h2 id="机械振动"><a href="#机械振动" class="headerlink" title="机械振动"></a>机械振动</h2><ol><li>定义：物体在某一中心位置附近所做的往复运动，简称振动</li><li>理想模型：弹簧振子模型</li><li>条件：存在指向平衡位置的回复力<div class="note info">$F_回为效果力$</div><div class="note info">平衡位置$F_回 = 0$</div><div class="note primary">回复力可以由一个力、几个力的分力、合力提供</div></li><li>全振动：做振动的质点从某位置出发第一次回到该位置，并保持与出发时相同运动方向的过程。</li><li>运动性质：变加速运动</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;3-17-物理课&quot;&gt;&lt;a href=&quot;#3-17-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/17 物理课&quot;&gt;&lt;/a&gt;3/17 物理课&lt;/h1&gt;&lt;h2 id=&quot;机械振动&quot;&gt;&lt;a href=&quot;#机械振动&quot; class=&quot;headerlink&quot; </summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>压力好大.... orz</title>
    <link href="http://gyrojeff.moe/2020/03/16/%E5%8E%8B%E5%8A%9B%E5%A5%BD%E5%A4%A7-orz/"/>
    <id>http://gyrojeff.moe/2020/03/16/%E5%8E%8B%E5%8A%9B%E5%A5%BD%E5%A4%A7-orz/</id>
    <published>2020-03-16T13:56:26.000Z</published>
    <updated>2020-03-16T14:01:32.000Z</updated>
    
    <content type="html"><![CDATA[<p>前面刷pyq，看到学姐法的链接，才发现距离2020AP已经不到50天了。报名最积极，五月火葬场。这说的绝对是我。orz 花了一个礼拜速成stat，面前还有micro/macro两座大山。calc和cs不能掉以轻心，睡觉时间日日后拖，头顶的发量日益减少。</p><p>好累啊……</p><p>简直就是给ETS和CB轮番交钱找罪受。太难了。</p><p>总之，熬过这个魔鬼的三月和四月。加油，奥利给！</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;前面刷pyq，看到学姐法的链接，才发现距离2020AP已经不到50天了。报名最积极，五月火葬场。这说的绝对是我。orz 花了一个礼拜速成stat，面前还有micro/macro两座大山。calc和cs不能掉以轻心，睡觉时间日日后拖，头顶的发量日益减少。&lt;/p&gt;
&lt;p&gt;好累啊</summary>
      
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="牢骚" scheme="http://gyrojeff.moe/tags/%E7%89%A2%E9%AA%9A/"/>
    
  </entry>
  
  <entry>
    <title>AP Microeconomics - 究极拖延症患者尝试补救</title>
    <link href="http://gyrojeff.moe/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/"/>
    <id>http://gyrojeff.moe/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/</id>
    <published>2020-03-16T10:01:24.000Z</published>
    <updated>2021-01-14T06:19:23.000Z</updated>
    
    <content type="html"><![CDATA[<div class="note info no-icon">            <h1 id="Production-Possibility-Frontier-PPF-生产可能性边界"><a href="#Production-Possibility-Frontier-PPF-生产可能性边界" class="headerlink" title="Production Possibility Frontier (PPF) - 生产可能性边界"></a>Production Possibility Frontier (PPF) - 生产可能性边界</h1><ul><li><strong><em><font color='red'> PPF 向外凸起 </font></em></strong> </li><li><strong><em><font color='red'> 线上：Efficient，线外：Impossible，线内：Inefficient </font></em></strong> </li></ul><div class="note success">不存在Most Efficient</div><div class="note primary">向外凸起的原因：OC不断增加（Law of Increasing Opportunity Cost）</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/3.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/4.jpg" class=""></p>          </div><a id="more"></a><div class="note info no-icon">            <h1 id="Circular-Flow-Diagram-循环流向图"><a href="#Circular-Flow-Diagram-循环流向图" class="headerlink" title="Circular-Flow Diagram - 循环流向图"></a>Circular-Flow Diagram - 循环流向图</h1><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/5.jpg" class=""></p><div class="note success no-icon">            <h2 id="Leakages-漏出-流出"><a href="#Leakages-漏出-流出" class="headerlink" title="Leakages - 漏出/流出"></a>Leakages - 漏出/流出</h2><p>可以理解为在整个图当中，<strong><em><font color='red'> 钱 </font></em></strong> 少了</p><ul><li><strong><em><font color='red'> Savings - 储蓄（人们把一部分钱存起来，市场上钱少了） </font></em></strong></li><li><strong><em><font color='red'> Taxation - 税收（市场上的钱给了政府，钱少了） </font></em></strong></li><li><strong><em><font color='red'> Imports - 进口（花钱买别人的东西，钱少了） </font></em></strong></li></ul><h2 id="Leakages-漏出-流出-1"><a href="#Leakages-漏出-流出-1" class="headerlink" title="Leakages - 漏出/流出"></a>Leakages - 漏出/流出</h2><p>可以理解为在整个图当中，<strong><em><font color='red'> 钱 </font></em></strong>多了</p><ul><li><strong><em><font color='red'> Investment - 投资（投资者的钱进入市场，钱多了） </font></em></strong></li><li><strong><em><font color='red'> Government Spending - 市政开销（政府花钱，钱流入市场，钱多了） </font></em></strong></li><li><strong><em><font color='red'> Exports - 出口（东西卖给别人，钱多了） </font></em></strong></li></ul>          </div>          </div><div class="note info no-icon">            <h1 id="Absolute-Advantage-amp-Comparative-Advantage-绝对优势与比较优势"><a href="#Absolute-Advantage-amp-Comparative-Advantage-绝对优势与比较优势" class="headerlink" title="Absolute Advantage &amp; Comparative Advantage - 绝对优势与比较优势"></a>Absolute Advantage &amp; Comparative Advantage - 绝对优势与比较优势</h1><ul><li><strong><em><font color='red'> Absolute Advantage - 单位时间内能生产出更多的商品 </font></em></strong></li><li><strong><em><font color='red'> Comparative Advantage - 能以更小的机会成本来生产 </font></em></strong></li></ul><div class="note primary">机会成本：为了得到某东西而必须放弃的东西，在题目中如果只有两种商品可以用来被生产，那么单位时间内生产一单位某商品的OC就是单位时间内生产另外一种商品的能力除以此商品的产量。</div><div class="note warning">注意：单位是unit，而不是时间（可以通过倒数转换）</div><div class="note default">在题目中两个商品的情况，不可能生产两个商品都有比较优势</div>          </div><div class="note info no-icon">            <h1 id="Demand-amp-Supply-需求和供给"><a href="#Demand-amp-Supply-需求和供给" class="headerlink" title="Demand &amp; Supply - 需求和供给"></a>Demand &amp; Supply - 需求和供给</h1><h2 id="Demand和Quantity-of-Demand"><a href="#Demand和Quantity-of-Demand" class="headerlink" title="Demand和Quantity of Demand"></a>Demand和Quantity of Demand</h2><ul><li>Demand是指整个需求 ———— <strong><em><font color='red'> 整个曲线 </font></em></strong></li><li>Quantity of Demand是指需求量 ———— <strong><em><font color='red'> 曲线上的点 </font></em></strong></li></ul><h2 id="Supply和Quantity-of-Supply"><a href="#Supply和Quantity-of-Supply" class="headerlink" title="Supply和Quantity of Supply"></a>Supply和Quantity of Supply</h2><p>同上</p><h2 id="Law-of-Demand-需求定律"><a href="#Law-of-Demand-需求定律" class="headerlink" title="Law of Demand - 需求定律"></a>Law of Demand - 需求定律</h2><p>在其他条件不变的情况下，当某商品的价格上升时，该商品的需求量下降。</p><script type="math/tex; mode=display">P \uparrow ~~~~\longrightarrow ~~~~ Q_D \downarrow</script><div class="note warning">物以稀为贵</div><h2 id="Law-of-Supply-供给定律"><a href="#Law-of-Supply-供给定律" class="headerlink" title="Law of Supply - 供给定律"></a>Law of Supply - 供给定律</h2><p>在其他条件不变的情况下，某商平的供给量随着它的价格的上升而增加。</p><script type="math/tex; mode=display">P \uparrow ~~~~ \longrightarrow ~~~~ Q_S \uparrow</script>          </div><div class="note primary no-icon">            <h1 id="商品分类"><a href="#商品分类" class="headerlink" title="商品分类"></a>商品分类</h1><div class="note info no-icon">            <h2 id="Normal-Good-amp-Inferior-Good-正常商品-低档商品"><a href="#Normal-Good-amp-Inferior-Good-正常商品-低档商品" class="headerlink" title="Normal Good &amp; Inferior Good - 正常商品 / 低档商品"></a>Normal Good &amp; Inferior Good - 正常商品 / 低档商品</h2><ul><li>Normal Good ： 人们有钱以后想买的东西</li><li>Inferior Good ： 人们有钱以后不想买的东西</li></ul>          </div><div class="note info no-icon">            <h2 id="Substitutes-amp-Complements-替代品-互补品"><a href="#Substitutes-amp-Complements-替代品-互补品" class="headerlink" title="Substitutes &amp; Complements - 替代品 / 互补品"></a>Substitutes &amp; Complements - 替代品 / 互补品</h2><ul><li>Substitutes ： 一个东西卖得好，另外一个东西卖的差</li><li>Complements ： 一个东西卖得好，另外一个东西也随之卖得好</li></ul>          </div>          </div><div class="note info no-icon">            <h1 id="Control-on-Prices-价格管制"><a href="#Control-on-Prices-价格管制" class="headerlink" title="Control on Prices - 价格管制"></a>Control on Prices - 价格管制</h1><h2 id="Price-Ceiling-价格天花板"><a href="#Price-Ceiling-价格天花板" class="headerlink" title="Price Ceiling - 价格天花板"></a>Price Ceiling - 价格天花板</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/6.jpg" class=""></p><h2 id="Price-Floor-价格地板"><a href="#Price-Floor-价格地板" class="headerlink" title="Price Floor - 价格地板"></a>Price Floor - 价格地板</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/7.jpg" class=""></p><h2 id="Taxation-税收"><a href="#Taxation-税收" class="headerlink" title="Taxation - 税收"></a>Taxation - 税收</h2><div class="note success"><font color='red'> 结论1：税收由缺乏弹性的一方承担得较多<br> 结论2：可以通过税收wedge来计算 </font></div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/11.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/12.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/13.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/14.jpg" class=""></p>          </div><div class="note info no-icon">            <h1 id="Business-cycle-经济周期"><a href="#Business-cycle-经济周期" class="headerlink" title="Business cycle - 经济周期"></a>Business cycle - 经济周期</h1><p><strong><em>Definition</em></strong>: Fluctuations in economic activity, such as employ- ment and production.</p><div class="note primary">螺旋上升</div><div class="note primary">划分：2~10年的扩张和收缩</div><script type="math/tex; mode=display">\bbox[#EFF,15px,border:2px solid green]{\color{black}{\text {Prosperity - 繁荣} \rightarrow \color{red}{\text {Peak}}  \color{black}{\rightarrow \text {Recession - 衰退}} \rightarrow \text {Depression - 萧条} \rightarrow \color{red}{\text {Trough}} \color {black}{\rightarrow \text {Recovery - 复苏}}}}</script>          </div><div class="note success no-icon">            <h1 id="Elasticity-弹性"><a href="#Elasticity-弹性" class="headerlink" title="Elasticity - 弹性"></a>Elasticity - 弹性</h1><p><strong><em><font color='red'> 弹性描述的是一个量对于另一个量变化的反应程度 </font></em></strong></p><script type="math/tex; mode=display">\varepsilon_{yx} = \lim _{ \Delta x \rightarrow 0} \frac {\Delta y} y \Big / \frac {\Delta x} x = y' \cdot \frac x y</script><div class="note warning">记忆方法：一般来说，弹性都是xxx除以一个价格</div><div class="note success no-icon">            <h2 id="需求价格弹性"><a href="#需求价格弹性" class="headerlink" title="需求价格弹性"></a>需求价格弹性</h2><p><strong><em><font color='red'> 衡量某商品的需求量对其自身价格变动的反应程度 </font></em></strong></p><h3 id="影响因素"><a href="#影响因素" class="headerlink" title="影响因素"></a>影响因素</h3><ol><li><strong>相近商品的可得性 Availability of Cloase Substitues</strong>: 具有相近替代品的商品，一般需求弹性较大<div class="note info">通俗理解：如果有替代品，你涨价，我就去买别人，所以这个对价格的变化需求量就会变化很大，所以弹性较大</div></li><li><strong>必需品和奢侈品 Necessities versus Luxuries</strong>: 必需品(necessities)通常而言缺乏弹性，奢侈品(luxuries)通常富有弹性<div class="note info">理解方法：刚需的弹性为零。奢侈品在涨价后，既然是奢侈品，那么可买可不买，所以奢侈品对价格的变动其需求量变化较大，弹性较大</div></li><li><strong>市场的定义 Definition of the Market</strong>: 狭义市场比广义市场更有需求弹性<div class="note info">理解方法：举个例子，如果要买纸巾：单一品牌纸巾的市场，相比于所有纸巾所构成的市场，弹性较大，因为整个市场需求量差不多是固定的，而一个品牌如果涨价，消费者就回去寻找替代品，这个和第一条规则类似</div></li><li><strong>时间维度 Time Horizon</strong>: 某商品的长期需求通常比短期需求更加具有弹性<div class="note info">理解方法：我加钱可以一点一点的涨，到头来还是要买</div></li></ol><h3 id="计算方法"><a href="#计算方法" class="headerlink" title="计算方法"></a>计算方法</h3><script type="math/tex; mode=display">\varepsilon = \frac {\Delta Q_D \%}{\Delta P \%} = \frac {\Delta Q_D}{\Delta P} \frac P {Q_D}</script><div class="note warning">这个弹性通常取绝对值</div><div class="note warning">计算方法：中点法，即$P = \displaystyle\frac {P_1 + P_2} 2$</div><h3 id="衡量"><a href="#衡量" class="headerlink" title="衡量"></a>衡量</h3><ul><li>$\varepsilon &gt; 1$ : Elastic</li><li>$\varepsilon = 1$ : Unit Elasticity</li><li>$\varepsilon &lt; 1$ : Inelastic</li><li>$\varepsilon \rightarrow \infty$ : Perfectly Elastic</li><li>$\varepsilon = 0$ : Perfectly Inelastic</li></ul><div class="note warning">记忆方法：完全没有弹性，此时$\varepsilon = 0$，这个产品是刚需，就算多贵都得买</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/8.jpg" class=""></p><h3 id="线性需求曲线"><a href="#线性需求曲线" class="headerlink" title="线性需求曲线"></a>线性需求曲线</h3><div class="note warning">结论：线性需求曲线的中点弹性为1，越往上弹性越大，越往下弹性越小</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/9.jpg" class=""></p><svg width="615px" height="386px" viewBox="0 0 615 386" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">    <!-- Generator: Sketch 50 (54983) - http://www.bohemiancoding.com/sketch -->    <title>Linear Demand Curve</title>    <desc>Created with Sketch.</desc>    <defs></defs>    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">        <g id="Linear-Demand-Curve">            <rect id="Rectangle" stroke="#FFFFFF" stroke-width="1" fill="#FFFFFF" fill-rule="evenodd" x="0.5" y="0.5" width="614" height="385"></rect>            <g transform="translate(146.000000, 12.000000)">                <text font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#000000">                    <tspan x="66.354" y="358">Linear Demand Curve - 线性需求函数</tspan>                </text>                <g id="Path">                    <polyline stroke="#000000" stroke-width="1" points="12 23.5 12 323.5 322 323.5"></polyline>                    <path d="M12,54 L299.5,323" id="Path-2" stroke="#2873C2" stroke-width="3"></path>                    <path d="M12,54 L286.5,54" id="Path-2" stroke="#D91414" stroke-width="3" stroke-dasharray="9"></path>                    <path d="M299.5,35.5 L299.5,323" id="Path-2" stroke="#000000" stroke-width="3" stroke-dasharray="9"></path>                    <circle id="Oval" stroke="#F30000" stroke-width="1" fill="#FC0000" fill-rule="evenodd" cx="161" cy="194" r="5"></circle>                    <text id="中点，弹性为1" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#2873C2">                        <tspan x="78.186" y="212">中点，弹性为1</tspan>                    </text>                    <text id="刚需，弹性为0" transform="translate(314.500000, 159.000000) rotate(90.000000) translate(-314.500000, -159.000000) " font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#000000">                        <tspan x="275.686" y="163.5">刚需，弹性为0</tspan>                    </text>                    <text id="弹性为∞" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#F70D0D">                        <tspan x="132" y="42">弹性为∞</tspan>                    </text>                    <text id="这一段越往上越大，→∞" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#FF0C0C">                        <tspan x="51" y="74">这一段越往上越大，→∞</tspan>                    </text>                    <text id="这一段越往下越小，→0" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#000000">                        <tspan x="137.186" y="309">这一段越往下越小，→0</tspan>                    </text>                    <text id="Quantity" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#000000">                        <tspan x="271.028" y="341">Quantity</tspan>                    </text>                    <text id="Price" font-family="STSongti-SC-Regular, Songti SC" font-size="12" font-weight="normal" fill="#000000">                        <tspan x="0.254" y="13">Price</tspan>                    </text>                </g>            </g>        </g>    </g></svg><h3 id="与Revenue之间的关系"><a href="#与Revenue之间的关系" class="headerlink" title="与Revenue之间的关系"></a>与Revenue之间的关系</h3><p>对于Inelastic的商品</p><script type="math/tex; mode=display">P \uparrow~~~~ \longrightarrow~~~~ \text {revenue} \uparrow</script><p>对于Elastic的商品</p><script type="math/tex; mode=display">P \uparrow ~~~~ \longrightarrow ~~~~ \text {revenue} \downarrow</script><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/10.jpg" class=""></p>          </div><div class="note warning no-icon">            <h2 id="需求收入弹性"><a href="#需求收入弹性" class="headerlink" title="需求收入弹性"></a>需求收入弹性</h2><script type="math/tex; mode=display">\varepsilon = \frac {\Delta {Q_D}\%} {\Delta \text {Income} \%}</script><div class="note warning no-icon">            <ul><li>正常商品(Normal Goods) : $\varepsilon &gt; 0$ （可理解为需求随工资的增高而增高）</li><li>低档商品(Inferior Goods) : $\varepsilon &lt; 0$ （可理解为需求随工资的增高而降低）</li></ul>          </div><h2 id="需求的交叉价格弹性"><a href="#需求的交叉价格弹性" class="headerlink" title="需求的交叉价格弹性"></a>需求的交叉价格弹性</h2><script type="math/tex; mode=display">\varepsilon = \frac {\Delta Q_{D1} \%}{\Delta P_2\%}</script><div class="note warning no-icon">            <ul><li>替代品(Subtitutes) : $\varepsilon &gt; 0$ （可理解为，一个东西需求增高，另一个东西价格也升高，意味着其需求降低，那么两者就位替代品）</li><li>互补品(Complements) : $\varepsilon &lt; 0$ （可理解为，一个东西需求增高，另一个东西价格降低，意味着其需求增高，那么两者就位互补品）</li></ul>          </div>          </div><div class="note warning no-icon">            <h2 id="供给弹性"><a href="#供给弹性" class="headerlink" title="供给弹性"></a>供给弹性</h2><p><strong><em><font color='red'> 衡量供给量对商品价格变动的反应程度 </font></em></strong> </p><h3 id="影响的Factors"><a href="#影响的Factors" class="headerlink" title="影响的Factors"></a>影响的Factors</h3><ol><li>卖方变动自己产量的灵活性<div class="note info">举个例子：买海滨别墅的inelastic，卖书的elastic</div></li><li>时间维度：长期弹性更大<div class="note warning">和需求价格弹性相同</div></li></ol><h3 id="计算"><a href="#计算" class="headerlink" title="计算"></a>计算</h3><script type="math/tex; mode=display">\varepsilon = \frac {\Delta Q_S \%}{\Delta P \%} = \frac {\Delta Q_S}{\Delta P} \frac P {Q_S}</script><div class="note warning">这个弹性通常取绝对值</div><div class="note warning">计算方法：中点法，即$P = \displaystyle\frac {P_1 + P_2} 2$</div><div class="note danger">骂人：Next的Note有bug，竟然相同的标题找不到索引，淦</div><h3 id="衡量标准"><a href="#衡量标准" class="headerlink" title="衡量标准"></a>衡量标准</h3><blockquote><p>过原点的直线才具有$\varepsilon = 0$（懒得证明了）</p></blockquote><div class="note info">注：这里判断弹性的情况和上面的方法相同：越陡峭越缺乏弹性，越躺倒越具有弹性</div>          </div>          </div><div class="note info no-icon">            <h1 id="Welfare-Economics-福利经济学"><a href="#Welfare-Economics-福利经济学" class="headerlink" title="Welfare Economics - 福利经济学"></a>Welfare Economics - 福利经济学</h1><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>消费者、生产者和市场的效率</p>            <i class="fa fa-quote-right"></i>          </blockquote><h2 id="重要概念"><a href="#重要概念" class="headerlink" title="重要概念"></a>重要概念</h2><ol><li><strong><em><font color='red'> Consumer Surplus = Value to buyers – Amount paid by buyers = 需求曲线之下，价格线之下的面积 </font></em></strong></li><li><strong><em><font color='red'> Producer Surplus = Amount received by sellers – Cost to sellers = 供给曲线之上，价格线之下的面积 </font></em></strong></li><li><strong><em><font color='red'> Total Surplus = CS + PS = Willingness To Pay - Cost，体现市场效率 </font></em></strong></li><li><strong><em><font color='red'> 边际买者：价格提高后，第一个离开市场的人 </font></em></strong></li><li><strong><em><font color='red'> 边际卖者：价格下降后，第一个离开市场的人 </font></em></strong></li></ol><div class="note warning">背诵：离开市场！！！</div><h2 id="图像"><a href="#图像" class="headerlink" title="图像"></a>图像</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/15.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/16.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/17.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/18.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/19.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/20.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/21.jpg" class=""></p><h2 id="征税的代价-产生Deadweight-Loss"><a href="#征税的代价-产生Deadweight-Loss" class="headerlink" title="征税的代价 - 产生Deadweight Loss"></a>征税的代价 - 产生Deadweight Loss</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/22.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/23.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/24.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/25.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/26.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/27.jpg" class=""></p>          </div><div class="note info no-icon">            <h1 id="International-Trade-国际贸易"><a href="#International-Trade-国际贸易" class="headerlink" title="International Trade - 国际贸易"></a>International Trade - 国际贸易</h1><h2 id="要点"><a href="#要点" class="headerlink" title="要点"></a>要点</h2><ol><li><strong><em><font color='red'> 开放国际贸易，就要接受国际的价格 </font></em></strong></li><li><strong><em><font color='red'> 如果World Price &gt; Domestic Price，出口 </font></em></strong></li><li><strong><em><font color='red'> 如果World Price &lt; Domestic Price，进口 </font></em></strong></li><li><strong><em><font color='red'> Tariff有无谓损失，Quota没有 </font></em></strong></li><li><strong><em><font color='red'> Tariff政府拿得到钱，有Tax Revenue，Quota没有 </font></em></strong></li></ol><h2 id="国际贸易的图像"><a href="#国际贸易的图像" class="headerlink" title="国际贸易的图像"></a>国际贸易的图像</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/28.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/29.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/30.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/31.jpg" class=""></p><h2 id="国际贸易的好处"><a href="#国际贸易的好处" class="headerlink" title="国际贸易的好处"></a>国际贸易的好处</h2><ol><li>商品多样性增加</li><li>规模经济降低成本（economies of scale）</li><li>竞争程度增加</li><li>科技流动性增加</li></ol>          </div><div class="note success no-icon">            <h1 id="企业行为"><a href="#企业行为" class="headerlink" title="企业行为"></a>企业行为</h1><div class="note info no-icon">            <h2 id="Diminishing-Marginal-Product-边际产量递减效应"><a href="#Diminishing-Marginal-Product-边际产量递减效应" class="headerlink" title="Diminishing Marginal Product - 边际产量递减效应"></a>Diminishing Marginal Product - 边际产量递减效应</h2><p>随着工人的数量增加，边际产量递减</p>          </div><div class="note info no-icon">            <h2 id="Profit-Maximizing-利润最大化"><a href="#Profit-Maximizing-利润最大化" class="headerlink" title="Profit Maximizing - 利润最大化"></a>Profit Maximizing - 利润最大化</h2><p>Profit Maximizing - 发生在 <strong><em><font color='red'> MC = MR </font></em></strong> 时</p><div class="note default">企业都是有minimize cost的incentive的（企业想让ATC变小不一定一定需要靠改变产量）</div>          </div><div class="note primary no-icon">            <h2 id="不同的Efficiency"><a href="#不同的Efficiency" class="headerlink" title="不同的Efficiency"></a>不同的Efficiency</h2><div class="note info no-icon">            <h3 id="Productive-Efficiency-生产最有效率"><a href="#Productive-Efficiency-生产最有效率" class="headerlink" title="Productive Efficiency - 生产最有效率"></a>Productive Efficiency - 生产最有效率</h3><p>生产最有效率是 <strong><em><font color='red'> ATC的最低点 </font></em></strong> </p><p>此时生产的费用是最低的，所以称Productive Efficiency</p>          </div><div class="note info no-icon">            <h3 id="Allocative-Efficiency-分配最有效率"><a href="#Allocative-Efficiency-分配最有效率" class="headerlink" title="Allocative Efficiency - 分配最有效率"></a>Allocative Efficiency - 分配最有效率</h3><p>分配最有效率是 <strong><em><font color='red'> P = MC = Demand </font></em></strong> </p><div class="note success">这里就是需求 = 供给（MC曲线等同于Supply曲线）</div>          </div>          </div><div class="note primary no-icon">            <h2 id="经济利润相关"><a href="#经济利润相关" class="headerlink" title="经济利润相关"></a>经济利润相关</h2><div class="note info no-icon">            <h3 id="Implicit-Cost-隐性成本"><a href="#Implicit-Cost-隐性成本" class="headerlink" title="Implicit Cost - 隐性成本"></a>Implicit Cost - 隐性成本</h3><p>会计利润等于 <strong><em><font color='red'> $\text {Accounting Profit} = \pi + \text {Implicit Cost}$ </font></em></strong> </p>          </div><div class="note info no-icon">            <h3 id="Economic-Profit-经济利润"><a href="#Economic-Profit-经济利润" class="headerlink" title="Economic Profit - 经济利润"></a>Economic Profit - 经济利润</h3><p>经济利润等于 <strong><em><font color='red'> $\pi = (P - ATC) \times Q$ </font></em></strong> </p>          </div><div class="note info no-icon">            <h3 id="Accounting-Profit-会计利润"><a href="#Accounting-Profit-会计利润" class="headerlink" title="Accounting Profit - 会计利润"></a>Accounting Profit - 会计利润</h3><div class="note success">只要有会计利润，就是赚钱的（因为经济利润还计算了机会成本OC）</div>          </div>          </div><div class="note info no-icon">            <h2 id="Economies-of-Scale-规模经济"><a href="#Economies-of-Scale-规模经济" class="headerlink" title="Economies of Scale - 规模经济"></a>Economies of Scale - 规模经济</h2><ul><li><strong><em><font color='red'> $\text {Q} \uparrow \rightarrow \text {ATC} \downarrow$ 称为 economies of scale - 规模经济 </font></em></strong><br><strong><em><font color='red'> 长期ATC下降 </font></em></strong></li><li><strong><em><font color='red'> $\text {Q} \uparrow \rightarrow \text {ATC} 不变$ 称为 constant return to scale - 规模报酬不变 </font></em></strong><br><strong><em><font color='red'> 长期ATC不变 </font></em></strong></li><li><strong><em><font color='red'> $\text {Q} \uparrow \rightarrow \text {ATC} \uparrow$ 称为 diseconomies of scale - 规模不经济 </font></em></strong><br><strong><em><font color='red'> 长期ATC上升 </font></em></strong></li></ul><div class="note success">这里，自变量是Q，因变量是ATC</div>          </div><div class="note info no-icon">            <h2 id="returns-to-scale-规模报酬"><a href="#returns-to-scale-规模报酬" class="headerlink" title="returns to scale - 规模报酬"></a>returns to scale - 规模报酬</h2><p>设生产函数为</p><script type="math/tex; mode=display">Y = A(1, \frac K L, \frac H L, \frac N L)</script><p>将所有生产要素的投入扩大$\alpha$倍，产出随之扩大$\delta$倍</p><script type="math/tex; mode=display">\delta Y = A(\alpha + \alpha \frac K L, \alpha \frac H L, \alpha \frac N L)</script><p><strong><em><font color='red'> $\delta &gt; \alpha$ 产出扩大的倍数更多，increasing return to scale </font></em></strong><br><strong><em><font color='red'> $\delta = \alpha$ 产出扩大的倍数和投入相等，constant return to scale </font></em></strong><br><strong><em><font color='red'> $\delta &lt; \alpha$ 产出扩大的倍数少，decreasing return to scale </font></em></strong></p>          </div><div class="note warning no-icon">            <h2 id="短期和长期"><a href="#短期和长期" class="headerlink" title="短期和长期"></a>短期和长期</h2><div class="note info no-icon">            <h3 id="短期成本和长期成本"><a href="#短期成本和长期成本" class="headerlink" title="短期成本和长期成本"></a>短期成本和长期成本</h3><p><strong><em><font color='red'> 长期会以最低成本进行生产 </font></em></strong> </p><div class="note success">$\Longrightarrow$所有短期ATC曲线都位于长期ATC曲线之上或上方</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/1.jpg" class=""></p>          </div><div class="note info no-icon">            <h3 id="长期经营的一个重要事实"><a href="#长期经营的一个重要事实" class="headerlink" title="长期经营的一个重要事实"></a>长期经营的一个重要事实</h3><p><strong><em><font color='red'> All factors of production are variable </font></em></strong></p><div class="note success">对于长期来说，所有的cost都是variable的，所有的生产要素也都是variable的。比方说：可以关停工厂。</div>          </div><div class="note info no-icon">            <h3 id="Shutdown-停止营业"><a href="#Shutdown-停止营业" class="headerlink" title="Shutdown - 停止营业"></a>Shutdown - 停止营业</h3><p>如果在<strong><em><font color='red'> 短期，$P &lt; AVC$ </font></em></strong>，就shutdown</p>          </div><div class="note info no-icon">            <h3 id="Exit-退出市场"><a href="#Exit-退出市场" class="headerlink" title="Exit - 退出市场"></a>Exit - 退出市场</h3><p>如果在<strong><em><font color='red'> 长期，$P &lt; ATC$ </font></em></strong>，就exit</p>          </div><div class="note info no-icon">            <h3 id="继续营业"><a href="#继续营业" class="headerlink" title="继续营业"></a>继续营业</h3><p><strong><em><font color='red'> 短期，$AVC &lt; P &lt; ATC$，虽然承受损失（sustain a loss），但是仍然继续营业。 </font></em></strong></p>          </div>          </div>          </div><div class="note info no-icon">            <h1 id="Perfectly-Competitive-Market-完全竞争市场"><a href="#Perfectly-Competitive-Market-完全竞争市场" class="headerlink" title="Perfectly Competitive Market - 完全竞争市场"></a>Perfectly Competitive Market - 完全竞争市场</h1><div class="note warning no-icon">            <h2 id="完全竞争市场的特征"><a href="#完全竞争市场的特征" class="headerlink" title="完全竞争市场的特征"></a>完全竞争市场的特征</h2><ol><li><strong><em><font color='red'> 无限多的买者和卖者 - Infinite buyers &amp; sells </font></em></strong></li><li><strong><em><font color='red'> 所有卖的商品都一样 - All the goods are identical </font></em></strong></li><li><strong><em><font color='red'> 可以自由进入或退出 - Firms can freely exit or enter the market </font></em></strong></li></ol>          </div><div class="note danger no-icon">            <h2 id="完全竞争市场的特点"><a href="#完全竞争市场的特点" class="headerlink" title="完全竞争市场的特点"></a>完全竞争市场的特点</h2><div class="note success">企业和消费者都是价格接受者</div><div class="note success">$AR = MR = P$</div><div class="note success">长期的经济利润为0（待下去是因为有会计利润）</div><div class="note success no-icon">            <p>长期的价格不会改变，过程：<br><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/2.png" class=""></p>          </div><div class="note success"><font color='red'> 重要：长期由于$\pi = 0$，$ATC$与$P$相切。 </font></div><div class="note success">在完全竞争市场，短期的supply curve是MC在AVC以上的部分（因为以下的话要shutdown）</div><div class="note success"><font color='red'> 重要：市场的供给曲线是一条horizontal line，而firm的供给曲线是MC </font></div><div class="note success"><font color='red'> 重要：Constant Cost Industry如果Demand增加，短期Profit增加。 </font></div><div class="note success"><font color='red'> 重要：Increasing Cost Industry如果Demand增加，并不会把价格拉回均衡点，而是直接增加，profit不增加，ATC上移 </font></div>          </div>          </div><div class="note info no-icon">            <h1 id="Monopoly-完全垄断市场"><a href="#Monopoly-完全垄断市场" class="headerlink" title="Monopoly - 完全垄断市场"></a>Monopoly - 完全垄断市场</h1><div class="note warning no-icon">            <h2 id="完全垄断市场特征"><a href="#完全垄断市场特征" class="headerlink" title="完全垄断市场特征"></a>完全垄断市场特征</h2><p><strong><em><font color='red'> A firm that is the sole seller of a product without close substitutes </font></em></strong></p><ol><li><strong><em><font color='red'> 唯一的卖者 - Sole seller of a product </font></em></strong></li><li><strong><em><font color='red'> 没有替代品 - Without Close Substitute </font></em></strong></li></ol>          </div><div class="note danger no-icon">            <h2 id="完全垄断市场的特点（在没有价格歧视的情况下）"><a href="#完全垄断市场的特点（在没有价格歧视的情况下）" class="headerlink" title="完全垄断市场的特点（在没有价格歧视的情况下）"></a>完全垄断市场的特点（在没有价格歧视的情况下）</h2><div class="note success">完全垄断企业是价格的制定者（Price maker）</div><div class="note success">$MC=MR$永远是Profit Maximizing的方法（根据边际产量递减效应）</div><div class="note success">垄断的代价：产生Deadweight Loss</div><div class="note success">垄断基本上都是Underallocation（不是Allocative Efficient）</div><div class="note success">存在经济利润，$\pi = (P - ATC) \times Q$</div><div class="note success">在完全垄断市场当中，一个Firm就是整个市场</div><div class="note success">完全垄断市场当中：$P > MC = MR$</div><div class="note success">$MR$和$D$的曲线具有两倍斜率关系</div><div class="note success">根据线性需求弹性，中点处为Unit Elastic，上面是Elastic且$MR > 0$，下面是$Inelastic$且$MR < 0$。这很好理解（间前面Revenue和Elastic的关系）</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/32.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/33.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/34.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/35.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/36.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/37.jpg" class=""></p><div class="note primary">如果$\pi = 0$，则应该是$ATC$和$D$的交点</div>          </div><div class="note danger no-icon">            <h2 id="Price-Discrimination-价格歧视"><a href="#Price-Discrimination-价格歧视" class="headerlink" title="Price Discrimination - 价格歧视"></a>Price Discrimination - 价格歧视</h2><p>价格歧视就是对不同的人收取不同的费用，当Deadweight Loss完全消除，就是完全价格歧视（$P = WTP\text {(Willingness To Pay)} \Rightarrow \text {Perfect Price Discrimination}$)</p><div class="note danger">价格歧视会蚕食掉Consumer Surplus</div><div class="note danger">条件：1. 知道Demand<br>2. 别人不会转手卖掉（resale）</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/38.jpg" class=""></p>          </div><div class="note success no-icon">            <h2 id="垄断的公共政策"><a href="#垄断的公共政策" class="headerlink" title="垄断的公共政策"></a>垄断的公共政策</h2><ol><li>反托拉斯法案（Antitrust Law）：组织公司间的合并，允许政府拆分公司。增加市场的竞争性</li><li>对垄断行为管制</li><li>将私人垄断企业变成公共事业</li><li>什么也不做（药品专利）</li></ol>          </div><div class="note danger no-icon">            <h2 id="自然垄断"><a href="#自然垄断" class="headerlink" title="自然垄断"></a>自然垄断</h2><p><strong><em><font color='red'> 能够以最低的成本生产，长期ATC下降 </font></em></strong></p>          </div>          </div><div class="note info no-icon">            <h1 id="Monopolistic-Competition-垄断竞争"><a href="#Monopolistic-Competition-垄断竞争" class="headerlink" title="Monopolistic Competition - 垄断竞争"></a>Monopolistic Competition - 垄断竞争</h1><div class="note warning no-icon">            <h2 id="垄断竞争的特征"><a href="#垄断竞争的特征" class="headerlink" title="垄断竞争的特征"></a>垄断竞争的特征</h2><ol><li><strong><em><font color='red'> 很多的卖者：很多企业竞争相同的客户群体 - Many Sellers </font></em></strong></li><li><strong><em><font color='red'> 产品差异化：每个企业生产的和别人的都略有不同，需求曲线向下倾斜 - Product Differentiation </font></em></strong></li><li><strong><em><font color='red'> 自由进出市场 - Free entry and exit </font></em></strong></li></ol>          </div><div class="note warning no-icon">            <h2 id="垄断竞争的特点"><a href="#垄断竞争的特点" class="headerlink" title="垄断竞争的特点"></a>垄断竞争的特点</h2><div class="note success">长期经济利润为零（和完全竞争的调节相类似）</div><div class="note success">长期：$ATC = P > MC$</div><div class="note success">有过剩生产能力：Excess Capacity</div><div class="note primary">市场的变动：如果需求变大了，产生了经济利润，那么会有企业进入市场，和已有的几家企业抢生意，导致对于每家公司而言，曲线左移，最后还是会达到均衡。反之亦然。</div><div class="note warning">总结：在垄断竞争当中，总体来说是和完全垄断非常类似，因为每个公司都生产不同的商品，但是他们整体看做一个市场考虑，受到调节，所以长期的经济利润为零，ATC与Demand相切（价格）</div><div class="note danger">Advertise的原因：因为大家的产品比较相似，所以打广告就是为了让别人了解到你的产品，想让消费者选择这个产品，让价格弹性变小。yy：$\varepsilon = 0$时是刚需</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/39.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/40.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/41.jpg" class=""></p>          </div>          </div><div class="note info no-icon">            <h1 id="Oligopoly-寡头垄断"><a href="#Oligopoly-寡头垄断" class="headerlink" title="Oligopoly - 寡头垄断"></a>Oligopoly - 寡头垄断</h1><p><strong><em><font color='red'> 就是几家企业搞垄断 </font></em></strong></p><div class="note warning">有Game Theory（博弈论）、Price Leadership、Collusion、Price Wars</div><div class="note primary no-icon">            <h2 id="Kinked-Demand-Curve"><a href="#Kinked-Demand-Curve" class="headerlink" title="Kinked Demand Curve"></a>Kinked Demand Curve</h2><div class="note success">产生原因：一家人家降价，会导致一起降价。(两倍斜率在每一段仍然存在)</div><div class="note success">理解2：别人巴不得你提价流失消费者，降价也争相降价。所以上面more elastic，下面less elastic。</div><div class="note success">由于中间有断点，所以就算MC降低了，TR、P、Q不一定改变。</div><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/43.png" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/44.png" class=""></p>          </div><div class="note primary no-icon">            <h2 id="Nash-Equilibrium-纳什均衡"><a href="#Nash-Equilibrium-纳什均衡" class="headerlink" title="Nash Equilibrium - 纳什均衡"></a>Nash Equilibrium - 纳什均衡</h2><div class="note success">在没有条约的约束下，人们很可能会毁约，导致纳什均衡</div><div class="note success">相互作用的经济参与人在给定其他参与人选定的策略的情况下，每个参与人选择自己最优的策略</div><div class="note default">判断Nash Equilibrium：没有任何incentive to cheat.</div><div class="note danger">有时，并没有Dominant Strategy，但却有两个Nash Equilibrium（Nash Equilibria）</div><div class="note default no-icon">            <p>Prisoners’ Dilemma - 囚徒困境</p><p>占优策略：”以不变应万变”</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/45.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/46.jpg" class=""></p>          </div>          </div><div class="note primary no-icon">            <h2 id="Antitrust-Law-反托拉斯法案"><a href="#Antitrust-Law-反托拉斯法案" class="headerlink" title="Antitrust Law - 反托拉斯法案"></a>Antitrust Law - 反托拉斯法案</h2><p>主旨：增加市场的竞争性，拆分公司，阻止合并。</p>          </div><div class="note primary no-icon">            <h2 id="一道恶心题"><a href="#一道恶心题" class="headerlink" title="一道恶心题"></a>一道恶心题</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/47.jpg" class=""></p><ul><li>Efficiency : 既可以指Allocation，也可以指Productive</li><li>在这里两个公司合并，ATC必然下降（因为享受了economies of scales, AFC减少）</li></ul>          </div>          </div><div class="note info no-icon">            <h1 id="几种市场的总结"><a href="#几种市场的总结" class="headerlink" title="几种市场的总结"></a>几种市场的总结</h1><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/42.jpg" class=""></p>          </div><div class="note info no-icon">            <h1 id="生产要素市场-The-Markets-for-the-Factors-of-Production"><a href="#生产要素市场-The-Markets-for-the-Factors-of-Production" class="headerlink" title="生产要素市场 - The Markets for the Factors of Production"></a>生产要素市场 - The Markets for the Factors of Production</h1><div class="note success no-icon">            <h2 id="Input-Factors-of-Production-生产要素"><a href="#Input-Factors-of-Production-生产要素" class="headerlink" title="Input / Factors of Production - 生产要素"></a>Input / Factors of Production - 生产要素</h2><ul><li><strong><em><font color='red'> Labor - 劳动力 </font></em></strong> </li><li><strong><em><font color='red'> Human Capital - 人力资本 </font></em></strong> </li><li><strong><em><font color='red'> Natural Resources / Land - 自然资源 </font></em></strong> </li><li><strong><em><font color='red'> Capital (Physical Capital) - 实物资本 </font></em></strong> </li></ul><p>主要研究<strong>Labour</strong>（$L$），也会研究<strong>Capital</strong>（$K$）</p>          </div><div class="note success no-icon">            <h2 id="劳动的需求和供给的图像"><a href="#劳动的需求和供给的图像" class="headerlink" title="劳动的需求和供给的图像"></a>劳动的需求和供给的图像</h2><p>根据前面提到的循环流向图（Circular Flow Diagram），在生产要素市场当中企业是生产要素的购买者，家庭是生产要素的提供者。图像与之前商品市场中的图像基本相同（包括图像变动），不同之处在于纵轴从价格$P$变为了工资$\text{Wages}(W)$，横轴还是$\text{Quantity}(Q)$（只不过是Labour的数量）</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/48.jpg" class=""></p>          </div><div class="note success no-icon">            <h2 id="在生产要素市场中Profit-Maximizing"><a href="#在生产要素市场中Profit-Maximizing" class="headerlink" title="在生产要素市场中Profit Maximizing"></a>在生产要素市场中Profit Maximizing</h2><div class="note default">重要假设：商品市场和生产要素市场都是竞争性的，也就是说企业在这两个市场当中都是Price Taker</div><p>根据边际产量递减性质：$\text {Marginal Product of Labour} (MP_L)$是递减的，而每多雇佣一名工人能给企业带来的利润：$\text {Value of the Marginal Product of Labour}(VMPL)$，又称$\text {Marginal Revenue of Product (of Labour)} (MRP_L)$为：$P \times MP_L$。不难理解，只有当工人带来的收益大于成本才会雇佣，即$MRP_L &gt; \text {Wages}$。</p><div class="note primary">生产要素市场当中的Profit Maximizing就是$MRP_L = \text {Wages}$</div><p>例如下表：</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/49.jpg" class=""></p><div class="note danger">由上述论述可得：$\color{red}{}VMPL(MRP_L)就是\text{Demand}曲线$</div>          </div><div class="note info no-icon">            <h2 id="生产要素市场中的选择"><a href="#生产要素市场中的选择" class="headerlink" title="生产要素市场中的选择"></a>生产要素市场中的选择</h2><p>和商品市场当中的消费者选择理论相同，生产要素市场当中的选择理论如下：</p><script type="math/tex; mode=display">    \frac {MU_1}{P_1} = \frac {MU_2}{P_2}</script>          </div><div class="note success no-icon">            <h2 id="曲线的移动"><a href="#曲线的移动" class="headerlink" title="曲线的移动"></a>曲线的移动</h2><div class="note primary">总结：凭感觉，实在背不出来一条一条的</div><h3 id="劳动需求曲线的移动"><a href="#劳动需求曲线的移动" class="headerlink" title="劳动需求曲线的移动"></a>劳动需求曲线的移动</h3><ol><li>产出物的价格：$P \uparrow \longrightarrow VMPL \uparrow \longrightarrow D \uparrow$</li><li>技术变革<ul><li>劳动节约型</li><li>历史角度：劳动增加型</li></ul></li><li>其他生产要素的原因</li></ol><h3 id="劳动供给曲线的移动"><a href="#劳动供给曲线的移动" class="headerlink" title="劳动供给曲线的移动"></a>劳动供给曲线的移动</h3><ol><li>爱好改变 e.g. 女性参加工作</li><li>其他工作机会的改变</li><li>移民</li></ol><div class="note danger">注：civilian和army相对</div>          </div>          </div><div class="note info no-icon">            <h1 id="Externality-外部性"><a href="#Externality-外部性" class="headerlink" title="Externality - 外部性"></a>Externality - 外部性</h1><div class="note primary">人话：干一件事情对别人（外界）的影响</div><ul><li>Positive Externality: 做一件事对别人有好处</li><li>Negative Externality: 做一件事对别人有坏处</li></ul><div class="note warning no-icon">            <h2 id="Negative-Externality-负外部性"><a href="#Negative-Externality-负外部性" class="headerlink" title="Negative Externality - 负外部性"></a>Negative Externality - 负外部性</h2><h3 id="负外部性的曲线"><a href="#负外部性的曲线" class="headerlink" title="负外部性的曲线"></a>负外部性的曲线</h3><p>理解：因为做一件事对别人有不好的影响，所以供给曲线如果算上社会付出的成本的话，供给曲线需要上移，但是整个需求是没有变化的。</p><p>注：注意Social Optima和Market Equilibrium</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/50.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/53.jpg" class=""></p><h3 id="负外部性的最优实现"><a href="#负外部性的最优实现" class="headerlink" title="负外部性的最优实现"></a>负外部性的最优实现</h3><p><strong><em><font color='red'> 外部性内在化（Internalizing the Externality </font></em></strong>：对生产者进行收税，让生产者考虑自己的行为。</p>          </div><div class="note warning no-icon">            <h2 id="Positive-Externality-正外部性"><a href="#Positive-Externality-正外部性" class="headerlink" title="Positive Externality - 正外部性"></a>Positive Externality - 正外部性</h2><h3 id="正外部性的曲线"><a href="#正外部性的曲线" class="headerlink" title="正外部性的曲线"></a>正外部性的曲线</h3><p>理解：供给就这么多，没有变，但是因为这些产品有正外部性，对社会有好处，所以社会对这种商品的需求增加了（可以以教育为例）。</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/51.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/54.jpg" class=""></p><h3 id="正外部性的最优实现"><a href="#正外部性的最优实现" class="headerlink" title="正外部性的最优实现"></a>正外部性的最优实现</h3><p>政府补贴：Subsidy</p>          </div><div class="note primary no-icon">            <h2 id="针对外部性的政策"><a href="#针对外部性的政策" class="headerlink" title="针对外部性的政策"></a>针对外部性的政策</h2><ol><li>命令和控制政策（Command-and-Control Policies）：直接管制行为</li><li>基于市场的政策（Market-Based Policies）：激励私人解决（更有效率）<ul><li>Corrective Taxes（矫正税） / Pigovian Taxes（庇古税）</li></ul></li></ol><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/52.jpg" class=""></p>          </div><div class="note primary no-icon">            <h2 id="外部性的私人解决方法"><a href="#外部性的私人解决方法" class="headerlink" title="外部性的私人解决方法"></a>外部性的私人解决方法</h2><p><strong><em><font color='red'> 科斯定理（Coase Theorem） </font></em></strong>：（人话Ver.）如果协商解决不需要成本，那么私人总能解决问题。</p><div class="note danger">交易成本（Transaction Costs）：利益相关方在达成和遵守协议的过程中生产的成本。</div><div class="note danger">因为有交易成本，所以私人不一定能解决问题。</div>          </div>          </div><div class="note info no-icon">            <h1 id="物品的性质和种类"><a href="#物品的性质和种类" class="headerlink" title="物品的性质和种类"></a>物品的性质和种类</h1><h2 id="物品的性质"><a href="#物品的性质" class="headerlink" title="物品的性质"></a>物品的性质</h2><ul><li><strong><em><font color='red'> 排他性（Excludability） </font></em></strong>：是否能阻止别人用这个东西：你用了别人不能用</li><li><strong><em><font color='red'> 竞争性（Rivalry in consumption） </font></em></strong>：别人用了，就不值钱了</li></ul><h2 id="物品的种类"><a href="#物品的种类" class="headerlink" title="物品的种类"></a>物品的种类</h2><ul><li><strong><em><font color='red'> 私人物品（Private Goods） </font></em></strong>：有排他性、有竞争性<ul><li>e.g. 裙子 / 拥挤的收费公路</li></ul></li><li><strong><em><font color='red'> 自然垄断（Natural Monopoly） </font></em></strong>：有排他性、无竞争性<ul><li>e.g. 消防 / 不拥挤的收费道路</li></ul></li><li><strong><em><font color='red'> 公共资源（Common Resources） </font></em></strong>：无排他性、有竞争性<ul><li>e.g. 海鱼 / 拥挤的不收费道路</li><li>公地悲剧（由负外部性造成）：土地是大家的，都放羊，放多了，土地坏掉了，大家都没得放。</li></ul></li><li><strong><em><font color='red'> 公共物品（Public Goods) </font></em></strong>：无排他性、无竞争性<ul><li>e.g. 国防 / 不拥挤的不收费道路</li><li>Free Rider Problem，最后有讲。</li></ul></li></ul>          </div><div class="note info no-icon">            <h1 id="收入不平等"><a href="#收入不平等" class="headerlink" title="收入不平等"></a>收入不平等</h1><h2 id="世界的收入不平等"><a href="#世界的收入不平等" class="headerlink" title="世界的收入不平等"></a>世界的收入不平等</h2><ul><li><script type="math/tex; mode=display">衡量标准 = \frac {最富的10\%人口的收入}{最穷的10\%人口的收入}</script></li></ul><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/56.jpg" class=""></p><h2 id="穷困率-Poverty-Rate"><a href="#穷困率-Poverty-Rate" class="headerlink" title="穷困率 - Poverty Rate"></a>穷困率 - Poverty Rate</h2><ul><li>穷困率：家庭收入低于穷困线的人百分比</li><li>穷困线：政府制定的标准，低于这个水平就属于生活在贫困之中</li></ul><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/57.jpg" class=""></p><h2 id="洛伦兹曲线和基尼系数-Lorenz-Curve-amp-Gini-Coefficient"><a href="#洛伦兹曲线和基尼系数-Lorenz-Curve-amp-Gini-Coefficient" class="headerlink" title="洛伦兹曲线和基尼系数 Lorenz Curve &amp; Gini Coefficient"></a>洛伦兹曲线和基尼系数 Lorenz Curve &amp; Gini Coefficient</h2><p>在一个总体（国家、地区）内，以“最贫穷的人口计算起一直到最富有人口”的人口百分比的收入百分比的点组成的曲线。</p><ul><li><strong><em><font color='red'> 曲线越靠里，越极端，收入越不平等 </font></em></strong></li><li><strong><em><font color='red'> 曲线越接近 y = x（基准线），收入越平等 </font></em></strong></li></ul><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/55.jpg" class=""></p>          </div><div class="note warning no-icon">            <h1 id="零散知识点总结"><a href="#零散知识点总结" class="headerlink" title="零散知识点总结"></a>零散知识点总结</h1><div class="note success no-icon">            <h2 id="Free-Rider-Problem"><a href="#Free-Rider-Problem" class="headerlink" title="Free-Rider Problem"></a>Free-Rider Problem</h2><h3 id="烟花的例子"><a href="#烟花的例子" class="headerlink" title="烟花的例子"></a>烟花的例子</h3><p>烟花：有人放了就可以看，那么就可以不用买了</p><h3 id="具体问题"><a href="#具体问题" class="headerlink" title="具体问题"></a>具体问题</h3><script type="math/tex; mode=display">\text {Free-Rider} \longrightarrow \text{Demand} \downarrow \longrightarrow \text {underproduce}</script>          </div>          </div><div class="note success no-icon">            <p>胜利在望！！最后一章！</p><h1 id="消费者选择理论"><a href="#消费者选择理论" class="headerlink" title="消费者选择理论"></a>消费者选择理论</h1><h2 id="预算约束-Budget-Constraint"><a href="#预算约束-Budget-Constraint" class="headerlink" title="预算约束 - Budget Constraint"></a>预算约束 - Budget Constraint</h2><p><strong><em><font color='red'> 人话：因为只有这么点钱，所以会有限制和约束 </font></em></strong></p><h2 id="无差异曲线-Indifference-Curve"><a href="#无差异曲线-Indifference-Curve" class="headerlink" title="无差异曲线 - Indifference Curve"></a>无差异曲线 - Indifference Curve</h2><p>又称Utility Curve。四个性质：</p><p>• Property 1: Higher indifference curves are preferred to lower ones. People usually prefer to consume more goods rather than less. This preference for greater quantities is reflected in the indifference curves. As Figure 2 shows, higher indifference curves represent larger quantities of goods than lower indiffer- ence curves. Thus, the consumer prefers being on higher indifference curves.</p><p>• Property 2: Indifference curves are downward sloping. The slope of an indiffer- ence curve reflects the rate at which the consumer is willing to substitute one good for the other. In most cases, the consumer likes both goods. Therefore, if the quantity of one good is reduced, the quantity of the other good must increase for the consumer to be equally happy. For this reason, most indiffer- ence curves slope downward.</p><p>• Property 3: Indifference curves do not cross. To see why this is true, suppose that two indifference curves did cross, as in Figure 3. Then, because point A is on the same indifference curve as point B, the two points would make the consumer equally happy. In addition, because point B is on the same indif- ference curve as point C, these two points would make the consumer equallyhappy. But these conclusions imply that points A and C would also make the consumer equally happy, even though point C has more of both goods. This contradicts our assumption that the consumer always prefers more of both goods to less. Thus, indifference curves cannot cross.</p><p>• Property 4: Indifference curves are bowed inward. The slope of an indifference curve is the marginal rate of substitution—the rate at which the consumer is willing to trade off one good for the other. The marginal rate of substitu- tion (MRS) usually depends on the amount of each good the consumer is currently consuming. In particular, because people are more willing to trade away goods that they have in abundance and less willing to trade away goods of which they have little, the indifference curves are bowed inward. As an example, consider Figure 4. At point A, because the consumer has a lot of Pepsi and only a little pizza, he is very hungry but not very thirsty. To induce the consumer to give up 1 pizza, he has to be given 6 pints of Pepsi: The marginal rate of substitution is 6 pints per pizza. By contrast, at point B, the consumer has little Pepsi and a lot of pizza, so he is very thirsty but not very hungry. At this point, he would be willing to give up 1 pizza to get 1 pint of Pepsi: The marginal rate of substitution is 1 pint per pizza. Thus, the bowed shape of the indifference curve reflects the consumer’s greater willingness to give up a good that he already has in large quantity.</p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/58.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/59.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/60.jpg" class=""></p><p>注：不同的IC充满了整个平面</p><h2 id="极端的IC曲线"><a href="#极端的IC曲线" class="headerlink" title="极端的IC曲线"></a>极端的IC曲线</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/61.jpg" class=""></p><h2 id="消费者的选择"><a href="#消费者的选择" class="headerlink" title="消费者的选择"></a>消费者的选择</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/62.jpg" class=""></p><h2 id="收入的变动-与-Normal-Good-和-Inferior-Good"><a href="#收入的变动-与-Normal-Good-和-Inferior-Good" class="headerlink" title="收入的变动 与 Normal Good 和 Inferior Good"></a>收入的变动 与 Normal Good 和 Inferior Good</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/63.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/64.jpg" class=""></p><h2 id="价格的变动-与-Substitution-Effect-和-Income-Effect"><a href="#价格的变动-与-Substitution-Effect-和-Income-Effect" class="headerlink" title="价格的变动 与 Substitution Effect 和 Income Effect"></a>价格的变动 与 Substitution Effect 和 Income Effect</h2><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/65.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/66.jpg" class=""></p><p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/67.jpg" class=""></p><h2 id="吉芬商品-Giffen-Good"><a href="#吉芬商品-Giffen-Good" class="headerlink" title="吉芬商品 - Giffen Good"></a>吉芬商品 - Giffen Good</h2><p><strong><em><font color='red'> 价格增加，需求升高的商品 </font></em></strong></p><h2 id="Utility-效用"><a href="#Utility-效用" class="headerlink" title="Utility - 效用"></a>Utility - 效用</h2><ul><li>可以理解为benefit。</li><li>边际效用 - Marginal Utility</li><li>重点：<strong><em><font color='red'> Diminishing Marginal Utility：消费者拥有某商品越多，在额外增加一单位，带来的快乐低。 </font></em></strong></li></ul><h2 id="Optimal-Consumption-Bundle（重要）"><a href="#Optimal-Consumption-Bundle（重要）" class="headerlink" title="Optimal Consumption Bundle（重要）"></a>Optimal Consumption Bundle（重要）</h2><script type="math/tex; mode=display">\frac {MU_X}{P_X} = \frac {MU_Y}{P_Y}</script><p><strong><em><font color='red'> 其中，$P$为单价。 </font></em></strong></p>          </div><h1 id="AP-2020-特辑"><a href="#AP-2020-特辑" class="headerlink" title="AP 2020 特辑"></a>AP 2020 特辑</h1><h2 id="考试信息"><a href="#考试信息" class="headerlink" title="考试信息"></a>考试信息</h2><ol><li>考试时间：北京时间5月21日凌晨4点</li><li>两道FRQ<ul><li>Question 1 (55%): 25 minutes + 5 minutes to upload response</li><li>Question 2</li></ul></li><li>删减一个单元<br>Unit 6 Market Failure and the role of Government (8% - 13%)</li><li>Q1 = FRQ2 + FRQ3</li><li>Q2 = FRQ1</li></ol><h2 id="考点"><a href="#考点" class="headerlink" title="考点"></a>考点</h2><div class="table-container"><table><thead><tr><th style="text-align:center">Units</th><th style="text-align:center">Exam Weighting</th></tr></thead><tbody><tr><td style="text-align:center">Unit 1: Basic Economic Concepts</td><td style="text-align:center">12-15%</td></tr><tr><td style="text-align:center">Unit 2: Supply and Demand</td><td style="text-align:center">20-25%</td></tr><tr><td style="text-align:center">Unit 3: Production, Cost, and the Perfect Competition model</td><td style="text-align:center">22-25%</td></tr><tr><td style="text-align:center">Unit 4: Imperfect Competition</td><td style="text-align:center">15-22%</td></tr><tr><td style="text-align:center">Unit 5: Factor Markets</td><td style="text-align:center">10-13%</td></tr></tbody></table></div><h2 id="考察重点"><a href="#考察重点" class="headerlink" title="考察重点"></a>考察重点</h2><ul><li>Unit1需要明确 definition</li><li>Unit2几乎一定会融合在不同市场形式中考察(Unt3+4+5)<ul><li>从完全竞争(side- by-side graph)/完全垄断/垄断竞争市场的图像中考察需求、供给曲线,弹性等</li></ul></li><li>Unit3-4一定会出1道题<ul><li>市场之间的转化(垄断竞争完全竞争、寡头垄断-完全垄断)</li><li>每个市场的图像变化及结论</li></ul></li><li>Unit5有可能单独出题,其中一定会包含Unit2的知识点</li></ul><h2 id="Unit-1-FRQ-1"><a href="#Unit-1-FRQ-1" class="headerlink" title="Unit 1 - FRQ - 1"></a>Unit 1 - FRQ - 1</h2><p>Nirali is a student at the University of Ainsley. She has 5 hours to study for two exams today. The tables below show Nirali’s expected scores given the amount of time she studies for each exam.</p><div class="table-container"><table><thead><tr><th style="text-align:center">Number of hours Spent Studying Microeconomics</th><th style="text-align:center">Expected Score on Microeconomics exam (100-point scale)</th></tr></thead><tbody><tr><td style="text-align:center">5</td><td style="text-align:center">100</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">96</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">90</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">82</td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">60</td></tr><tr><td style="text-align:center">0</td><td style="text-align:center">0</td></tr></tbody></table></div><div class="table-container"><table><thead><tr><th style="text-align:center">Number of hours Spent Studying History</th><th style="text-align:center">Expected Score on History exam (100-point scale)</th></tr></thead><tbody><tr><td style="text-align:center">0</td><td style="text-align:center">0</td></tr><tr><td style="text-align:center">1</td><td style="text-align:center">40</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">60</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">72</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">77</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">80</td></tr></tbody></table></div><p><strong>(a)</strong> Nirali spends 3 hours studying microeconomics and 2 hours studying history. Calculate her gain from the second hour spent studying history.</p><p><strong>Solution</strong>: $40 \rightarrow 60$, $20$ points on History Exam.</p><p><strong>(b)</strong> Calculate Nirali’s opportunity cost of the second hour spent studying history.</p><p><strong>Solution</strong>: $6$ points on Microeconomics Exam.</p><p><strong>(c)</strong> Assume Nirali increases the time she allocates to studying history. What happens to the opportunity cost of studying history? Explain</p><p><strong>Solution</strong>: The opportunity cost of studying history will increase.<br><strong>Explanation</strong>: </p><ul><li>Method 1: Expected score on Microeconmics decreases at an increasing rate for each hour spent on histroy.</li><li>Method 2: Marginal cost is increasing.</li></ul><p><strong>(d)</strong> Assume that nirali has a goal of maximizing the sum of her test scores( the score on microeconomics plus the score on history). How many hours should she study for each exam?</p><p><strong>Solution</strong>: She should study Microeconomics for $2$ hours and study Histroy for $3$ hours, which will enable her to achieve a total score of $154$ points, the maximum total score she can get.</p><p><strong>(e)</strong> Nirali learns that her tennis practice has been canceled, freeing up an additional hour for studying. Given your answer to part(d), will Nirali allocate the additional hour to studying microeconomics or to studying history to maximize the sum of her test scores? Explain using marginal analysis</p><p><strong>Solution</strong>: She will allocate the additional hour to studying microeconomics.<br><strong>Explanation</strong>: Because the marginal benefit of learning an additional hour of microeconomics is $90 - 82 = 8$ points and the marginal benefit of learning an additional hour of history is $77 - 72 = 5$. $8 &gt; 5$.</p><h2 id="Unit-1-FRQ-2"><a href="#Unit-1-FRQ-2" class="headerlink" title="Unit 1 - FRQ - 2"></a>Unit 1 - FRQ - 2</h2><p>Sasha is a utility-maximizing consumer who spends all of her income on peanuts and bananas, both of which are normal goods</p><ul><li>(a) Assume that the last unit of peanuts consumed increased Sasha’s total utility from 40 utils to 48 utils and that the last unit of bananas consumed increased her total utility from 52 utils to 56 utils<ul><li>(i) If the price of a unit of peanuts is SI and Sasha is maximizing utility, calculate the price of a unit of bananas</li><li><strong>Solution</strong>: <script type="math/tex; mode=display">\frac {MU_1}{P_1} = \frac {MU_2}{P_2}</script>Thus the price of banana is $(56 - 52) \div (48 - 40) \times 1 = 0.5$ dollars</li><li>(ii) If the price of a unit of peanuts increases and the price of a unit of bananas remains unchanged from the price you determined in part(a)(i), how will Sasha’s purchase of peanuts change?</li><li><strong>Solution</strong>: She will purchase less peanuts.</li></ul></li><li>(b) Assume that the cross-price elasticity of demand between peanuts and bananas is positive. A widespread disease has destroyed the banana crop. What will happen to the equilibrium price and quantity of peanuts in the short run? Explain</li><li>(c) Assume that the price of bananas increases.<ul><li>(i) Will the substitution effect increase, decrease, or have no effect on the quantity of bananas demanded?</li><li>(ii) What happens to Sasha’s real income?</li></ul></li></ul><h2 id="Unit-2-FRQ-1"><a href="#Unit-2-FRQ-1" class="headerlink" title="Unit 2 - FRQ - 1"></a>Unit 2 - FRQ - 1</h2><p>The graph below shows the market for widgets. The government is considering intervening in this market.</p><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/68.jpg" class=""><ul><li>(a) Calculate the total producer surplus at the market equilibrium price and quantity. Show your work.</li><li><strong>Solution</strong>: $20 \times 20 \div 2 = 200$ dollars</li><li>(b) If the government imposes a price floor at $16, is there a shortage, a surplus, or neither? Explain</li><li><strong>Solution</strong>: Neither, because the price floor is below the equilibrium, thus it is not binding / not effective / ineffective.</li><li>(c) If instead the government imposes a price ceiling at $12, is there a shortage, a surplus, or neither? Explain</li><li><strong>Solution</strong>: There will be a shortage, because the price ceiling is below the equilibrium and $Q_D &gt; Q_S$ (Quantity Demanded is greater than Quantity Supplied). </li><li>(d) If instead the government restricts the market output to 10 units, calculate the deadweight loss. Show your work.</li><li><strong>Solution</strong>: $(40 - 10) \times (20 - 10) \div 2 = 150$ dollars.</li><li>(e) Assume the price decreases from 20 dollars to 12 dollars.<ul><li>(i) Calculate the price elasticity of demand. Show your work.</li><li><strong>Solution</strong>: <script type="math/tex; mode=display">    \text {Elasticity of demand} = \Big |\frac {\Delta Q_D\%}{\Delta P\%}\Big | = \Big |\frac {24 - 20} {\frac {24 + 20} 2} \Big / \frac {12 - 20} {\frac {12 + 20} 2}\Big | = 0.36</script></li><li>(ii) In this price range, is demand perfectly elastic, relatively elastic, unit elastic, relatively inelastic, or perfectly inelastic?</li><li><strong>Solution</strong>: Since $\varepsilon &lt; 1$, the demand is relatively inelastic in this price range.</li></ul></li></ul><h2 id="Unit-2-FRQ-2"><a href="#Unit-2-FRQ-2" class="headerlink" title="Unit 2 - FRQ - 2"></a>Unit 2 - FRQ - 2</h2><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/69.jpg" class=""><p>The graph above illustrates the market for calculators. S denotes the current supply curve, and D denotes the demand curve.</p><ul><li>(a) Calculate the producer surplus before the tax</li><li><strong>Solution</strong>: $(5 - 2) \times 90 \div 2 = 135$ dollars.</li><li>(b) Now assume a per-unit tax of $2 is imposed whose impact is shown in the graph above.<ul><li>(i) Calculate the amount of tax revenue.</li><li><strong>Solution</strong>: $2 \times 60 = 120$ dollars.</li><li>(ii) What is the after-tax price that the sellers now keep?</li><li><strong>Solution</strong>: $4$ dollars.</li><li>(iii) Calculate the producer surplus after the tax.</li><li><strong>Solution</strong>: $(4 - 2) \times 60 \div 2 = 60$ dollars.</li></ul></li><li>(c) Is the demand price elastic, inelastic, or unit elastic between the prices of 5 dollars and 6 dollars? Explain.</li><li><strong>Solution</strong>: <ul><li>Method 1:<script type="math/tex; mode=display">\varepsilon = \Big | \frac {90 - 60} {75} \Big / \frac {5 - 6} {5.5} \Big | = 2.2</script>Since $\varepsilon &gt; 1$, the demand price is elastic between the prices of 5 dollars and 6 dollars.</li><li>Method 2: When price change from $5$ dollars to $6$ dollars, the total revenue decreases, thus the price demand is elastic.</li></ul></li><li>(d) Assuming no externalities, how does the tax affect allocative efficiency? Explain</li><li><strong>Solution</strong>:<ul><li>Method 1: It produced deadweight loss.</li><li>Method 2: The Consumer Surplus and Producer Surplus decreased.</li></ul></li></ul><h2 id="Unit-3-FRQ-1"><a href="#Unit-3-FRQ-1" class="headerlink" title="Unit 3 - FRQ - 1"></a>Unit 3 - FRQ - 1</h2><p>Suppose that roses are produced in a perfectly competitive, increasing-cost industry in long-run equilibrium with identical firms.</p><ul><li>(a) Draw correctly labeled side-by-side graphs for the rose industry and a typical firm and show each of the following<ul><li>(i) Industry equilibrium price and quantity, labeled $P_m$ and $Q_m$, respectively</li><li>(ii) The firms equilibrium price and quantity, labeled $P_f$ and $Q_f$ respectively<img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/70.jpg" class=""></li></ul></li><li>(b) Is $P_m$ larger than, smaller than, or equal to $P_f$?</li><li><strong>Solution</strong>: $P_m = P_f$</li><li>(c) Assume that there is an increase in the demand for roses On your graphs in part(a), show each of the following.<ul><li>(i) The new short-run industry equilibrium price and quantity, labeled $P_{m2}$ and $Q_{m2}$, respectively</li><li>(ii) The new short-run profit-maximizing price and quantity for the typical firm, labeled $P_{f2}$ and $Q_{f2}$, respectively<img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/71.jpg" class=""></li></ul></li><li>(d) As the industry adjusts to a new long-run equilibrium,<ul><li>(i) what will happen to the number of firms in the industry? Explain</li><li><strong>Solution</strong>: The number of firms in the industry will increase. Since the profit $\pi = (P - ATC) \times Q &gt; 0$, the existence profit attracts to enter the industry and there is no barrier of entering the market, there will be more firms in the industry.</li><li>(ii) Will the firm’s average total cost curve shift upward, shift downward, or remain unchanged?</li><li><strong>Solution</strong>: It will shift upward for the reason that it is an <strong>Increasing-cost Industry</strong>.</li></ul></li><li>(e) In the long run, compare the firm’s profit-maximizing price to each of the following<ul><li>(i) $P_f$ in part(a)(ii)</li><li><strong>Solution</strong>: $P &gt; P_f$, Higher</li><li>(ii) $P_{f2}$ in part(c)(ii)</li><li><strong>Solution</strong>: $P &lt; P_{f2}$, Lower<img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/72.jpg" class=""></li></ul></li></ul><h2 id="Unit-4-FRQ-1"><a href="#Unit-4-FRQ-1" class="headerlink" title="Unit 4 - FRQ - 1"></a>Unit 4 - FRQ - 1</h2><p>In the early twentieth century, limited transportation options and the lack of effective substitutes gave Single Cinema monopoly power in a small town. Assume that Single Cinema is a profit-maximizing firm and currently operates at a negative economic profit in the short run</p><ul><li>(a) Draw a correctly labeled graph for Single Cinema, and show each of the following<ul><li>(i) The profit-maximizing price and quantity of tickets, labeled as $P_m$ and $Q_m$, respectively</li><li>(ii) The area representing the negative economic profit, shaded completely<img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/73.jpg" class=""></li></ul></li><li>(b) Explain why Single Cinema continues to operate in the short run despite earning negative economic profit in the short run</li><li><strong>Solution</strong>: $P &gt; AVC$</li><li>(c)Would Single Cinema’s total revenue increase, decrease, or stay the same if it decides to sell one fewer ticket than $Q_m$? Explain.</li><li><strong>Solution</strong>:<ul><li>Method 1: $MR &gt; 0$, $TR$ will decrease.</li><li>Method 2: The demand curve is always elastic when $MR &gt; 0$, thus total revenue will decrease when quantity decrease.</li></ul></li><li>(d) Single Cinema hires workers in a perfectly competitive labor market with a downward-sloping demand curve. Suppose the number of workers available in the market decreases<ul><li>(i) What will happen to the wage rate? Explain</li><li>(ii) What will happen to the marginal revenue product of the last worker hired? Explain</li></ul></li></ul><h2 id="Unit-4-FRQ-2"><a href="#Unit-4-FRQ-2" class="headerlink" title="Unit 4 - FRQ - 2"></a>Unit 4 - FRQ - 2</h2><p>Mary Company, operating in a monopolistically competitive industry, produces a cleaning product called BriteKlean. The company currently produces the profit-maximizing quantity of BriteKlean but is operating at a loss.</p><ul><li>(a) Draw a correctly labeled graph for Mary Company and show each of the following<ul><li>(i) The profit-maximizing output and price, labeled as Q and PM, respectively</li><li>(ii) The area of loss, shaded completely</li></ul></li><li>(b) what must be true in the short run for the company to continue to produce at a loss?</li><li>(c) Assume now that the demand for cleaning products increases and that the company is now earning short-run economic profits. Relative to this short-run situation, how does each of the following change in the long run?<ul><li>(i) The number of firms</li><li>(ii) The company’s profit</li></ul></li><li>(d) In the long run, if the company continues to produce, will it produce the allocatively efficient level of output? Explain</li><li>(e)In the long run, will the company be operating in a region where economies of scale exist? Explain.</li><li><strong>Solution</strong>: It will operate in a region where economies of scale exist, because the firm is in a monopolistically competitive industry. In the long run, $P = ATC &gt; \min ATC$, the firm will always produce where the slope of $ATC$ is negative, from which the company is operating in a region where economies of scale exist.</li></ul><h2 id="Unit-4-FRQ-3"><a href="#Unit-4-FRQ-3" class="headerlink" title="Unit 4 - FRQ - 3"></a>Unit 4 - FRQ - 3</h2><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/74.jpg" class=""><p>这一题当中，Nash Equilibrium有两个，已经在图片上标注出来了。做法：画圈圈出对手在不同情况下选择做出的Dominant Strategy或者Strategy，如果一个格子里有两个公司的圈就是均衡。</p><h2 id="Unit-5-FRQ-1"><a href="#Unit-5-FRQ-1" class="headerlink" title="Unit 5 - FRQ - 1"></a>Unit 5 - FRQ - 1</h2><p>The John Lamb Company, a profit-maximizing firm producing widgets, is in a perfectly competitive widget market. Assume John Lamb employs a fixed number of employees and rents a machine for a variable number of hours from a perfectly competitive market</p><ul><li>(a) Using correctly labeled side-by-side graphs of the factor market for machines and the John Lamb Company, show each of the following<ul><li>(i) The equilibrium rental price of machines in the factor market, labeled as $P_R$</li><li>(ii) John Lamb’s equilibrium rental quantity of machines, labeled as $Q_L$<img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/75.jpg" class=""></li></ul></li><li>(b) Assume that the popularity of widgets declines, decreasing the demand for widgets. What will happen to each of the following?<ul><li>(i) Marginal product curve for machine-hours</li><li><strong>Solution</strong>: It will remain the same. $MP_M$ doesn’t relate with $P$</li><li>(ii) Marginal revenue product curve for machine-hours. Explain.</li><li><strong>Solution</strong>: It will decrease, since $MR = P \times MP_M$, with $P$ decreasing, $MR$ will decrease too.</li></ul></li><li>(c) John Lamb is employing the cost-minimizing combination of inputs. The marginal product of labor is 28 widgets per worker hour and the wage rate is $14 per hour. The marginal product of the machine is 60 widgets per machine-hour. What is the hourly rental price of a machine?</li></ul><h2 id="Unit-5-FRQ-2-Monopsony（单一Employer）"><a href="#Unit-5-FRQ-2-Monopsony（单一Employer）" class="headerlink" title="Unit 5 - FRQ - 2 - Monopsony（单一Employer）"></a>Unit 5 - FRQ - 2 - Monopsony（单一Employer）</h2><img src="/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/76.jpg" class=""><p>Woodland is a small town in which everyone works for TreeMart, the local lumber company. TreeMart is a monopsonist in the labor market and a perfect competitor in the lumber market. In the short run, labor is the only variable input. The labor market for TreeMart is given in the graph above</p><ul><li>(a) Identify the profit-maximizing quantity of labor for TreeMart</li><li><strong>Solution</strong>: $MC = MR$, 100.</li><li>(b)Identify the wage rate Tree Mart pays to hire the profit-maximizing quantity of labor</li><li><strong>Solution</strong>: $10</li><li>(c) Identify the quantity of labor hired in each of the following situations.<ul><li>(i) Tree Mart operates in a competitive labor market</li><li><strong>Solution</strong>: Competitive $\rightarrow S = D$, 200.</li><li>(ii) The government imposes a minimum wage of $12.5 Explain.</li><li><strong>Solution</strong>: With the minimum wage of $12.5, according to the supply curve of labor, the company will hire 150 units of labor.</li></ul></li></ul><h2 id="重要注意点"><a href="#重要注意点" class="headerlink" title="重要注意点"></a>重要注意点</h2><ol><li>写清楚单位</li></ol>]]></content>
    
    
    <summary type="html">&lt;div class=&quot;note info no-icon&quot;&gt;
            &lt;h1 id=&quot;Production-Possibility-Frontier-PPF-生产可能性边界&quot;&gt;&lt;a href=&quot;#Production-Possibility-Frontier-PPF-生产可能性边界&quot; class=&quot;headerlink&quot; title=&quot;Production Possibility Frontier (PPF) - 生产可能性边界&quot;&gt;&lt;/a&gt;Production Possibility Frontier (PPF) - 生产可能性边界&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;font color=&#39;red&#39;&gt; PPF 向外凸起 &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;font color=&#39;red&#39;&gt; 线上：Efficient，线外：Impossible，线内：Inefficient &lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;note success&quot;&gt;不存在Most Efficient&lt;/div&gt;&lt;div class=&quot;note primary&quot;&gt;向外凸起的原因：OC不断增加（Law of Increasing Opportunity Cost）&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/3.jpg&quot; class=&quot;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;/2020/03/16/AP-Microeconomics-%E7%A9%B6%E6%9E%81%E6%8B%96%E5%BB%B6%E7%97%87%E6%82%A3%E8%80%85%E5%B0%9D%E8%AF%95%E8%A1%A5%E6%95%91/4.jpg&quot; class=&quot;&quot;&gt;&lt;/p&gt;
          &lt;/div&gt;</summary>
    
    
    
    <category term="Economics" scheme="http://gyrojeff.moe/categories/Economics/"/>
    
    
    <category term="AP" scheme="http://gyrojeff.moe/tags/AP/"/>
    
    <category term="经济学" scheme="http://gyrojeff.moe/tags/%E7%BB%8F%E6%B5%8E%E5%AD%A6/"/>
    
  </entry>
  
  <entry>
    <title>面包人小课堂 - 0x20 - DNS</title>
    <link href="http://gyrojeff.moe/2020/03/16/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-0x20-DNS/"/>
    <id>http://gyrojeff.moe/2020/03/16/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-0x20-DNS/</id>
    <published>2020-03-16T04:46:05.000Z</published>
    <updated>2020-03-16T04:57:09.000Z</updated>
    
    <content type="html"><![CDATA[<blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>DNS的工作原理：你发一条域名给dns，dns服务器回复你你应该找谁（比如说回复你另一个域名，或是回复你ip地址，balabala）<br>比如说www.baidu.com<br>在你获得到一个ip地址后，操作系统会自动记录下来<br>这样下次再访问百度的时候就用上次拿到的ip地址先进行尝试了<br>DNS如果是自动的话<br>电脑：路由器，我现在想要一个dns地址，你给我一个dns地址吧。<br>路由器：我自己有dns功能，可以充当一个正常的dns服务器，你就以我为dns服务器吧<br>电脑：好的，那么我就以192.168.110.1作为默认的dns地址了<br>然后访问百度：<br>电脑：192.168.110.1（dns），我想知道百度的ip<br>路由器：我不知道百度的ip，但是我可以再帮你问一问其他人<br>路由器：光猫，你知道不知道百度的ip地址<br>光猫：我不知道百度的ip，但是电信告诉我要以202.96.209.133（例子）为默认的dns服务器，我去问问他<br>然后202.96.209.133告诉光猫：我知道，百度的ip地址是180.101.49.11<br>光猫告诉路由器：我问到了，百度的ip是180.101.49.11<br>路由器告诉电脑：我问到了，百度的ip是180.101.49.11<br>电脑：开始访问180.101.49.11<br>与此同时，路由器：我拿个小本本记一下，百度的ip是180.101.49.11<br>光猫：我拿个小本本记一下，百度的ip是180.101.49.11<br>第二次的时候：<br>电脑：（假设系统内缓存的时效过期了）192.168.110.1（默认dns），我想知道百度的ip<br>路由器：我这里缓存还没过期，我告诉你，百度的ip是180.101.49.11<br>但是路由器并不知道的是，他的缓存时长是有问题的<br>此时的百度已经不同于以往的百度了<br>百度，她变了。<br>（像这种大公司的cdn，公网使用动态ip是很常见的事情<br>所以用原来的ip就访问不到百度了<br>计算机：路由器你这tm不是坑我吗……访问不了，你再给我去搞一个<br>路由器：我再去问问……<br>同（1）。<br>但是像dns这种分布式的东西<br>就很容易出现玄学问题<br>（因为是分布式的，所以缓存时间有各种奇奇怪怪的问题<br>所以有的时候大家问来问去都不知道steam的ip<br>那就好友网络无法访问了<br>所以一般来说<br>手动指定一个固定的dns<br>（比如说阿里dns就不错<br>那么每次问固定的人，出现这种缓存时间差的概率就会变得小很多</p>            <i class="fa fa-quote-right"></i>          </blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote class=&quot;blockquote-center&quot;&gt;
            &lt;i class=&quot;fa fa-quote-left&quot;&gt;&lt;/i&gt;
            &lt;p&gt;DNS的工作原理：你发一条域名给dns，dns服务器回复你你应该找谁（比如说回复你</summary>
      
    
    
    
    <category term="面包人小课堂" scheme="http://gyrojeff.moe/categories/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82/"/>
    
    
    <category term="网络" scheme="http://gyrojeff.moe/tags/%E7%BD%91%E7%BB%9C/"/>
    
    <category term="DNS" scheme="http://gyrojeff.moe/tags/DNS/"/>
    
  </entry>
  
  <entry>
    <title>面包人小课堂 - 0x10 - DHCP</title>
    <link href="http://gyrojeff.moe/2020/03/16/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-0x10-DHCP/"/>
    <id>http://gyrojeff.moe/2020/03/16/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-0x10-DHCP/</id>
    <published>2020-03-16T04:30:10.000Z</published>
    <updated>2020-03-16T04:35:30.000Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>「首先下一个定义：DHCP是一种协议」<br>「当电脑连上路由器时」<br>「电脑自己是没有ip地址的」<br>「所以电脑发了一条信息给网关：我要一个ip地址。」<br>「（此处省略各种握手 以及省略UDP层封包 省略冗余报文格式」<br>「（仅表达目的」<br>「草这是不是太草率了一点」<br>「反正就是电脑告诉网关：给劳资一个ip地址，没地址的话我tm没法和其他人通信」<br>「路由器在子网中充当网关的角色」<br>「网关是一种角色」<br>「然后网关告诉电脑：那我这里帮你登记好了，192.168.110.5你可以直接用，在120分钟内（举例）我不会把这个ip提供给其他的设备用，在120分钟后建议你再来向我确认一下这个ip是不是还能用，以免冲突。」<br>「然后电脑就能心安理得地在这120分钟（举例）内用这个ip了。」<br>「如果不开DHCP」<br>「那么就是像jdh那样的网络拓扑」<br>「电脑：哪个憨批让我不开dhcp的，那你tm自己填ip地址，填完我去告诉路由器去。」<br>「路由器收到了电脑的消息，将这个ip从自己DHCP“可用的ip地址池”内删去，这样其他的设备在DHCP时就不会获取到这个地址了」<br>「如果存在静态ip的话」<br>「那么就有可能会出现一种情况」<br>「路由器：刚刚不是有人和我说了192.168.110.6他要用吗……怎么现在又冒出来一个新的人说自己要用192.168.110.6了……我到底把消息发给谁啊……」<br>「然后那么这两台192.168.110.6（声称的ip地址）就都别想上网了。」<br>「所以说这种方法既麻烦 又存在风险」<br>「还不如DHCP来得香嘞」<br>「（此处省略了子网掩码相关内容」<br>「自动获得就是DHCP，手动填写就是静态」</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;
&lt;p&gt;「首先下一个定义：DHCP是一种协议」&lt;br&gt;「当电脑连上路由器时」&lt;br&gt;「电脑自己是没有ip地址的」&lt;br&gt;「所以电脑发了一条信息给网关：我要一个ip地址。」&lt;br&gt;「（此处省略各种握手 以及省略UDP层封包 省略冗余报文格式」&lt;br&gt;「（仅表</summary>
      
    
    
    
    <category term="面包人小课堂" scheme="http://gyrojeff.moe/categories/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82/"/>
    
    
    <category term="网络" scheme="http://gyrojeff.moe/tags/%E7%BD%91%E7%BB%9C/"/>
    
    <category term="DHCP" scheme="http://gyrojeff.moe/tags/DHCP/"/>
    
  </entry>
  
  <entry>
    <title>『随想』「学姐在的时候安心感就是不一样」</title>
    <link href="http://gyrojeff.moe/2020/03/15/%E3%80%8E%E9%9A%8F%E6%83%B3%E3%80%8F%E3%80%8C%E5%AD%A6%E5%A7%90%E5%9C%A8%E7%9A%84%E6%97%B6%E5%80%99%E5%AE%89%E5%BF%83%E6%84%9F%E5%B0%B1%E6%98%AF%E4%B8%8D%E4%B8%80%E6%A0%B7%E3%80%8D/"/>
    <id>http://gyrojeff.moe/2020/03/15/%E3%80%8E%E9%9A%8F%E6%83%B3%E3%80%8F%E3%80%8C%E5%AD%A6%E5%A7%90%E5%9C%A8%E7%9A%84%E6%97%B6%E5%80%99%E5%AE%89%E5%BF%83%E6%84%9F%E5%B0%B1%E6%98%AF%E4%B8%8D%E4%B8%80%E6%A0%B7%E3%80%8D/</id>
    <published>2020-03-14T17:53:22.000Z</published>
    <updated>2020-03-22T09:13:21.000Z</updated>
    
    <content type="html"><![CDATA[<img src="/2020/03/15/%E3%80%8E%E9%9A%8F%E6%83%B3%E3%80%8F%E3%80%8C%E5%AD%A6%E5%A7%90%E5%9C%A8%E7%9A%84%E6%97%B6%E5%80%99%E5%AE%89%E5%BF%83%E6%84%9F%E5%B0%B1%E6%98%AF%E4%B8%8D%E4%B8%80%E6%A0%B7%E3%80%8D/1.png" class=""><a id="more"></a><p>看小惑星，听到这句台词的时候唰的一下就突然想哭。</p><p>可能是自己能力不足吧</p><p>也可能是留念吧</p><p>不过</p><p>更多的</p><p>还是不舍、留<em>恋</em>与彷徨</p><p>「自己不能做到最好，而能做得比自己更好得人不在身边了，彷徨、害怕、忧虑、担心」</p><p>前面仔细想了想</p><p>自己活得这15年多</p><p>在牙牙学语中</p><p>度过了4年</p><p>在还不懂事的时候</p><p>度过了2年</p><p>在思维的绑架下</p><p>前前后后</p><p>活了7年多</p><p>真真活得稍微明白一点</p><p>才一年有余</p><p>两年不足</p><p>但我真的活得「明白」吗</p><p>因为「＊」而开始思考</p><p>因为「＊」而开始反思</p><p>亦由此</p><p>开始反抗。</p><p>往事</p><p>不堪回首。</p>]]></content>
    
    
    <summary type="html">&lt;img src=&quot;/2020/03/15/%E3%80%8E%E9%9A%8F%E6%83%B3%E3%80%8F%E3%80%8C%E5%AD%A6%E5%A7%90%E5%9C%A8%E7%9A%84%E6%97%B6%E5%80%99%E5%AE%89%E5%BF%83%E6%84%9F%E5%B0%B1%E6%98%AF%E4%B8%8D%E4%B8%80%E6%A0%B7%E3%80%8D/1.png&quot; class=&quot;&quot;&gt;</summary>
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
  </entry>
  
  <entry>
    <title>200313-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/13/200313-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/13/200313-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-13T07:29:57.000Z</published>
    <updated>2020-09-22T12:59:19.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-13-地理课"><a href="#3-13-地理课" class="headerlink" title="3/13 地理课"></a>3/13 地理课</h1><h2 id="人口容量"><a href="#人口容量" class="headerlink" title="人口容量"></a>人口容量</h2><ol><li><strong>环境人口容量</strong>，简称<strong>人口容量</strong>。指一个地区在<strong>一定时间以内</strong>，能够容纳的享有<strong>合力生活水平</strong>的人口数量。</li><li>合力生活水平的两个方面：<ul><li>满足物质需求</li><li>满足精神需求和未来发展</li></ul></li></ol><a id="more"></a><h2 id="环境人口容量与环境承载力"><a href="#环境人口容量与环境承载力" class="headerlink" title="环境人口容量与环境承载力"></a>环境人口容量与环境承载力</h2><p>环境承载力：</p><ul><li>土地资源承载力</li><li>淡水资源承载力</li><li>矿产资源承载力</li><li>能源承载力</li><li>森林资源承载力</li><li>草场资源承载力</li></ul><ol><li>从自然资源的角度估算人口容量</li><li>把人均消费水平压缩到最低所固端的最大抚养人口数量<br>简单地说，<strong>环境承载力</strong>就是环境所能容纳的<strong>最大人口数</strong></li></ol><div class="note info">$$ 环境承载力 > 环境人口容量 $$</div><h2 id="影响人口容量的主要因素"><a href="#影响人口容量的主要因素" class="headerlink" title="影响人口容量的主要因素"></a>影响人口容量的主要因素</h2><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>“木桶效应”</p>            <i class="fa fa-quote-right"></i>          </blockquote><div class="note default">如果把环境人口容量看成是一个木桶，那么某种资源的环境承载能力就是一块木板，木桶容量取决于$\color {red}最短的$那块木板</div><p>如果把环境人口容量看成是一个<strong>木桶</strong>，那么某种资源</p><p>环境人口容量：</p><ul><li>首要影响因素：自然资源与环境<ul><li><strong>资源越多，能供养的人口数量当然越多</strong></li></ul></li><li>科学技术水平：影响生产效率<ul><li>科学技术的发展提高了人类的<strong>生产效率</strong>，使人类创造<strong>更多</strong>的<strong>物质财富</strong>，促进全球<strong>人口的发展</strong></li></ul></li><li>地区开放程度：影响内外交流<ul><li>资源的交换或补充，科技的引进与交流，文化的传播</li><li>地区开放程度<strong>越高</strong>，环境人口容量<strong>越大</strong></li></ul></li><li>人均消费水平：影响资源消耗<ul><li>人均消费水平<strong>越高</strong>，其人口容量<strong>越小</strong>；反之，人口容量<strong>越大</strong></li></ul></li></ul><div class="table-container"><table><thead><tr><th style="text-align:center">因素</th><th style="text-align:center">正负相关</th><th style="text-align:center">与环境人口容量的关系</th></tr></thead><tbody><tr><td style="text-align:center">自然资源与环境</td><td style="text-align:center">正相关</td><td style="text-align:center">自然环境越优越，资源丰富的地区，人口容量大</td></tr><tr><td style="text-align:center">科学技术水平</td><td style="text-align:center">正相关</td><td style="text-align:center">科学技术水平越高，人口容量越大</td></tr><tr><td style="text-align:center">地区开放程度</td><td style="text-align:center">正相关</td><td style="text-align:center">地区开放程度越高，环境人口容量越大</td></tr><tr><td style="text-align:center">人均资源消费水哦平</td><td style="text-align:center"><em>负相关</em></td><td style="text-align:center">人均资源消费水平越高，环境人口容量越小 </td></tr></tbody></table></div><h2 id="确定人口容量的意义"><a href="#确定人口容量的意义" class="headerlink" title="确定人口容量的意义"></a>确定人口容量的意义</h2><script type="math/tex; mode=display">生存 \longleftrightarrow 发展</script><script type="math/tex; mode=display">高质量的生活 \rightarrow 健康的生活水平 \rightarrow 合理的生活方式 \rightarrow 人口极限</script><p>环境人口容量：</p><ul><li>警示在资源开发和经济建设中要<strong>量力而行</strong></li><li>重视自然所能承受的<strong>限度</strong></li></ul><p>加强国际合作 - 把人口控制在合理规模内</p><p>建立公平只需 - 保证大家都有追求高水平生活的平等权利</p><p>人地协调发展 - 因地制宜制定本区域持续发展战略，既保持生态平衡，又不断提高人们的生活质量</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-13-地理课&quot;&gt;&lt;a href=&quot;#3-13-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/13 地理课&quot;&gt;&lt;/a&gt;3/13 地理课&lt;/h1&gt;&lt;h2 id=&quot;人口容量&quot;&gt;&lt;a href=&quot;#人口容量&quot; class=&quot;headerlink&quot; title=&quot;人口容量&quot;&gt;&lt;/a&gt;人口容量&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;环境人口容量&lt;/strong&gt;，简称&lt;strong&gt;人口容量&lt;/strong&gt;。指一个地区在&lt;strong&gt;一定时间以内&lt;/strong&gt;，能够容纳的享有&lt;strong&gt;合力生活水平&lt;/strong&gt;的人口数量。&lt;/li&gt;
&lt;li&gt;合力生活水平的两个方面：&lt;ul&gt;
&lt;li&gt;满足物质需求&lt;/li&gt;
&lt;li&gt;满足精神需求和未来发展&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200312-市历史课</title>
    <link href="http://gyrojeff.moe/2020/03/12/200312-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/12/200312-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/</id>
    <published>2020-03-12T15:07:47.000Z</published>
    <updated>2020-03-12T15:09:53.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第二课-古代世界的帝国与文明的交流"><a href="#第二课-古代世界的帝国与文明的交流" class="headerlink" title="第二课 古代世界的帝国与文明的交流"></a>第二课 古代世界的帝国与文明的交流</h1><h2 id="古代文明的扩展"><a href="#古代文明的扩展" class="headerlink" title="古代文明的扩展"></a>古代文明的扩展</h2><h3 id="最初的文明：亚非欧大陆的若干地区，但是之间联系比较少"><a href="#最初的文明：亚非欧大陆的若干地区，但是之间联系比较少" class="headerlink" title="最初的文明：亚非欧大陆的若干地区，但是之间联系比较少"></a>最初的文明：亚非欧大陆的若干地区，但是之间联系比较少</h3><h3 id="扩展的条件-原因"><a href="#扩展的条件-原因" class="headerlink" title="扩展的条件 / 原因"></a>扩展的条件 / 原因</h3><ul><li><p>农耕文明</p><ul><li>比较发达的社会分工</li><li>相对较高的劳动生产率</li><li>复杂的社会组织和管理系统</li></ul></li><li><p>海洋文明</p><ul><li>组织能力</li><li>航海技术</li><li>武器</li></ul></li></ul><a id="more"></a><h3 id="各个文明具体的扩展"><a href="#各个文明具体的扩展" class="headerlink" title="各个文明具体的扩展"></a>各个文明具体的扩展</h3><ul><li><p>古埃及文明</p><ul><li>-&gt; 叙利亚、巴勒斯坦</li><li>埃及新王国时期：两河流域</li></ul></li><li><p>西亚文明</p><ul><li>-&gt; 两河流域</li><li>古巴比伦王国首次实现了统一 &amp; -&gt; 地中海东岸</li></ul></li><li><p>亚述</p><ul><li>-&gt;两河流域地区<br>-&gt; 小亚细亚的一部分<br>-&gt; 一度征服埃及</li></ul></li><li><p>古希腊</p><ul><li>移民 -&gt; 地中海、黑海周边地区殖民<br>建立众多城邦国家</li></ul></li></ul><h2 id="文明的交流"><a href="#文明的交流" class="headerlink" title="文明的交流"></a>文明的交流</h2><h3 id="农耕技术"><a href="#农耕技术" class="headerlink" title="农耕技术"></a>农耕技术</h3><ul><li>西亚 -&gt; 中亚，欧洲，北非</li></ul><h3 id="冶铁技术"><a href="#冶铁技术" class="headerlink" title="冶铁技术"></a>冶铁技术</h3><ul><li>西亚 -&gt; 埃及，希腊</li></ul><h3 id="雕刻艺术"><a href="#雕刻艺术" class="headerlink" title="雕刻艺术"></a>雕刻艺术</h3><ul><li>埃及 -&gt; 希腊</li></ul><h3 id="字母文字"><a href="#字母文字" class="headerlink" title="字母文字"></a>字母文字</h3><ul><li><p>西亚腓尼基</p><ul><li>西亚文明的交汇点</li><li>商业比较发达</li><li>方便记录 -&gt; 22个字母 ”腓尼基字母“</li><li><p>衍化</p><ul><li><p>东方：阿拉玛字母</p><ul><li>古代西亚</li><li>埃及</li><li>印度</li></ul></li><li><p>向西：希腊</p><ul><li><p>希腊字母</p><ul><li><p>拉丁字母</p><ul><li>欧洲所有字母文字</li></ul></li></ul></li></ul></li></ul></li></ul></li></ul><h3 id="丝绸之路"><a href="#丝绸之路" class="headerlink" title="丝绸之路"></a>丝绸之路</h3><ul><li><p>罗马（大秦）与汉</p><ul><li>东汉班超，派甘英出使</li><li>间接经贸文化交流</li><li><p>罗马政府地中海东部后</p><ul><li>与汉朝直接建立关系</li><li>2世纪，通商</li></ul></li></ul></li></ul><h2 id="古代世界的帝国"><a href="#古代世界的帝国" class="headerlink" title="古代世界的帝国"></a>古代世界的帝国</h2><h3 id="亚述（不是帝国）"><a href="#亚述（不是帝国）" class="headerlink" title="亚述（不是帝国）"></a>亚述（不是帝国）</h3><ul><li><p>时间：公元前八世纪</p></li><li><p>跨度：亚非</p></li></ul><h3 id="埃及新王国（不是帝国）"><a href="#埃及新王国（不是帝国）" class="headerlink" title="埃及新王国（不是帝国）"></a>埃及新王国（不是帝国）</h3><ul><li>跨度：非亚</li></ul><h3 id="波斯帝国"><a href="#波斯帝国" class="headerlink" title="波斯帝国"></a>波斯帝国</h3><ul><li>时间：公元前六世纪</li><li>兴起于：伊朗高原</li><li>跨度：亚非欧</li><li>主要君主：大流士一世</li><li><p>制度：君主专制制度</p><ul><li>国王：核心、最高主宰</li><li>君权神授</li><li><p>地方：行省制</p><ul><li>行省总督 &amp;  军事长官 互相监督制约</li></ul></li><li><p>较完善的官僚体系、税收系统</p></li><li>波斯人担任重要职务</li></ul></li></ul><h3 id="亚历山大帝国"><a href="#亚历山大帝国" class="headerlink" title="亚历山大帝国"></a>亚历山大帝国</h3><ul><li>时间：公元前四世纪晚期</li><li><p>兴起</p><ul><li>原因：希波战争两败俱伤</li><li>初始：马其顿国王亚历山大率军入侵波斯帝国</li><li>过程：10年，灭波斯</li></ul></li><li><p>跨度：亚非欧</p></li><li>主要君主：亚历山大（就一个）</li><li><p>制度：沿袭波斯帝国</p><ul><li>国王、君主专制</li><li>君权神授</li><li>地方行省制</li><li>马其顿人 &amp; 希腊人 -&gt; 担任主要职务</li></ul></li><li><p>文化：推广希腊文化</p></li></ul><h3 id="罗马"><a href="#罗马" class="headerlink" title="罗马"></a>罗马</h3><ul><li>罗马共和国 -&gt; 东西罗马帝国</li><li>兴起：<br>原来是意大利中部的一个城邦<br>公民组成的强大的军队 -&gt; 征服整个地中海周边地区<br>-&gt; 地中海成为罗马的内海</li><li>奴隶制</li><li>宗教：1世界，基督教产生于巴勒斯坦，4世纪末成为罗马帝国国教</li><li><p>衰落及灭亡</p><ul><li>3世纪后，官僚体系、职业军队 -&gt; 人民负担不断加重 &amp;  边境压力加重</li><li>4世纪末，分裂成东西两部分</li><li>5世纪后期，内外矛盾，西罗马帝国灭亡</li><li>东罗马帝国一直到15世纪</li></ul></li></ul><p>MindMap: </p><img src="/2020/03/12/200312-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/1.png" class="">]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;第二课-古代世界的帝国与文明的交流&quot;&gt;&lt;a href=&quot;#第二课-古代世界的帝国与文明的交流&quot; class=&quot;headerlink&quot; title=&quot;第二课 古代世界的帝国与文明的交流&quot;&gt;&lt;/a&gt;第二课 古代世界的帝国与文明的交流&lt;/h1&gt;&lt;h2 id=&quot;古代文明的扩展&quot;&gt;&lt;a href=&quot;#古代文明的扩展&quot; class=&quot;headerlink&quot; title=&quot;古代文明的扩展&quot;&gt;&lt;/a&gt;古代文明的扩展&lt;/h2&gt;&lt;h3 id=&quot;最初的文明：亚非欧大陆的若干地区，但是之间联系比较少&quot;&gt;&lt;a href=&quot;#最初的文明：亚非欧大陆的若干地区，但是之间联系比较少&quot; class=&quot;headerlink&quot; title=&quot;最初的文明：亚非欧大陆的若干地区，但是之间联系比较少&quot;&gt;&lt;/a&gt;最初的文明：亚非欧大陆的若干地区，但是之间联系比较少&lt;/h3&gt;&lt;h3 id=&quot;扩展的条件-原因&quot;&gt;&lt;a href=&quot;#扩展的条件-原因&quot; class=&quot;headerlink&quot; title=&quot;扩展的条件 / 原因&quot;&gt;&lt;/a&gt;扩展的条件 / 原因&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;农耕文明&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;比较发达的社会分工&lt;/li&gt;
&lt;li&gt;相对较高的劳动生产率&lt;/li&gt;
&lt;li&gt;复杂的社会组织和管理系统&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;海洋文明&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;组织能力&lt;/li&gt;
&lt;li&gt;航海技术&lt;/li&gt;
&lt;li&gt;武器&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="History" scheme="http://gyrojeff.moe/tags/History/"/>
    
  </entry>
  
  <entry>
    <title>200312-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/12/200312-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/12/200312-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-12T05:32:01.000Z</published>
    <updated>2020-09-22T12:59:17.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-12-化学课"><a href="#3-12-化学课" class="headerlink" title="3/12 化学课"></a>3/12 化学课</h1><h2 id="物质的量浓度"><a href="#物质的量浓度" class="headerlink" title="物质的量浓度"></a>物质的量浓度</h2><ul><li>用$1L$溶液中所含溶质（分子、离子）的物质的量来表示的溶液浓度</li><li>定义：单位体积溶液中所含溶质的物质的量来表示的浓度</li><li>表达式：</li></ul><script type="math/tex; mode=display">    c = \frac {n}{V_{\text{溶液}}}</script><ul><li>单位：$\text {mol / L}$，亦可表示为：$\text {mol}\cdot \text {L}^{-1}$<a id="more"></a></li><li>与溶质质量分数的关系<script type="math/tex; mode=display">\begin{aligned}  溶质质量 &\xrightarrow{\div 溶质的摩尔质量}&溶质的物质的量 \\  溶液质量 &~~~~~~\xrightarrow{\div 溶液密度}&溶液体积\end{aligned}</script><script type="math/tex; mode=display">  c = \frac {1000 \rho R\%}{M}</script>其中$\rho$的单位为$g/\text{mL}$</li><li>溶液的稀释：稀释前后溶质的物质的量保持不变<script type="math/tex; mode=display">  n_{溶质} = c_{浓}V_{浓} = c_{稀}V_{稀}</script></li></ul><h2 id="pH值的计算"><a href="#pH值的计算" class="headerlink" title="pH值的计算"></a>pH值的计算</h2><ol><li>酸碱性强弱的判断方法：指示剂</li><li>溶液酸碱性强弱的表示方法(pH)：<script type="math/tex; mode=display">     \text{pH} = -\lg c(\ce {H+})</script></li><li>酸每稀释$10$倍，$\text{pH}$值加一。</li></ol><p><strong><em><font color='red'> 易错题： </font></em></strong><br><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>判断下列溶液等体积混合后的pH（设混合前后均为室温，体积具有加和性）：<br>     A.大于7                B. 等于7              C. 小于7<br>pH=3硝酸  +  pH=11氢氧化钾溶液：   B<br>pH=3盐酸  +  pH=11氢氧化钡溶液：   B<br>pH=3硫酸  +  pH=11氢氧化钠溶液：    B<br>c(H+)=1×10-3硫酸  +  c(OH-)=1×10-11氢氧化钾溶液：   B<br>c(H+)=1×10-3盐酸  +  c(OH-)=1×10-11氢氧化钡溶液：   B<br>c(H+)=1×10-4醋酸  +  c(OH-)=1×10-10氢氧化钾溶液：   C    </p>            <i class="fa fa-quote-right"></i>          </blockquote></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-12-化学课&quot;&gt;&lt;a href=&quot;#3-12-化学课&quot; class=&quot;headerlink&quot; title=&quot;3/12 化学课&quot;&gt;&lt;/a&gt;3/12 化学课&lt;/h1&gt;&lt;h2 id=&quot;物质的量浓度&quot;&gt;&lt;a href=&quot;#物质的量浓度&quot; class=&quot;headerlink&quot; title=&quot;物质的量浓度&quot;&gt;&lt;/a&gt;物质的量浓度&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;用$1L$溶液中所含溶质（分子、离子）的物质的量来表示的溶液浓度&lt;/li&gt;
&lt;li&gt;定义：单位体积溶液中所含溶质的物质的量来表示的浓度&lt;/li&gt;
&lt;li&gt;表达式：&lt;/li&gt;
&lt;/ul&gt;
&lt;script type=&quot;math/tex; mode=display&quot;&gt;
    c = \frac {n}{V_{\text{溶液}}}&lt;/script&gt;&lt;ul&gt;
&lt;li&gt;单位：$\text {mol / L}$，亦可表示为：$\text {mol}\cdot \text {L}^{-1}$</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200311-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/12/200311-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/12/200311-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-12T01:32:19.000Z</published>
    <updated>2020-03-12T05:33:37.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-11-地理课"><a href="#3-11-地理课" class="headerlink" title="3/11 地理课"></a>3/11 地理课</h1><h2 id="人口迁移的主要形式"><a href="#人口迁移的主要形式" class="headerlink" title="人口迁移的主要形式"></a>人口迁移的主要形式</h2><p><strong>基本概念</strong>：人口迁移是人口移动的一种形式，是指人们变更居住地的空间流动行为。</p><p><strong>注</strong>：人口短期离开原居住地后又返回属于人口流动的现象</p><p>判断人口迁移的三要素：</p><ul><li>空间移动</li><li>时间限度（通常1年以上）</li><li>定居地变更</li></ul><a id="more"></a><p>人口迁移的例子：</p><ul><li>居住在土耳其难民营中的叙利亚难民</li><li>来到中国工作的外国人</li><li>农名工进城务工</li><li>国家有计划地抽调人员支援西部建设</li></ul><ol><li>劳务迁移 - <em>劳动力的空间移动</em><ul><li>表现形式：<ul><li>农村剩余劳动力向城市转移</li><li>发展中国家和地区向发达国家和地区转移</li></ul></li></ul></li><li>难民迁移 - <em>由于战争或自然灾害等迫使人口向安全地域的迁移</em></li><li>智力迁移 - <em>人才迁移，头脑外流</em><ul><li>主要指发展中国家的科技人才向发达国家的迁移；欠发达地区的科技人才向发达地区的迁移</li></ul></li><li>其他形式迁移 - <em>大型基础设施建设、资源开发等</em></li></ol><h2 id="影响人口迁移的因素"><a href="#影响人口迁移的因素" class="headerlink" title="影响人口迁移的因素"></a>影响人口迁移的因素</h2><ul><li>自然环境的变迁<ul><li>自然灾害<ul><li>文传递正后，北川县城整体异地搬迁</li></ul></li><li>气候<ul><li>美国老年人迁向南方“阳光地带”</li><li>东北人在海南购房</li></ul></li><li>水</li><li>土壤</li><li>资源<ul><li>中国人到西亚开采油气资源</li></ul></li><li>生态环境变化<ul><li>图瓦卢被淹没，形成环境难民</li></ul></li></ul></li><li>社会经济变化<ul><li>经济发展<ul><li>“孔雀东南飞”</li></ul></li><li>大型基础设施建设<ul><li>三峡大移民</li></ul></li><li>交通通信<ul><li>国际人口迁移越来越频繁</li></ul></li><li>就业<ul><li>进城务工</li></ul></li></ul></li><li>政治文化因素<ul><li>政策<ul><li>60年代移民支边，70年代上山下乡，80年代知青返城</li></ul></li><li>社会变革<ul><li>首都迁移导致人口迁移</li></ul></li><li>战争<ul><li>战争难民</li></ul></li><li>婚姻家庭<ul><li>军人家属随迁</li></ul></li><li>文化教育<ul><li>异地求学</li></ul></li><li>民族宗教问题<ul><li>印巴分治与人口迁移</li></ul></li></ul></li></ul><h2 id="人口迁移的主要影响"><a href="#人口迁移的主要影响" class="headerlink" title="人口迁移的主要影响"></a>人口迁移的主要影响</h2><ul><li>迁移原因：战争、环境恶化、劳务、政治变革</li><li>迁入地：发达国家或地区、城市为主<ul><li>利：弥补了劳动力的不足</li><li>利：引进技术和人才，促进经济发展</li><li>利：推动城市化发展</li><li>弊：怎加公共设施的负担和城市管理的难度</li><li>弊：住房、交通、卫生等压力巨大</li></ul></li><li>迁出地：发展中国家或地区、农村为主<ul><li>利：缓解人地矛盾</li><li>利：加强经济文化交流、促进融合</li><li>弊：劳动力人才外流</li><li>弊：影响经济发展</li></ul></li><li>影响：<ul><li>发达国家：由于发展中国家人才的流入，怎加了国家的科技实力，节约了基础教育的费用。</li><li>发展中国家：一方面人才流失，与发达国家的差距加大；另一方面，增强了与发达国家的技术交流，促进本国科技进步。</li></ul></li><li>整体来看，人口迁移调整人口的空间分布和人才余缺；加强民族融合和文化交流；促进经济发展，缩小地区差异。但需要正对迁入地和迁出地的不同影响采取合力的政策措施</li></ul>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-11-地理课&quot;&gt;&lt;a href=&quot;#3-11-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/11 地理课&quot;&gt;&lt;/a&gt;3/11 地理课&lt;/h1&gt;&lt;h2 id=&quot;人口迁移的主要形式&quot;&gt;&lt;a href=&quot;#人口迁移的主要形式&quot; class=&quot;headerlink&quot; title=&quot;人口迁移的主要形式&quot;&gt;&lt;/a&gt;人口迁移的主要形式&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;基本概念&lt;/strong&gt;：人口迁移是人口移动的一种形式，是指人们变更居住地的空间流动行为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：人口短期离开原居住地后又返回属于人口流动的现象&lt;/p&gt;
&lt;p&gt;判断人口迁移的三要素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;空间移动&lt;/li&gt;
&lt;li&gt;时间限度（通常1年以上）&lt;/li&gt;
&lt;li&gt;定居地变更&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200311-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/11/200311-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/11/200311-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-11T05:31:55.000Z</published>
    <updated>2020-03-11T05:36:36.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-11-物理课"><a href="#3-11-物理课" class="headerlink" title="3/11 物理课"></a>3/11 物理课</h1><h2 id="解题方法"><a href="#解题方法" class="headerlink" title="解题方法"></a>解题方法</h2><ol><li>明确研究对象</li><li>理清关系是</li><li>应用规律求解</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;3-11-物理课&quot;&gt;&lt;a href=&quot;#3-11-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/11 物理课&quot;&gt;&lt;/a&gt;3/11 物理课&lt;/h1&gt;&lt;h2 id=&quot;解题方法&quot;&gt;&lt;a href=&quot;#解题方法&quot; class=&quot;headerlink&quot; </summary>
      
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200309-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/10/200309-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/10/200309-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-10T02:57:06.000Z</published>
    <updated>2020-03-12T05:27:44.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-9-地理课"><a href="#3-9-地理课" class="headerlink" title="3/9 地理课"></a>3/9 地理课</h1><h2 id="人口分布的基本指标"><a href="#人口分布的基本指标" class="headerlink" title="人口分布的基本指标"></a>人口分布的基本指标</h2><ul><li>描述人口分布状况的指标 - <strong>人口密度</strong><ul><li>单位：<strong>人/千米²</strong></li></ul></li></ul><h2 id="世界人口的分布"><a href="#世界人口的分布" class="headerlink" title="世界人口的分布"></a>世界人口的分布</h2><a id="more"></a><ul><li>人口分布的趋向<blockquote><p>趋向于分布在地市平缓，沿海的地区<br>人口主要集中在地势低平的地区</p><ul><li><strong>人口向平原集中</strong></li><li><strong>人口向沿海集中</strong></li><li><strong>人口向城市集中</strong></li></ul></blockquote></li><li>人口稠密区（经济文化原因）<ul><li>西欧</li><li>南亚</li><li>东亚</li><li>北美东部</li></ul></li><li>人口稀疏区 - 酷寒、酷热、酷干、高海拔低氧<ul><li>西伯利亚地区 - 高纬度地区，气温比较低，酷寒</li><li>加拿大北部 - 高纬度地区，气温比较低，酷寒</li><li>撒哈拉沙漠 - 常年高温炎热，极度干旱</li><li>亚马孙平原 - 非常炎热，潮湿</li><li>大自流盆地 - 炎热，干旱</li><li>青藏高原 - 海拔较高，氧气稀薄</li></ul></li></ul><h2 id="影响人口分布的因素"><a href="#影响人口分布的因素" class="headerlink" title="影响人口分布的因素"></a>影响人口分布的因素</h2><ul><li>自然环境<ul><li>气候条件：气候适宜，如温带、亚热带的湿润和半湿润地区</li><li>地形条件：平原地区，地势平坦、土壤肥沃、交通便利</li><li>水资源：沿河、沿湖（亚马孙除外）</li></ul></li><li>社会经济<ul><li>社会经济：经济发达</li><li>生活水平：高</li><li>就业环境：好</li></ul></li><li>开发历史</li></ul><h2 id="我国人口分布"><a href="#我国人口分布" class="headerlink" title="我国人口分布"></a>我国人口分布</h2><ul><li>黑河腾冲线（胡焕庸线）</li><li>东南多，西北少</li></ul>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-9-地理课&quot;&gt;&lt;a href=&quot;#3-9-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/9 地理课&quot;&gt;&lt;/a&gt;3/9 地理课&lt;/h1&gt;&lt;h2 id=&quot;人口分布的基本指标&quot;&gt;&lt;a href=&quot;#人口分布的基本指标&quot; class=&quot;headerlink&quot; title=&quot;人口分布的基本指标&quot;&gt;&lt;/a&gt;人口分布的基本指标&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;描述人口分布状况的指标 - &lt;strong&gt;人口密度&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;单位：&lt;strong&gt;人/千米²&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;世界人口的分布&quot;&gt;&lt;a href=&quot;#世界人口的分布&quot; class=&quot;headerlink&quot; title=&quot;世界人口的分布&quot;&gt;&lt;/a&gt;世界人口的分布&lt;/h2&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200309-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/10/200309-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/10/200309-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-10T02:44:07.000Z</published>
    <updated>2020-09-22T12:59:16.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-9-物理课"><a href="#3-9-物理课" class="headerlink" title="3/9 物理课"></a>3/9 物理课</h1><h2 id="角速度与线速度之间的关系"><a href="#角速度与线速度之间的关系" class="headerlink" title="角速度与线速度之间的关系"></a>角速度与线速度之间的关系</h2><ul><li>$v = \displaystyle\frac{2\pi R}{T}$</li><li>$\omega = \displaystyle\frac{2\pi }{T}$</li><li>$\Rightarrow v = \omega R$，当$R$不变时，$v \propto \omega$</li></ul><h2 id="其他物理量"><a href="#其他物理量" class="headerlink" title="其他物理量"></a>其他物理量</h2><ul><li>周期（$T$）<ul><li>定义：物体作匀速圆周运动一圈所花的时间</li><li>单位：秒（$\text s$）</li></ul></li><li>转速（$n$）<ul><li>定义：物体在单位时间内转过的圈数</li><li>单位：$\text {r/s 或 r/min}$</li></ul></li></ul><a id="more"></a><h2 id="各物理量之间的关系"><a href="#各物理量之间的关系" class="headerlink" title="各物理量之间的关系"></a>各物理量之间的关系</h2><script type="math/tex; mode=display">\omega = 2\pi n</script><script type="math/tex; mode=display">v = 2\pi Rn</script><script type="math/tex; mode=display">v = \omega R</script><script type="math/tex; mode=display">n = \frac 1 T</script><script type="math/tex; mode=display">n = \frac {v} {2\pi R}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-9-物理课&quot;&gt;&lt;a href=&quot;#3-9-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/9 物理课&quot;&gt;&lt;/a&gt;3/9 物理课&lt;/h1&gt;&lt;h2 id=&quot;角速度与线速度之间的关系&quot;&gt;&lt;a href=&quot;#角速度与线速度之间的关系&quot; class=&quot;headerlink&quot; title=&quot;角速度与线速度之间的关系&quot;&gt;&lt;/a&gt;角速度与线速度之间的关系&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;$v = \displaystyle\frac{2\pi R}{T}$&lt;/li&gt;
&lt;li&gt;$\omega = \displaystyle\frac{2\pi }{T}$&lt;/li&gt;
&lt;li&gt;$\Rightarrow v = \omega R$，当$R$不变时，$v \propto \omega$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;其他物理量&quot;&gt;&lt;a href=&quot;#其他物理量&quot; class=&quot;headerlink&quot; title=&quot;其他物理量&quot;&gt;&lt;/a&gt;其他物理量&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;周期（$T$）&lt;ul&gt;
&lt;li&gt;定义：物体作匀速圆周运动一圈所花的时间&lt;/li&gt;
&lt;li&gt;单位：秒（$\text s$）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;转速（$n$）&lt;ul&gt;
&lt;li&gt;定义：物体在单位时间内转过的圈数&lt;/li&gt;
&lt;li&gt;单位：$\text {r/s 或 r/min}$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>面包人小课堂 - 0x00 - IP地址</title>
    <link href="http://gyrojeff.moe/2020/03/08/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-%E7%BD%91%E7%BB%9C-0x00/"/>
    <id>http://gyrojeff.moe/2020/03/08/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-%E7%BD%91%E7%BB%9C-0x00/</id>
    <published>2020-03-08T13:00:01.000Z</published>
    <updated>2020-03-16T04:36:27.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="0x01-绪论"><a href="#0x01-绪论" class="headerlink" title="0x01 - 绪论"></a>0x01 - 绪论</h1><p>我，因为水课，成为了一个网络白痴。隔壁茶铺的老板于心不忍，拯救了我。【这个时候是不是要说一句：啊，被治愈了（笑】</p><h1 id="0x02-上课"><a href="#0x02-上课" class="headerlink" title="0x02 - 上课"></a>0x02 - 上课</h1><blockquote><p>「首先 计算机之间想要交流」<br>「在19*0年代」<br>「那时候还没有网络」<br>「此时科学家开始拿一根电线把两台电脑连了起来」<br>「然后这两台电脑就能通过这根线开始交流了」<br>「然后 他们想要让第三台电脑也连进来」<br>「最初的方案是，把3号电脑连在2号电脑上<a id="more"></a>」<br>「这样2号电脑就连接了1和3两台电脑」<br>「3如果要和1说话，只要在说的话前面加上：“我要和1说”就可以了」<br>「现在的网络是1-2-3这样连的」<br>「3要和1说话必须要经过2」<br>「当他们有了很多很多台电脑」<br>「他们现在就有了1-2-3-4-5-6-7-8-9」<br>「这样2-8之间的每台电脑都有两个网口，连接了两台设备」<br>「但是这样的话」<br>「9要和1说话，就必须先经过8765432」<br>「这样的话太慢了」<br>「效率太低」<br>「所以科学家们想到能把9和1连起来」<br>「这样就是1-2-3-4-5-6-7-8-9-1」<br>「连成了一个圆环」<br>「但是这样还是慢：如果4想要和9说话，必须要途中的每台机器都先接收，再发送」<br>「对于当时低性能的设备来说，这样的时延是巨大的」<br>「有什么办法能直接让4和9说话呢」<br>「那就让4和9在一根线上就好了」<br>「此时他们使用一根网线 将1-2-3-4-5-6-7-8-9-1串在了一起，此时每台机器就只需要一个网口了！」<br>「当4发出信号时，9能够直接接收到4在这根线上发出的信号」<br>「（与此同时1235678也能同时接收到这个信号」<br>「总之就是像并联小灯泡那样的把所有的电脑都接在了同一根线上」<br>「这样一台电脑发出信号的时候任何其他的电脑都能收得到」<br>「（但是两台电脑不能同时发出信号，否则信号会被干扰（极性相同，短路倒不至于，但是传输的信号就废掉了）」<br>「这点很关键」<br>「此时的电脑之间是不能同时发送信息的」<br>「每次只能有一个人说话」<br>「网络中不可能存在多个人同时说话的情况」<br>「刚刚是用了一根特制的线」<br>「将所有的电脑连在了同一根线上」<br>「那这样的话每次都手工做一根线太烦了」<br>「所以就发明出了hub（做一个有好多网线插口的小盒子，这些网线插口连在同一根线上，互相导通）」<br>「只要用正常的网线把电脑连在hub上就可以了」<br>「所以这时候遇到了一个问题」<br>「一次只能有一个人说话」<br>「如果连了64个机器」<br>「那么每台机器只能有1/64的时间可以说话」<br>「这是坏文明」<br>「所以人们发明出了交换机」<br>「交换机拥有一个芯片」<br>「里面记录了每个人的MAC地址」<br>「每个人在说话时，都会加上目标计算机的物理地址」<br>「然后交换机拿到这封信后，会开始检索自身的数据库：这个物理地址对应的是这台交换机的几号端口」<br>「然后交换机会将这封信转发给相应的端口」<br>「交换机可以同时处理很多封信」<br>「所以交换机上的所有设备可以同时说话」<br>「同一网段下的设备接在交换机上」<br>「路由器将子网接入更大的父网中」<br>「路由器内自带一个交换机」<br>「路由器的作用是把小树连上大树」<br>「小树下面分叉的任务是交给路由器中的交换机功能来完成的」<br>「（可以集成在同一芯片上」<br>「在交换机出现时」<br>「计算机之间都还只需要用物理地址来标记目的地」<br>「（因为交换机里的“数据库”记着所有连在上面的设备的物理地址」<br>「当时人们的需求也仅限于同一个交换机下的设备互相连接罢了」<br>「但是后来逐渐出现了新的需求：」<br>「不同的电脑组之间 需要连接起来」<br>「比如说一个公司的某台大交换机下的50台设备需要有访问另一个公司的某台交换机下的50台设备的渠道」<br>「由于交换机只负责收信，看地址，送信」<br>「因此交换机本质上需要把所有的信头都看一遍」<br>「另外 交换机不分层」<br>「交换机内的所有设备之间都是互相透明的」<br>「即使用另一台交换机连在两台交换机上也是如此」<br>「而且对于交换机来说」<br>「每一封信都是需要被重新投递的」<br>「所以此时如果要将成千上万的不同电脑连接起来的话，交换机要忙死的」<br>「（在这种情况下最大的那台交换机就得记成千上万个地址，搜索的时候还必须瞬间搜索完成，这几乎是不可能的」<br>「（对于当时的设备而言」<br>「所以产生了<strong>网段</strong>的划分」<br>「通过路由器，将路由器下面的设备划分在一个较低级的网段，将路由器上面的设备划分在一个较高级的网段」<br>「这样的话对于再上层的设备而言，就只有少数的几个路由器连在其上，使运算量一下子低了许多数量级」<br>「（此处忽略了网桥的兴衰史」<br>「此时遇到一个问题」<br>「该怎么访问到一个与你不在同一层级上的设备」<br>「如果还用物理地址的话 就意味着上层设备又得再次把下层设备的所有地址都给记住了 就偏离初心了」<br>「所以此时出现了ip地址」<br>「（此处省略了TCP协议，以及ip地址的前几代演化史」<br>「ip地址的作用之一是 定义了每一台设备的不同层级」<br>「ip地址是和端口号协同工作的」<br>「以下内容已经经过了大跃迁，跳过了常识性的部分」<br>「对于本地局域网而言，定义中的网段有：<br><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>10.*.*.*<br>172.16~31.*.*<br>192.168.*.*</p>            <i class="fa fa-quote-right"></i>          </blockquote>」<br>「任何一台电脑，看到这样的ip，根据定义，都可知这是本地局域网内的ip地址」<br>「除此之外的ip被认为是公网ip，也就是因特网上的ip」<br>「（刚刚说的除了那些本地ip以外还有一些保留的ip，因为对此处用处不大所以先忽略掉了<br><img src="/2020/03/08/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82-%E7%BD%91%E7%BB%9C-0x00/1.jpg" class="">」<br>「这是保留ip的列表，除了这些ip以外都是公网ip」<br>「然后比如说你的电脑在本地的ip是192.168.1.5（举例）」<br>「那么你的路由器的ip便应该是192.168.1.1」<br>「（网关」<br>「如果要访问一台为192.168.1.7的电脑，那么路由器明白192.168.1.7是本地地址，因此不会访问外网的设备」<br>「但是如果访问一台ip地址为59.78.13.84的电脑」<br>「那么路由器就知道这台电脑不归自己管，因此要把这封信送到上级的路由器那里」<br>「对于一个路由器而言」<br>「它永远有两个ip地址」<br>「一个ip地址针对上层网络，一个ip地址针对下层网络」<br>「路由器在192.168.1.*网段内可以有一个自己的ip地址，目的是和192.168.1.1交流」<br>「路由器在192.168.110.*内也有一个自己的ip地址，目的是和192.168.110.*内的设备交流」<br>「然后对电脑而言」<br>「192.168.110.*都是可见的」<br>「与此同时」<br>「对电脑而言」<br>「192.168.1.*也都是可见的」<br>「但是如果存在一台设备，接在光猫上，ip地址为192.168.1.3」<br>「那么对于192.168.1.3这台设备而言，192.168.1.*都是可见的，但是192.168.110.*都是不可见的」<br>「一般来说」<br>「如果192.168.1.3要与192.168.110.101互相连接」<br>「连接不可能由192.168.1.3主动发起（因为192.168.110.101对其是不可见的，它只能看到有一台路由器存在，不知道路由器下面有哪些东西）」<br>「此时连接由192.168.110.101主动发起」<br>「对于一个设备而言」<br>「它上级的设备全部是可见的」<br>「（如果没有防火墙的话」<br>「实际情况中会存在各种各样的防火墙 所以仅仅是按需可见的」<br>「所以说」<br>「我在学校里的时候」<br>「我会选择直接将电脑连在交换机上」<br>「而不是连接在路由器上」<br>「我的路由器的上级ip是59.78.13.237，下级ip是10.0.0.1」<br>「这样我如果把台式机连接在与路由器同级的交换机上，那么就拥有了59.78.13.84这个公网ip」<br>「此时对于ip的网段而言，我是处于最顶层的」<br>「所以我就可以直接用台式机开服务器了」<br>「（虽然学校并不允许」</p></blockquote>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;0x01-绪论&quot;&gt;&lt;a href=&quot;#0x01-绪论&quot; class=&quot;headerlink&quot; title=&quot;0x01 - 绪论&quot;&gt;&lt;/a&gt;0x01 - 绪论&lt;/h1&gt;&lt;p&gt;我，因为水课，成为了一个网络白痴。隔壁茶铺的老板于心不忍，拯救了我。【这个时候是不是要说一句：啊，被治愈了（笑】&lt;/p&gt;
&lt;h1 id=&quot;0x02-上课&quot;&gt;&lt;a href=&quot;#0x02-上课&quot; class=&quot;headerlink&quot; title=&quot;0x02 - 上课&quot;&gt;&lt;/a&gt;0x02 - 上课&lt;/h1&gt;&lt;blockquote&gt;
&lt;p&gt;「首先 计算机之间想要交流」&lt;br&gt;「在19*0年代」&lt;br&gt;「那时候还没有网络」&lt;br&gt;「此时科学家开始拿一根电线把两台电脑连了起来」&lt;br&gt;「然后这两台电脑就能通过这根线开始交流了」&lt;br&gt;「然后 他们想要让第三台电脑也连进来」&lt;br&gt;「最初的方案是，把3号电脑连在2号电脑上</summary>
    
    
    
    <category term="面包人小课堂" scheme="http://gyrojeff.moe/categories/%E9%9D%A2%E5%8C%85%E4%BA%BA%E5%B0%8F%E8%AF%BE%E5%A0%82/"/>
    
    
    <category term="网络" scheme="http://gyrojeff.moe/tags/%E7%BD%91%E7%BB%9C/"/>
    
    <category term="IP地址" scheme="http://gyrojeff.moe/tags/IP%E5%9C%B0%E5%9D%80/"/>
    
  </entry>
  
  <entry>
    <title>Hexo建站指南</title>
    <link href="http://gyrojeff.moe/2020/03/08/Hexo%E5%BB%BA%E7%AB%99%E6%8C%87%E5%8D%97/"/>
    <id>http://gyrojeff.moe/2020/03/08/Hexo%E5%BB%BA%E7%AB%99%E6%8C%87%E5%8D%97/</id>
    <published>2020-03-08T11:30:45.000Z</published>
    <updated>2020-09-14T23:57:42.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="奶茶铺开张"><a href="#奶茶铺开张" class="headerlink" title="奶茶铺开张"></a>奶茶铺开张</h1><h2 id="创建GitHub项目"><a href="#创建GitHub项目" class="headerlink" title="创建GitHub项目"></a>创建GitHub项目</h2><p>到自己的GitHub，新建一个repository，名为<code>username.github.io</code>，其中username是用户名。</p><h2 id="安装Hexo"><a href="#安装Hexo" class="headerlink" title="安装Hexo"></a>安装Hexo</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g hexo-cli</span><br></pre></td></tr></table></figure><p>Once Hexo is installed, run the following commands to initialize Hexo in the target <code>&lt;folder&gt;</code>.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ hexo init &lt;folder&gt;</span><br><span class="line">$ <span class="built_in">cd</span> &lt;folder&gt;</span><br><span class="line">$ npm install</span><br></pre></td></tr></table></figure><p>初始化完成之后，文件目录：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">.</span><br><span class="line">├── _config.yml</span><br><span class="line">├── package.json</span><br><span class="line">├── scaffolds</span><br><span class="line">├── <span class="built_in">source</span></span><br><span class="line">|   ├── _drafts</span><br><span class="line">|   └── _posts</span><br><span class="line">└── themes</span><br></pre></td></tr></table></figure><a id="more"></a><h2 id="配置-config-yml"><a href="#配置-config-yml" class="headerlink" title="配置_config.yml"></a>配置_config.yml</h2><p>我的配置：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Hexo Configuration</span></span><br><span class="line"><span class="comment">## Docs: https://hexo.io/docs/configuration.html</span></span><br><span class="line"><span class="comment">## Source: https://github.com/hexojs/hexo/</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Site</span></span><br><span class="line"><span class="attr">title:</span> <span class="string">gyro永不抽风</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">ああああああああああああああああおおおおおおおおおおおおおおおお</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">更新？咕咕咕...</span></span><br><span class="line"><span class="attr">keywords:</span> <span class="string">蒟蒻</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">Haoyun</span> <span class="string">Qin</span></span><br><span class="line"><span class="attr">language:</span> <span class="string">zh-CN</span></span><br><span class="line"><span class="attr">timezone:</span> <span class="string">Asia/Shanghai</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># URL</span></span><br><span class="line"><span class="comment">## If your site is put in a subdirectory, set url as &#x27;http://yoursite.com/child&#x27; and root as &#x27;/child/&#x27;</span></span><br><span class="line"><span class="attr">url:</span> <span class="string">你自己的域名</span></span><br><span class="line"><span class="attr">root:</span> <span class="string">/</span></span><br><span class="line"><span class="attr">permalink:</span> <span class="string">:year/:month/:day/:title/</span></span><br><span class="line"><span class="attr">permalink_defaults:</span></span><br><span class="line"><span class="attr">pretty_urls:</span></span><br><span class="line">  <span class="attr">trailing_index:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing &#x27;index.html&#x27; from permalinks</span></span><br><span class="line">  <span class="attr">trailing_html:</span> <span class="literal">true</span> <span class="comment"># Set to false to remove trailing &#x27;.html&#x27; from permalinks</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Directory</span></span><br><span class="line"><span class="attr">source_dir:</span> <span class="string">source</span></span><br><span class="line"><span class="attr">public_dir:</span> <span class="string">public</span></span><br><span class="line"><span class="attr">tag_dir:</span> <span class="string">tags</span></span><br><span class="line"><span class="attr">archive_dir:</span> <span class="string">archives</span></span><br><span class="line"><span class="attr">category_dir:</span> <span class="string">categories</span></span><br><span class="line"><span class="attr">code_dir:</span> <span class="string">downloads/code</span></span><br><span class="line"><span class="attr">i18n_dir:</span> <span class="string">:lang</span></span><br><span class="line"><span class="attr">skip_render:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Writing</span></span><br><span class="line"><span class="attr">new_post_name:</span> <span class="string">:year:month/:title.md</span> <span class="comment"># File name of new posts</span></span><br><span class="line"><span class="attr">default_layout:</span> <span class="string">post</span></span><br><span class="line"><span class="attr">titlecase:</span> <span class="literal">false</span> <span class="comment"># Transform title into titlecase</span></span><br><span class="line"><span class="attr">external_link:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span> <span class="comment"># Open external links in new tab</span></span><br><span class="line">  <span class="attr">field:</span> <span class="string">site</span> <span class="comment"># Apply to the whole site</span></span><br><span class="line">  <span class="attr">exclude:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line"><span class="attr">filename_case:</span> <span class="number">0</span></span><br><span class="line"><span class="attr">render_drafts:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">post_asset_folder:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">relative_link:</span> <span class="literal">false</span></span><br><span class="line"><span class="attr">future:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">highlight:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">line_number:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto_detect:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">tab_replace:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">  <span class="attr">wrap:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">hljs:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Home page setting</span></span><br><span class="line"><span class="comment"># path: Root path for your blogs index page. (default = &#x27;&#x27;)</span></span><br><span class="line"><span class="comment"># per_page: Posts displayed per page. (0 = disable pagination)</span></span><br><span class="line"><span class="comment"># order_by: Posts order. (Order by date descending by default)</span></span><br><span class="line"><span class="attr">index_generator:</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">&#x27;&#x27;</span></span><br><span class="line">  <span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line">  <span class="attr">order_by:</span> <span class="string">-date</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Category &amp; Tag</span></span><br><span class="line"><span class="attr">default_category:</span> <span class="string">uncategorized</span></span><br><span class="line"><span class="attr">category_map:</span></span><br><span class="line"><span class="attr">tag_map:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Metadata elements</span></span><br><span class="line"><span class="comment">## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta</span></span><br><span class="line"><span class="attr">meta_generator:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Date / Time format</span></span><br><span class="line"><span class="comment">## Hexo uses Moment.js to parse and display date</span></span><br><span class="line"><span class="comment">## You can customize the date format as defined in</span></span><br><span class="line"><span class="comment">## http://momentjs.com/docs/#/displaying/format/</span></span><br><span class="line"><span class="attr">date_format:</span> <span class="string">YYYY-MM-DD</span></span><br><span class="line"><span class="attr">time_format:</span> <span class="string">HH:mm:ss</span></span><br><span class="line"><span class="comment">## Use post&#x27;s date for updated date unless set in front-matter</span></span><br><span class="line"><span class="attr">use_date_for_updated:</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Pagination</span></span><br><span class="line"><span class="comment">## Set per_page to 0 to disable pagination</span></span><br><span class="line"><span class="attr">per_page:</span> <span class="number">10</span></span><br><span class="line"><span class="attr">pagination_dir:</span> <span class="string">page</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Include / Exclude file(s)</span></span><br><span class="line"><span class="comment">## include:/exclude: options only apply to the &#x27;source/&#x27; folder</span></span><br><span class="line"><span class="attr">include:</span></span><br><span class="line"><span class="attr">exclude:</span></span><br><span class="line"><span class="attr">ignore:</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Extensions</span></span><br><span class="line"><span class="comment">## Plugins: https://hexo.io/plugins/</span></span><br><span class="line"><span class="comment">## Themes: https://hexo.io/themes/</span></span><br><span class="line"><span class="attr">theme:</span> <span class="string">next</span></span><br><span class="line"></span><br><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line">  <span class="attr">symbols:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">time:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">total_symbols:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">total_time:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Deployment</span></span><br><span class="line"><span class="comment">## Docs: https://hexo.io/docs/deployment.html</span></span><br><span class="line"><span class="attr">deploy:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">git</span></span><br><span class="line">  <span class="attr">repo:</span> <span class="string">your</span> <span class="string">repository</span> <span class="string">link</span></span><br><span class="line">  <span class="attr">branch:</span> <span class="string">master</span></span><br></pre></td></tr></table></figure><h2 id="安装Next"><a href="#安装Next" class="headerlink" title="安装Next"></a>安装Next</h2><p>在blog的根目录下</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> https://github.com/theme-next/hexo-theme-next themes/next</span><br></pre></td></tr></table></figure><h2 id="添加访客量显示"><a href="#添加访客量显示" class="headerlink" title="添加访客量显示"></a>添加访客量显示</h2><p>在<code>themes/next/layout/_partials/footer.swig</code>末尾添加：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">&quot;powered-by&quot;</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">script</span> <span class="attr">async</span> <span class="attr">src</span>=<span class="string">&quot;//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">i</span> <span class="attr">class</span>=<span class="string">&quot;fa fa-user-md&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">i</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">span</span> <span class="attr">id</span>=<span class="string">&quot;busuanzi_container_site_uv&quot;</span>&gt;</span></span><br><span class="line">        本站访客数:<span class="tag">&lt;<span class="name">span</span> <span class="attr">id</span>=<span class="string">&quot;busuanzi_value_site_uv&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">span</span> <span class="attr">class</span>=<span class="string">&quot;post-meta-divider&quot;</span>&gt;</span>|<span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">span</span> <span class="attr">id</span>=<span class="string">&quot;busuanzi_container_site_pv&quot;</span>&gt;</span></span><br><span class="line">        本站访问量<span class="tag">&lt;<span class="name">span</span> <span class="attr">id</span>=<span class="string">&quot;busuanzi_value_site_pv&quot;</span>&gt;</span><span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">span</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="自定义样式"><a href="#自定义样式" class="headerlink" title="自定义样式"></a>自定义样式</h2><p>在next的<code>_config.yml</code>当中解出如下两行的注释</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Define custom file paths.</span></span><br><span class="line"><span class="comment"># Create your custom files in site directory `source/_data` and uncomment needed files below.</span></span><br><span class="line"><span class="attr">custom_file_path:</span></span><br><span class="line">    <span class="attr">head:</span> <span class="string">source/_data/head.swig</span></span><br><span class="line">    <span class="comment">#header: source/_data/header.swig</span></span><br><span class="line">    <span class="comment">#sidebar: source/_data/sidebar.swig</span></span><br><span class="line">    <span class="comment">#postMeta: source/_data/post-meta.swig</span></span><br><span class="line">    <span class="comment">#postBodyEnd: source/_data/post-body-end.swig</span></span><br><span class="line">    <span class="comment">#footer: source/_data/footer.swig</span></span><br><span class="line">    <span class="comment">#bodyEnd: source/_data/body-end.swig</span></span><br><span class="line">    <span class="comment">#variable: source/_data/variables.styl</span></span><br><span class="line">    <span class="comment">#mixin: source/_data/mixins.styl</span></span><br><span class="line">    <span class="attr">style:</span> <span class="string">source/_data/styles.styl</span></span><br></pre></td></tr></table></figure><p>并在<code>source</code>下新建文件夹<code>_data</code>，在<code>_data</code>当中新建文件<code>head.swig</code>, <code>styles.styl</code>。</p><h2 id="更改页面下方年份和copyright之间的图标"><a href="#更改页面下方年份和copyright之间的图标" class="headerlink" title="更改页面下方年份和copyright之间的图标"></a>更改页面下方年份和copyright之间的图标</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Icon between year and copyright info.</span></span><br><span class="line"><span class="attr">icon:</span></span><br><span class="line">  <span class="comment"># Icon name in Font Awesome. See: https://fontawesome.com/v4.7.0/icons/</span></span><br><span class="line">  <span class="comment"># `heart` is recommended with animation in red (#ff0000).</span></span><br><span class="line">  <span class="attr">name:</span> <span class="string">heart</span></span><br><span class="line">  <span class="comment"># If you want to animate the icon, set it to true.</span></span><br><span class="line">  <span class="attr">animated:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Change the color of icon, using Hex Code.</span></span><br><span class="line">  <span class="attr">color:</span> <span class="string">&quot;#FF3348&quot;</span></span><br></pre></td></tr></table></figure><h2 id="在文章最后与侧边栏附上版权声明"><a href="#在文章最后与侧边栏附上版权声明" class="headerlink" title="在文章最后与侧边栏附上版权声明"></a>在文章最后与侧边栏附上版权声明</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Creative Commons 4.0 International License.</span></span><br><span class="line"><span class="comment"># See: https://creativecommons.org/share-your-work/licensing-types-examples</span></span><br><span class="line"><span class="comment"># Available values of license: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero</span></span><br><span class="line"><span class="comment"># You can set a language value if you prefer a translated version of CC license, e.g. deed.zh</span></span><br><span class="line"><span class="comment"># CC licenses are available in 39 languages, you can find the specific and correct abbreviation you need on https://creativecommons.org</span></span><br><span class="line"><span class="attr">creative_commons:</span></span><br><span class="line">  <span class="attr">license:</span> <span class="string">by-nc-sa</span></span><br><span class="line">  <span class="attr">sidebar:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">post:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">zh-cn</span></span><br></pre></td></tr></table></figure><h2 id="在文章最后加入自定义版权声明"><a href="#在文章最后加入自定义版权声明" class="headerlink" title="在文章最后加入自定义版权声明"></a>在文章最后加入自定义版权声明</h2><p>在<code>themes/next/layout/_macro/</code>新建文件：<code>my-copyright.swig</code></p><p>写入：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line">&lt;style&gt;</span><br><span class="line">.my_post_copyright &#123;</span><br><span class="line">  width: 85%;</span><br><span class="line">  max-width: 45em;</span><br><span class="line">  margin: 2.8em auto 0;</span><br><span class="line">  padding: 0.5em 1.0em;</span><br><span class="line">  border: 1px solid #d3d3d3;</span><br><span class="line">  font-size: 0.93rem;</span><br><span class="line">  line-height: 1.6em;</span><br><span class="line">  word-break: break-all;</span><br><span class="line">  background: rgba(255,255,255,0.4);</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright p&#123;margin:0;&#125;</span><br><span class="line">.my_post_copyright span &#123;</span><br><span class="line">  display: inline-block;</span><br><span class="line">  width: 5.2em;</span><br><span class="line">  color: #b5b5b5;</span><br><span class="line">  font-weight: bold;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright .raw &#123;</span><br><span class="line">  margin-left: 1em;</span><br><span class="line">  width: 5em;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright a &#123;</span><br><span class="line">  color: #a3d2a3;</span><br><span class="line">  border-bottom:0;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright a:hover &#123;</span><br><span class="line">  color: #a3d2a3;</span><br><span class="line">  text-decoration: underline;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright:hover .fa-clipboard &#123;</span><br><span class="line">  color: #000;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright .post-url:hover &#123;</span><br><span class="line">  font-weight: normal;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright .copy-path &#123;</span><br><span class="line">  margin-left: 1em;</span><br><span class="line">  width: 1em;</span><br><span class="line">  +mobile()&#123;display:none;&#125;</span><br><span class="line">&#125;</span><br><span class="line">.my_post_copyright .copy-path:hover &#123;</span><br><span class="line">  color: #808080;</span><br><span class="line">  cursor: pointer;</span><br><span class="line">&#125;</span><br><span class="line">&lt;&#x2F;style&gt;</span><br><span class="line">&lt;div class&#x3D;&quot;my_post_copyright&quot;&gt;</span><br><span class="line">  &lt;script src&#x3D;&quot;&#x2F;&#x2F;cdn.bootcss.com&#x2F;clipboard.js&#x2F;1.5.10&#x2F;clipboard.min.js&quot;&gt;&lt;&#x2F;script&gt;</span><br><span class="line">  </span><br><span class="line">  &lt;!-- JS库 sweetalert 可修改路径 --&gt;</span><br><span class="line">  &lt;script src&#x3D;&quot;https:&#x2F;&#x2F;cdn.bootcss.com&#x2F;jquery&#x2F;2.0.0&#x2F;jquery.min.js&quot;&gt;&lt;&#x2F;script&gt;</span><br><span class="line">  &lt;script src&#x3D;&quot;https:&#x2F;&#x2F;unpkg.com&#x2F;sweetalert&#x2F;dist&#x2F;sweetalert.min.js&quot;&gt;&lt;&#x2F;script&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;本文标题:&lt;&#x2F;span&gt;&lt;a href&#x3D;&quot;&#123;&#123; url_for(page.path) &#125;&#125;&quot;&gt;&#123;&#123; page.title &#125;&#125;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;文章作者:&lt;&#x2F;span&gt;&lt;a href&#x3D;&quot;&#x2F;&quot; title&#x3D;&quot;访问 &#123;&#123; theme.author &#125;&#125; 的个人博客&quot;&gt;&#123;&#123; theme.author &#125;&#125;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;发布时间:&lt;&#x2F;span&gt;&#123;&#123; page.date.format(&quot;YYYY年MM月DD日 - HH:MM&quot;) &#125;&#125;&lt;&#x2F;p&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;最后更新:&lt;&#x2F;span&gt;&#123;&#123; page.updated.format(&quot;YYYY年MM月DD日 - HH:MM&quot;) &#125;&#125;&lt;&#x2F;p&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;原始链接:&lt;&#x2F;span&gt;&lt;a href&#x3D;&quot;&#123;&#123; url_for(page.path) &#125;&#125;&quot; title&#x3D;&quot;&#123;&#123; page.title &#125;&#125;&quot;&gt;&#123;&#123; page.permalink &#125;&#125;&lt;&#x2F;a&gt;</span><br><span class="line">    &lt;span class&#x3D;&quot;copy-path&quot;  title&#x3D;&quot;点击复制文章链接&quot;&gt;&lt;i class&#x3D;&quot;fa fa-clipboard&quot; data-clipboard-text&#x3D;&quot;&#123;&#123; page.permalink &#125;&#125;&quot;  aria-label&#x3D;&quot;复制成功！&quot;&gt;&lt;&#x2F;i&gt;&lt;&#x2F;span&gt;</span><br><span class="line">  &lt;&#x2F;p&gt;</span><br><span class="line">  &lt;p&gt;&lt;span&gt;许可协议:&lt;&#x2F;span&gt;&lt;i class&#x3D;&quot;fa fa-creative-commons&quot;&gt;&lt;&#x2F;i&gt; &lt;a rel&#x3D;&quot;license&quot; href&#x3D;&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-nc-sa&#x2F;4.0&#x2F;deed.zh target&#x3D;&quot;_blank&quot; title&#x3D;&quot;Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-SA 4.0)&quot;&gt;署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)&lt;&#x2F;a&gt; 转载请保留原文链接及作者！&lt;&#x2F;p&gt;  </span><br><span class="line">&lt;&#x2F;div&gt;</span><br><span class="line">&lt;script&gt; </span><br><span class="line">    var clipboard &#x3D; new Clipboard(&#39;.fa-clipboard&#39;);</span><br><span class="line">  $(&quot;.fa-clipboard&quot;).click(function()&#123;</span><br><span class="line">      clipboard.on(&#39;success&#39;, function()&#123;</span><br><span class="line">        swal(&#123;   </span><br><span class="line">          title: &quot;&quot;,   </span><br><span class="line">          text: &#39;复制成功&#39;,</span><br><span class="line">          icon: &quot;success&quot;, </span><br><span class="line">          showConfirmButton: true</span><br><span class="line">          &#125;);</span><br><span class="line">    &#125;);</span><br><span class="line">    &#125;);  </span><br><span class="line">&lt;&#x2F;script&gt;</span><br></pre></td></tr></table></figure><p>打开<code>themes/next/layout/_macro/post.swig</code>，在</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&#123;%- if theme.related_posts.enable and (theme.related_posts.display_in_home or not is_index) %&#125;</span><br><span class="line">  &#123;&#123; partial(&#39;_partials&#x2F;post&#x2F;post-related.swig&#39;) &#125;&#125;</span><br><span class="line">&#123;%- endif %&#125;</span><br></pre></td></tr></table></figure><p>后添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;% if not is_index %&#125;</span><br><span class="line">  &#123;% include &#39;my-copyright.swig&#39; %&#125;</span><br><span class="line">&#123;% endif %&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="选择Gemini主题"><a href="#选择Gemini主题" class="headerlink" title="选择Gemini主题"></a>选择Gemini主题</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Schemes</span></span><br><span class="line"><span class="comment">#scheme: Muse</span></span><br><span class="line"><span class="comment">#scheme: Mist</span></span><br><span class="line"><span class="comment">#scheme: Pisces</span></span><br><span class="line"><span class="attr">scheme:</span> <span class="string">Gemini</span></span><br></pre></td></tr></table></figure><h2 id="适配系统的暗色模式"><a href="#适配系统的暗色模式" class="headerlink" title="适配系统的暗色模式"></a>适配系统的暗色模式</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Dark Mode</span></span><br><span class="line"><span class="attr">darkmode:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="设置页面的背景图片"><a href="#设置页面的背景图片" class="headerlink" title="设置页面的背景图片"></a>设置页面的背景图片</h2><p>打卡前面创建的<code>styles.styl</code>，添加：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">// background</span><br><span class="line"></span><br><span class="line">body &#123;</span><br><span class="line">    background-image:url(../images/2233.jpg);</span><br><span class="line">    height:100%;</span><br><span class="line">    width:100%;</span><br><span class="line">    background-repeat:repeat-x;</span><br><span class="line">    background-attachment:fixed;</span><br><span class="line">    background-size:cover;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这里的<code>2233.jpg</code>是图片名称，图片存放在<code>sources/images</code>当中（文件夹没有需要新建）</p><h2 id="对页面的透明度进行设置"><a href="#对页面的透明度进行设置" class="headerlink" title="对页面的透明度进行设置"></a>对页面的透明度进行设置</h2><p>注：<code>opacity</code>调整的是整个元素的透明度，设置<code>opacity</code>会将字也变得透明<br><code>background</code>调整的则是元素的背景，可以通过<code>rgba</code>中的<code>a</code>来设置透明度</p><p>在<code>styles.styl</code>中加入：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">// page-opacity</span><br><span class="line"></span><br><span class="line">.content-wrap &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.content &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.posts-expand &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.post-block &#123;</span><br><span class="line">    background: rgba(255,255,255,0.6);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// ------ post end ------ </span><br><span class="line"></span><br><span class="line">.sidebar &#123;</span><br><span class="line">    opacity: 0.8;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.header-inner &#123;</span><br><span class="line">    background: rgba(255,255,255,0.6);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.popup &#123;</span><br><span class="line">    opacity: 0.8;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>如果有不满意的话，可以自己用浏览器的检查元素来确定元素的class或者id，在这个文件里加入自己样式。</p><h2 id="对默认的暗色模式进行调整"><a href="#对默认的暗色模式进行调整" class="headerlink" title="对默认的暗色模式进行调整"></a>对默认的暗色模式进行调整</h2><p>打开前面创建的<code>styles.styl</code>文件，将<code>CSS</code>样式添加在：<br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">@media (prefers-color-scheme: dark) &#123;</span><br><span class="line">    // 需要添加的样式</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>这里添加的样式如果和前面添加的样式重复，则会在暗色模式中覆盖，无需担心。</p><p>以下是我的配置方案：</p><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br></pre></td><td class="code"><pre><span class="line">// background</span><br><span class="line"></span><br><span class="line">body &#123;</span><br><span class="line">    background-image:url(../images/2233.jpg);</span><br><span class="line">    height:100%;</span><br><span class="line">    width:100%;</span><br><span class="line">    background-repeat:repeat-x;</span><br><span class="line">    background-attachment:fixed;</span><br><span class="line">    background-size:cover;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// page-opacity</span><br><span class="line"></span><br><span class="line">.content-wrap &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.content &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.posts-expand &#123;</span><br><span class="line">    background: rgba(255,255,255,0);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.post-block &#123;</span><br><span class="line">    background: rgba(255,255,255,0.8);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">// ------ post end ------ </span><br><span class="line"></span><br><span class="line">.sidebar &#123;</span><br><span class="line">    opacity: 0.8;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.header-inner &#123;</span><br><span class="line">    background: rgba(255,255,255,0.8);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.popup &#123;</span><br><span class="line">    opacity: 0.8;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.site-brand-container &#123;</span><br><span class="line">    background: #E8704E;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.github-corner svg &#123;</span><br><span class="line">    fill: #E8704E;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">.headband &#123;</span><br><span class="line">    background: #E8704E;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">@media (prefers-color-scheme: dark) &#123;</span><br><span class="line">    $text-color = #cccccc;</span><br><span class="line">    $link-color = #cccccc;</span><br><span class="line"></span><br><span class="line">    body &#123;</span><br><span class="line">        background-image:url(../images/pixiv-1.jpg);</span><br><span class="line">        height:100%;</span><br><span class="line">        width:100%;</span><br><span class="line">        background-repeat:repeat-x;</span><br><span class="line">        background-attachment:fixed;</span><br><span class="line">        background-size:cover;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    blockquote &#123;</span><br><span class="line">        color: #cccccc;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    .header-inner &#123;</span><br><span class="line">        background: rgba(0,0,0,0.8);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    // page-opacity</span><br><span class="line">    .content-wrap &#123;</span><br><span class="line">        background: rgba(255,255,255,0);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .content &#123;</span><br><span class="line">        background: rgba(255,255,255,0);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .posts-expand &#123;</span><br><span class="line">        background: rgba(255,255,255,0);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .post-block &#123;</span><br><span class="line">        background: rgba(0,0,0,0.8);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .sidebar &#123;</span><br><span class="line">        opacity: 0.9;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    img &#123;</span><br><span class="line">        opacity: 1;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="为Menu添加tag栏和categories栏"><a href="#为Menu添加tag栏和categories栏" class="headerlink" title="为Menu添加tag栏和categories栏"></a>为Menu添加tag栏和categories栏</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Usage: `Key: /link/ || icon`</span></span><br><span class="line"><span class="comment"># Key is the name of menu item. If the translation for this item is available, the translated text will be loaded, otherwise the Key name will be used. Key is case-senstive.</span></span><br><span class="line"><span class="comment"># Value before `||` delimiter is the target link, value after `||` delimiter is the name of Font Awesome icon.</span></span><br><span class="line"><span class="comment"># When running the site in a subdirectory (e.g. yoursite.com/blog), remove the leading slash from link value (/archives -&gt; archives).</span></span><br><span class="line"><span class="comment"># External url should start with http:// or https://</span></span><br><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">home</span></span><br><span class="line">  <span class="comment">#about: /about/ || user</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">tags</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="string">/categories/</span> <span class="string">||</span> <span class="string">th</span></span><br><span class="line">  <span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">archive</span></span><br><span class="line">  <span class="comment">#schedule: /schedule/ || calendar</span></span><br><span class="line">  <span class="comment">#sitemap: /sitemap.xml || sitemap</span></span><br><span class="line">  <span class="comment">#commonweal: /404/ || heartbeat</span></span><br></pre></td></tr></table></figure><p>并且需要新建文件，命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new page tags</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new page categories</span><br></pre></td></tr></table></figure><p>接下来分别打开这两个文件，分别在最上面两个分割线处添加：<br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">type: &quot;tags&quot;</span><br></pre></td></tr></table></figure><br><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">type: &quot;categories&quot;</span><br></pre></td></tr></table></figure></p><h2 id="为侧边栏添加自定义的栏目"><a href="#为侧边栏添加自定义的栏目" class="headerlink" title="为侧边栏添加自定义的栏目"></a>为侧边栏添加自定义的栏目</h2><p>和前面新建tags和categories的方法差不多，假设你想添加的栏目为done，运行如下命令：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo new page <span class="keyword">done</span></span><br></pre></td></tr></table></figure><p>然后到<code>_config.yml</code>中添加为：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Usage: `Key: /link/ || icon`</span></span><br><span class="line"><span class="comment"># Key is the name of menu item. If the translation for this item is available, the translated text will be loaded, otherwise the Key name will be used. Key is case-senstive.</span></span><br><span class="line"><span class="comment"># Value before `||` delimiter is the target link, value after `||` delimiter is the name of Font Awesome icon.</span></span><br><span class="line"><span class="comment"># When running the site in a subdirectory (e.g. yoursite.com/blog), remove the leading slash from link value (/archives -&gt; archives).</span></span><br><span class="line"><span class="comment"># External url should start with http:// or https://</span></span><br><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">home:</span> <span class="string">/</span> <span class="string">||</span> <span class="string">home</span></span><br><span class="line">  <span class="comment">#about: /about/ || user</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="string">/tags/</span> <span class="string">||</span> <span class="string">tags</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="string">/categories/</span> <span class="string">||</span> <span class="string">th</span></span><br><span class="line">  <span class="attr">archives:</span> <span class="string">/archives/</span> <span class="string">||</span> <span class="string">archive</span></span><br><span class="line">  <span class="comment">#schedule: /schedule/ || calendar</span></span><br><span class="line">  <span class="comment">#sitemap: /sitemap.xml || sitemap</span></span><br><span class="line">  <span class="comment">#commonweal: /404/ || heartbeat</span></span><br><span class="line">  <span class="attr">done:</span> <span class="string">/done/</span> <span class="string">||</span> <span class="string">calendar</span></span><br></pre></td></tr></table></figure><p>其中/done/是站内网址的索引，calendar是选择的图标，done是栏目命名</p><p>为了显示出正确的中文，我们需要去翻译文件中添加done的中文</p><p>打开<code>themes/next/languages/zh-CN.yml</code>，找到menu添加done：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">menu:</span></span><br><span class="line">  <span class="attr">home:</span> <span class="string">首页</span></span><br><span class="line">  <span class="attr">archives:</span> <span class="string">归档</span></span><br><span class="line">  <span class="attr">categories:</span> <span class="string">分类</span></span><br><span class="line">  <span class="attr">tags:</span> <span class="string">标签</span></span><br><span class="line">  <span class="attr">about:</span> <span class="string">关于</span></span><br><span class="line">  <span class="attr">search:</span> <span class="string">搜索</span></span><br><span class="line">  <span class="attr">schedule:</span> <span class="string">日程表</span></span><br><span class="line">  <span class="attr">sitemap:</span> <span class="string">站点地图</span></span><br><span class="line">  <span class="attr">commonweal:</span> <span class="string">公益</span> <span class="number">404</span></span><br><span class="line">  <span class="attr">done:</span> <span class="string">记录</span></span><br></pre></td></tr></table></figure><h2 id="开启侧边栏的数字提示"><a href="#开启侧边栏的数字提示" class="headerlink" title="开启侧边栏的数字提示"></a>开启侧边栏的数字提示</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Enable / Disable menu icons / item badges.</span></span><br><span class="line"><span class="attr">menu_settings:</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">badges:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="侧边栏放置位置"><a href="#侧边栏放置位置" class="headerlink" title="侧边栏放置位置"></a>侧边栏放置位置</h2><p>我这里设置的右边</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">sidebar:</span></span><br><span class="line">  <span class="comment"># Sidebar Position.</span></span><br><span class="line">  <span class="comment">#position: left</span></span><br><span class="line">  <span class="attr">position:</span> <span class="string">right</span></span><br></pre></td></tr></table></figure><h2 id="侧边栏头像设置"><a href="#侧边栏头像设置" class="headerlink" title="侧边栏头像设置"></a>侧边栏头像设置</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Sidebar Avatar</span></span><br><span class="line"><span class="attr">avatar:</span></span><br><span class="line">  <span class="comment"># Replace the default image and set the url here.</span></span><br><span class="line">  <span class="attr">url:</span> <span class="string">/images/avatar.JPG</span></span><br><span class="line">  <span class="comment"># If true, the avatar will be dispalyed in circle.</span></span><br><span class="line">  <span class="attr">rounded:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># If true, the avatar will be rotated with the cursor.</span></span><br><span class="line">  <span class="attr">rotated:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>其中avatar.JPG是图片名，图片文件放置在<code>source/images</code>下</p><h2 id="侧边栏添加社交网络账号"><a href="#侧边栏添加社交网络账号" class="headerlink" title="侧边栏添加社交网络账号"></a>侧边栏添加社交网络账号</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Social Links</span></span><br><span class="line"><span class="comment"># Usage: `Key: permalink || icon`</span></span><br><span class="line"><span class="comment"># Key is the link label showing to end users.</span></span><br><span class="line"><span class="comment"># Value before `||` delimiter is the target permalink, value after `||` delimiter is the name of Font Awesome icon.</span></span><br><span class="line"><span class="attr">social:</span></span><br><span class="line">  <span class="attr">GitHub:</span> <span class="string">https://github.com/JeffersonQin</span> <span class="string">||</span> <span class="string">github</span></span><br><span class="line">  <span class="attr">E-Mail:</span> <span class="string">mailto:1247006353@qq.com</span> <span class="string">||</span> <span class="string">envelope</span></span><br><span class="line">  <span class="attr">Weibo:</span> <span class="string">https://weibo.com/5981714994</span> <span class="string">||</span> <span class="string">weibo</span></span><br><span class="line">  <span class="string">洛谷:</span> <span class="string">https://www.luogu.com.cn/user/200035</span> <span class="string">||</span> </span><br><span class="line">  <span class="attr">bilibili:</span> <span class="string">https://space.bilibili.com/114418778</span> <span class="string">||</span> <span class="string">youtube-play</span></span><br><span class="line">  <span class="string">网易云音乐:</span> <span class="string">https://music.163.com/#/user/home?nickname=gyro%E6%B0%B8%E4%B8%8D%E6%8A%BD%E9%A3%8E</span> <span class="string">||</span> <span class="string">music</span></span><br><span class="line">  <span class="attr">QQ:</span> <span class="string">tencent://AddContact/?fromId=50&amp;fromSubId=1&amp;subcmd=all&amp;uin=1247006353</span> <span class="string">||</span> <span class="string">qq</span></span><br><span class="line">  <span class="comment">#Google: https://plus.google.com/yourname || google</span></span><br><span class="line">  <span class="comment">#Twitter: https://twitter.com/yourname || twitter</span></span><br><span class="line">  <span class="comment">#FB Page: https://www.facebook.com/yourname || facebook</span></span><br><span class="line">  <span class="comment">#StackOverflow: https://stackoverflow.com/yourname || stack-overflow</span></span><br><span class="line">  <span class="comment">#YouTube: https://youtube.com/yourname || youtube</span></span><br><span class="line">  <span class="comment">#Instagram: https://instagram.com/yourname || instagram</span></span><br><span class="line">  <span class="comment">#Skype: skype:yourname?call|chat || skype</span></span><br></pre></td></tr></table></figure><p>这当中的链接改成自己的链接，最后QQ中的<code>1247006353</code>改为自己的qq号即可。</p><h2 id="添加友链"><a href="#添加友链" class="headerlink" title="添加友链"></a>添加友链</h2><p>首先先加入：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Blog rolls</span></span><br><span class="line"><span class="attr">links_settings:</span></span><br><span class="line">  <span class="attr">icon:</span> <span class="string">coffee</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">奶茶铺的邻居(们)</span></span><br><span class="line">  <span class="comment"># Available values: block | inline</span></span><br><span class="line">  <span class="attr">layout:</span> <span class="string">block</span></span><br></pre></td></tr></table></figure><p>这里的title属性是你想要的标题，icon是标题旁边的图标</p><p>然后再加入友链，e.g.<br><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">links:</span></span><br><span class="line">  <span class="comment">#Title: http://yoursite.com</span></span><br><span class="line">  <span class="string">枫亚:</span> <span class="string">https://maplewithered.github.io/</span></span><br></pre></td></tr></table></figure></p><p>格式：<code>名称: 链接</code></p><h2 id="目录全展开"><a href="#目录全展开" class="headerlink" title="目录全展开"></a>目录全展开</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Table of Contents in the Sidebar</span></span><br><span class="line"><span class="comment"># Front-matter variable (unsupport wrap expand_all).</span></span><br><span class="line"><span class="attr">toc:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Automatically add list number to toc.</span></span><br><span class="line">  <span class="attr">number:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># If true, all words will placed on next lines if header width longer then sidebar width.</span></span><br><span class="line">  <span class="attr">wrap:</span> <span class="literal">false</span></span><br><span class="line">  <span class="comment"># If true, all level of TOC in a post will be displayed, rather than the activated part of it.</span></span><br><span class="line">  <span class="attr">expand_all:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Maximum heading depth of generated toc.</span></span><br><span class="line">  <span class="attr">max_depth:</span> <span class="number">6</span></span><br></pre></td></tr></table></figure><h2 id="首页文章简短显示"><a href="#首页文章简短显示" class="headerlink" title="首页文章简短显示"></a>首页文章简短显示</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Automatically excerpt description in homepage as preamble text.</span></span><br><span class="line"><span class="attr">excerpt_description:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Read more button</span></span><br><span class="line"><span class="comment"># If true, the read more button will be displayed in excerpt section.</span></span><br><span class="line"><span class="attr">read_more_btn:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>在文章中添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;!-- more --&gt;</span><br></pre></td></tr></table></figure><p>来分割，之后的内容将不在首页显示</p><h2 id="增加阅读时间显示"><a href="#增加阅读时间显示" class="headerlink" title="增加阅读时间显示"></a>增加阅读时间显示</h2><p>安装插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-symbols-count-time</span><br></pre></td></tr></table></figure><p>到<code>_config.yml</code>当中修改：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">symbols_count_time:</span></span><br><span class="line">  <span class="attr">separated_meta:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">item_text_post:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">item_text_total:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">awl:</span> <span class="number">1</span></span><br><span class="line">  <span class="attr">wpm:</span> <span class="number">120</span></span><br></pre></td></tr></table></figure><h2 id="底部标签增加图标显示"><a href="#底部标签增加图标显示" class="headerlink" title="底部标签增加图标显示"></a>底部标签增加图标显示</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Use icon instead of the symbol # to indicate the tag at the bottom of the post</span></span><br><span class="line"><span class="attr">tag_icon:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="打赏功能"><a href="#打赏功能" class="headerlink" title="打赏功能"></a>打赏功能</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Reward (Donate)</span></span><br><span class="line"><span class="comment"># Front-matter variable (unsupport animation).</span></span><br><span class="line"><span class="attr">reward_settings:</span></span><br><span class="line">  <span class="comment"># If true, reward will be displayed in every article by default.</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">animation:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">comment:</span> <span class="string">真的不买杯奶茶吗？T^T</span></span><br><span class="line"></span><br><span class="line"><span class="attr">reward:</span></span><br><span class="line">  <span class="attr">wechatpay:</span> <span class="string">/images/wechatpay.JPG</span></span><br><span class="line">  <span class="attr">alipay:</span> <span class="string">/images/alipay.JPG</span></span><br><span class="line">  <span class="comment">#paypal: /images/paypal.png</span></span><br><span class="line">  <span class="comment">#bitcoin: /images/bitcoin.png</span></span><br></pre></td></tr></table></figure><p>其中两张图片的位置就是<code>wechatpay</code>和<code>alipay</code>的属性，一定要放在<code>source</code>（文件夹里面，这个是source文件夹的相对路径</p><h2 id="相关文章"><a href="#相关文章" class="headerlink" title="相关文章"></a>相关文章</h2><p>安装插件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-related-popular-posts --save</span><br></pre></td></tr></table></figure><p>更改设置</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Related popular posts</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/tea3/hexo-related-popular-posts</span></span><br><span class="line"><span class="attr">related_posts:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">title:</span> <span class="comment"># Custom header, leave empty to use the default one</span></span><br><span class="line">  <span class="attr">display_in_home:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">params:</span></span><br><span class="line">    <span class="attr">maxCount:</span> <span class="number">5</span></span><br><span class="line">    <span class="comment">#PPMixingRate: 0.0</span></span><br><span class="line">    <span class="comment">#isDate: false</span></span><br><span class="line">    <span class="comment">#isImage: false</span></span><br><span class="line">    <span class="comment">#isExcerpt: false</span></span><br></pre></td></tr></table></figure><h2 id="代码块风格设置"><a href="#代码块风格设置" class="headerlink" title="代码块风格设置"></a>代码块风格设置</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">codeblock:</span></span><br><span class="line">  <span class="comment"># Code Highlight theme</span></span><br><span class="line">  <span class="comment"># Available values: normal | night | night eighties | night blue | night bright | solarized | solarized dark | galactic</span></span><br><span class="line">  <span class="comment"># See: https://github.com/chriskempson/tomorrow-theme</span></span><br><span class="line">  <span class="attr">highlight_theme:</span> <span class="string">night</span> <span class="string">eighties</span></span><br><span class="line">  <span class="comment"># Add copy button on codeblock</span></span><br><span class="line">  <span class="attr">copy_button:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="comment"># Show text copy result.</span></span><br><span class="line">    <span class="attr">show_result:</span> <span class="literal">true</span></span><br><span class="line">    <span class="comment"># Available values: default | flat | mac</span></span><br><span class="line">    <span class="attr">style:</span> <span class="string">mac</span></span><br></pre></td></tr></table></figure><h2 id="返回顶部按钮"><a href="#返回顶部按钮" class="headerlink" title="返回顶部按钮"></a>返回顶部按钮</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">back2top:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Back to top in sidebar.</span></span><br><span class="line">  <span class="attr">sidebar:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Scroll percent label in b2t button.</span></span><br><span class="line">  <span class="attr">scrollpercent:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="阅读进度条"><a href="#阅读进度条" class="headerlink" title="阅读进度条"></a>阅读进度条</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Reading progress bar</span></span><br><span class="line"><span class="attr">reading_progress:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Available values: top | bottom</span></span><br><span class="line">  <span class="attr">position:</span> <span class="string">top</span></span><br><span class="line">  <span class="attr">color:</span> <span class="string">&quot;#E8704E&quot;</span></span><br><span class="line">  <span class="attr">height:</span> <span class="string">3px</span></span><br></pre></td></tr></table></figure><h2 id="书签"><a href="#书签" class="headerlink" title="书签"></a>书签</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Bookmark Support</span></span><br><span class="line"><span class="attr">bookmark:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Customize the color of the bookmark.</span></span><br><span class="line">  <span class="attr">color:</span> <span class="string">&quot;#E8704E&quot;</span></span><br><span class="line">  <span class="comment"># If auto, save the reading progress when closing the page or clicking the bookmark-icon.</span></span><br><span class="line">  <span class="comment"># If manual, only save it by clicking the bookmark-icon.</span></span><br><span class="line">  <span class="attr">save:</span> <span class="string">manual</span></span><br></pre></td></tr></table></figure><h2 id="右上角Github图标"><a href="#右上角Github图标" class="headerlink" title="右上角Github图标"></a>右上角Github图标</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># `Follow me on GitHub` banner in the top-right corner.</span></span><br><span class="line"><span class="attr">github_banner:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">permalink:</span> <span class="string">https://github.com/JeffersonQin</span></span><br><span class="line">  <span class="attr">title:</span> <span class="string">Follow</span> <span class="string">me</span> <span class="string">on</span> <span class="string">GitHub</span></span><br></pre></td></tr></table></figure><h2 id="Mathjax数学公式"><a href="#Mathjax数学公式" class="headerlink" title="Mathjax数学公式"></a>Mathjax数学公式</h2><p>安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ npm un hexo-renderer-marked</span><br><span class="line">$ npm i hexo-renderer-kramed <span class="comment"># or hexo-renderer-pandoc</span></span><br></pre></td></tr></table></figure><p>设置：</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">math:</span></span><br><span class="line">  <span class="string">...</span></span><br><span class="line">  <span class="attr">mathjax:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="增加评论功能"><a href="#增加评论功能" class="headerlink" title="增加评论功能"></a>增加评论功能</h2><h3 id="注册LeanCloud账号"><a href="#注册LeanCloud账号" class="headerlink" title="注册LeanCloud账号"></a>注册LeanCloud账号</h3><p><a href="https://leancloud.cn/">https://leancloud.cn/</a></p><p>注册完以后需要创建一个应用（页面上方），名字可以随便起，然后 进入应用-&gt;设置-&gt;应用key</p><p>获取你的appid 和 appkey</p><h3 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h3><p>拿到你的appid和appkey之后，打开主题配置文件 搜索 valine，填入appid 和 appkey</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">valine:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">appid:</span> <span class="string">your</span> <span class="string">appid</span> <span class="comment"># Your leancloud application appid</span></span><br><span class="line">  <span class="attr">appkey:</span> <span class="string">your</span> <span class="string">app</span> <span class="string">key</span> <span class="comment"># Your leancloud application appkey</span></span><br><span class="line">  <span class="attr">notify:</span> <span class="literal">false</span> <span class="comment"># Mail notifier</span></span><br><span class="line">  <span class="attr">verify:</span> <span class="literal">false</span> <span class="comment"># Verification code</span></span><br><span class="line">  <span class="attr">placeholder:</span> <span class="string">ヾﾉ≧∀≦)o</span> <span class="string">来呀！快活呀！~</span> <span class="comment"># Comment box placeholder</span></span><br><span class="line">  <span class="attr">avatar:</span> <span class="string">mm</span> <span class="comment"># Gravatar style</span></span><br><span class="line">  <span class="attr">guest_info:</span> <span class="string">nick,mail,link</span> <span class="comment"># Custom comment header</span></span><br><span class="line">  <span class="attr">pageSize:</span> <span class="number">10</span> <span class="comment"># Pagination size</span></span><br><span class="line">  <span class="attr">language:</span> <span class="string">zh-cn</span> <span class="comment"># Language, available values: en, zh-cn</span></span><br><span class="line">  <span class="attr">visitor:</span> <span class="literal">true</span> <span class="comment"># Article reading statistic</span></span><br><span class="line">  <span class="attr">comment_count:</span> <span class="literal">true</span> <span class="comment"># If false, comment count will only be displayed in post page, not in home page</span></span><br><span class="line">  <span class="attr">recordIP:</span> <span class="literal">true</span> <span class="comment"># Whether to record the commenter IP</span></span><br><span class="line">  <span class="attr">serverURLs:</span> <span class="comment"># When the custom domain name is enabled, fill it in here (it will be detected automatically by default, no need to fill in)</span></span><br><span class="line">  <span class="comment">#post_meta_order: 0</span></span><br></pre></td></tr></table></figure><h2 id="增加评价功能"><a href="#增加评价功能" class="headerlink" title="增加评价功能"></a>增加评价功能</h2><h3 id="注册widgetpack账号"><a href="#注册widgetpack账号" class="headerlink" title="注册widgetpack账号"></a>注册widgetpack账号</h3><p>注册widgetpack账号： <a href="https://widgetpack.com">https://widgetpack.com</a></p><p>获取ID，很明显可以看见，一般在页面左上角</p><h3 id="更改widgetpack设置"><a href="#更改widgetpack设置" class="headerlink" title="更改widgetpack设置"></a>更改widgetpack设置</h3><p>rating -&gt; settings 改为根据IP地址投票</p><h3 id="配置-1"><a href="#配置-1" class="headerlink" title="配置"></a>配置</h3><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Star rating support to each article.</span></span><br><span class="line"><span class="comment"># To get your ID visit https://widgetpack.com</span></span><br><span class="line"><span class="attr">rating:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">id:</span> <span class="string">your</span> <span class="string">app</span> <span class="string">id</span></span><br><span class="line">  <span class="attr">color:</span> <span class="string">fc6423</span></span><br></pre></td></tr></table></figure><h2 id="支持PDF"><a href="#支持PDF" class="headerlink" title="支持PDF"></a>支持PDF</h2><p>Go to dir</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> themes/next</span><br><span class="line">$ ls</span><br><span class="line">_config.yml  crowdin.yml  docs  gulpfile.js  languages  layout  LICENSE.md  package.json  README.md  scripts  <span class="built_in">source</span></span><br></pre></td></tr></table></figure><p>Install</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> https://github.com/theme-next/theme-next-pdf <span class="built_in">source</span>/lib/pdf</span><br></pre></td></tr></table></figure><p>Configure</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># PDF tag</span></span><br><span class="line"><span class="comment"># NexT will try to load pdf files natively, if failed, pdf.js will be used.</span></span><br><span class="line"><span class="comment"># So, you have to install the dependency of pdf.js if you want to use pdf tag and make it available to all browsers.</span></span><br><span class="line"><span class="comment"># See: https://github.com/theme-next/theme-next-pdf</span></span><br><span class="line"><span class="attr">pdf:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Default height</span></span><br><span class="line">  <span class="attr">height:</span> <span class="string">500px</span></span><br></pre></td></tr></table></figure><p>Usage</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&#123;% pdf /path/to/your/file.pdf %&#125;</span><br></pre></td></tr></table></figure><p>Update</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> themes/next/<span class="built_in">source</span>/lib/pdf</span><br><span class="line">$ git pull</span><br></pre></td></tr></table></figure><h2 id="搜索功能"><a href="#搜索功能" class="headerlink" title="搜索功能"></a>搜索功能</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install hexo-generator-searchdb</span><br></pre></td></tr></table></figure><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Local Search</span></span><br><span class="line"><span class="comment"># Dependencies: https://github.com/theme-next/hexo-generator-searchdb</span></span><br><span class="line"><span class="attr">local_search:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># If auto, trigger search by changing input.</span></span><br><span class="line">  <span class="comment"># If manual, trigger search by pressing enter key or search button.</span></span><br><span class="line">  <span class="attr">trigger:</span> <span class="string">auto</span></span><br><span class="line">  <span class="comment"># Show top n results per article, show all results by setting to -1</span></span><br><span class="line">  <span class="attr">top_n_per_article:</span> <span class="number">1</span></span><br><span class="line">  <span class="comment"># Unescape html strings to the readable one.</span></span><br><span class="line">  <span class="attr">unescape:</span> <span class="literal">false</span></span><br><span class="line">  <span class="comment"># Preload the search data when the page loads.</span></span><br><span class="line">  <span class="attr">preload:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><h2 id="增加jQuery的支持"><a href="#增加jQuery的支持" class="headerlink" title="增加jQuery的支持"></a>增加jQuery的支持</h2><p>在next的config当中</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">vendors:</span></span><br><span class="line">  <span class="string">...</span></span><br><span class="line">  <span class="attr">jquery:</span> <span class="string">https://code.jquery.com/jquery-2.1.3.min.js</span></span><br></pre></td></tr></table></figure><h2 id="给页面右下角适配一个按钮来消除透明度"><a href="#给页面右下角适配一个按钮来消除透明度" class="headerlink" title="给页面右下角适配一个按钮来消除透明度"></a>给页面右下角适配一个按钮来消除透明度</h2><p>因为老师要看我笔记，背景如果是2233怕不是要被锤爆，故写了一个小按钮。</p><p>在<code>theme/next/layout/_macro/post.swig</code>当中，在最后的<code>&lt;/article&gt;</code>之前，添加如下代码：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line">&#123;% if not is_index %&#125;</span><br><span class="line">    &lt;div id&#x3D;&quot;comple-dark-button-wrap&quot; style&#x3D;&quot;z-index: 100000; position: fixed; right: 20px; bottom: 20px;&quot;&gt;</span><br><span class="line">        &lt;style&gt;</span><br><span class="line">            .control-mask-button &#123;</span><br><span class="line">                display: block;</span><br><span class="line">                width: 42px;</span><br><span class="line">                height: 42px;</span><br><span class="line">                line-height: 42px;</span><br><span class="line">                color: #ff8572;</span><br><span class="line">                background: #ffd9d3;</span><br><span class="line">                box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);</span><br><span class="line">                width: 2.5em;</span><br><span class="line">                height: 2.5em;</span><br><span class="line">                line-height: 2.5em;</span><br><span class="line">                border-radius: 50%;</span><br><span class="line">                -webkit-transform: translateZ(0);</span><br><span class="line">                transform: translateZ(0);</span><br><span class="line">                overflow: hidden;</span><br><span class="line">                position: relative;</span><br><span class="line">                cursor: pointer;</span><br><span class="line">                display: inline-block;</span><br><span class="line">                -webkit-user-select: none;</span><br><span class="line">                -moz-user-select: none;</span><br><span class="line">                -ms-user-select: none;</span><br><span class="line">                user-select: none;</span><br><span class="line">                -webkit-tap-highlight-color: transparent;</span><br><span class="line">            &#125;</span><br><span class="line">            .control-mask-button:hover &#123;</span><br><span class="line">                color: #FFBDFF;</span><br><span class="line">                transition-duration: 0.5s;</span><br><span class="line">            &#125;</span><br><span class="line">        &lt;&#x2F;style&gt;</span><br><span class="line">        &lt;a href&#x3D;&quot;javascript:;&quot; id&#x3D;&quot;jeffMaskControl&quot; class&#x3D;&quot;control-mask-button&quot;&gt;&lt;&#x2F;a&gt;</span><br><span class="line">        &lt;script&gt;</span><br><span class="line">            var click_time &#x3D; 0;</span><br><span class="line">            </span><br><span class="line">            document.querySelector(&#39;a[id&#x3D;&quot;jeffMaskControl&quot;]&#39;).addEventListener(&#39;click&#39;, function()&#123;</span><br><span class="line">                click_time +&#x3D; 1;</span><br><span class="line">                var content_wrap &#x3D; document.getElementsByClassName(&#39;content-wrap&#39;)[0];</span><br><span class="line">                if (click_time % 2 &#x3D;&#x3D; 1) &#123;</span><br><span class="line">                    content_wrap.style.cssText +&#x3D; &#39;background: rgba(175,210,237,1);&#39;;</span><br><span class="line">                &#125; else &#123;</span><br><span class="line">                    content_wrap.style.cssText +&#x3D; &#39;background: rgba(175,210,237,0);&#39;;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;)</span><br><span class="line">        &lt;&#x2F;script&gt;</span><br><span class="line">    &lt;&#x2F;div&gt;</span><br><span class="line">&#123;% endif %&#125;</span><br></pre></td></tr></table></figure><h2 id="加密文章"><a href="#加密文章" class="headerlink" title="加密文章"></a>加密文章</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install --save hexo-blog-encrypt</span><br></pre></td></tr></table></figure><p>在hexo的config中</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">encrypt:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">abstract:</span> <span class="string">这是一篇加密文章，内容可能是个人情感宣泄或者收费技术。如果你确实想看，请与我联系。</span></span><br><span class="line">  <span class="attr">message:</span> <span class="string">输入密码，查看文章。</span></span><br></pre></td></tr></table></figure><p>给需要加密的文章添加password属性即可</p><h2 id="看板娘-live2d"><a href="#看板娘-live2d" class="headerlink" title="看板娘 live2d"></a>看板娘 live2d</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install --save hexo-helper-live2d</span><br></pre></td></tr></table></figure><p>模型可以用自己喜欢的样式，具体可以参照：<a href="https://blog.csdn.net/wang_123_zy/article/details/87181892">https://blog.csdn.net/wang_123_zy/article/details/87181892</a></p><p>我使用的是hibiki，安装：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install live2d-widget-model-hibiki</span><br></pre></td></tr></table></figure><p>在hexo的config中</p><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">live2d:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">scriptFrom:</span> <span class="string">local</span></span><br><span class="line">  <span class="attr">pluginRootPath:</span> <span class="string">live2dw/</span></span><br><span class="line">  <span class="attr">pluginJsPath:</span> <span class="string">lib/</span></span><br><span class="line">  <span class="attr">pluginModelPath:</span> <span class="string">assets/</span></span><br><span class="line">  <span class="attr">tagMode:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">debug:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">model:</span></span><br><span class="line">    <span class="attr">use:</span> <span class="string">live2d-widget-model-hibiki</span></span><br><span class="line">  <span class="attr">display:</span></span><br><span class="line">    <span class="attr">position:</span> <span class="string">left</span></span><br><span class="line">    <span class="attr">width:</span> <span class="number">150</span></span><br><span class="line">    <span class="attr">height:</span> <span class="number">325</span></span><br><span class="line">  <span class="attr">mobile:</span></span><br><span class="line">    <span class="attr">show:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>不同的模型只要更改<code>hibiki</code>部分即可。</p><h2 id="Note图标"><a href="#Note图标" class="headerlink" title="Note图标"></a>Note图标</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Note tag (bs-callout)</span></span><br><span class="line"><span class="attr">note:</span></span><br><span class="line">  <span class="comment"># Note tag style values:</span></span><br><span class="line">  <span class="comment">#  - simple    bs-callout old alert style. Default.</span></span><br><span class="line">  <span class="comment">#  - modern    bs-callout new (v2-v3) alert style.</span></span><br><span class="line">  <span class="comment">#  - flat      flat callout style with background, like on Mozilla or StackOverflow.</span></span><br><span class="line">  <span class="comment">#  - disabled  disable all CSS styles import of note tag.</span></span><br><span class="line">  <span class="attr">style:</span> <span class="string">simple</span></span><br><span class="line">  <span class="attr">icons:</span> <span class="literal">true</span></span><br><span class="line">  <span class="comment"># Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6).</span></span><br><span class="line">  <span class="comment"># Offset also applied to label tag variables. This option can work with disabled note tag.</span></span><br><span class="line">  <span class="attr">light_bg_offset:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;奶茶铺开张&quot;&gt;&lt;a href=&quot;#奶茶铺开张&quot; class=&quot;headerlink&quot; title=&quot;奶茶铺开张&quot;&gt;&lt;/a&gt;奶茶铺开张&lt;/h1&gt;&lt;h2 id=&quot;创建GitHub项目&quot;&gt;&lt;a href=&quot;#创建GitHub项目&quot; class=&quot;headerlink&quot; title=&quot;创建GitHub项目&quot;&gt;&lt;/a&gt;创建GitHub项目&lt;/h2&gt;&lt;p&gt;到自己的GitHub，新建一个repository，名为&lt;code&gt;username.github.io&lt;/code&gt;，其中username是用户名。&lt;/p&gt;
&lt;h2 id=&quot;安装Hexo&quot;&gt;&lt;a href=&quot;#安装Hexo&quot; class=&quot;headerlink&quot; title=&quot;安装Hexo&quot;&gt;&lt;/a&gt;安装Hexo&lt;/h2&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm install -g hexo-cli&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;Once Hexo is installed, run the following commands to initialize Hexo in the target &lt;code&gt;&amp;lt;folder&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;$ hexo init &amp;lt;folder&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ &lt;span class=&quot;built_in&quot;&gt;cd&lt;/span&gt; &amp;lt;folder&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;$ npm install&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;初始化完成之后，文件目录：&lt;/p&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;.&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── _config.yml&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── package.json&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── scaffolds&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;├── &lt;span class=&quot;built_in&quot;&gt;source&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;|   ├── _drafts&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;|   └── _posts&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;└── themes&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</summary>
    
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/categories/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/tags/Hexo/"/>
    
    <category term="美化" scheme="http://gyrojeff.moe/tags/%E7%BE%8E%E5%8C%96/"/>
    
    <category term="npm" scheme="http://gyrojeff.moe/tags/npm/"/>
    
    <category term="HTML" scheme="http://gyrojeff.moe/tags/HTML/"/>
    
    <category term="CSS" scheme="http://gyrojeff.moe/tags/CSS/"/>
    
    <category term="Javascript" scheme="http://gyrojeff.moe/tags/Javascript/"/>
    
  </entry>
  
  <entry>
    <title>AP Statistics 临死前的挣扎（一个懒人）</title>
    <link href="http://gyrojeff.moe/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/"/>
    <id>http://gyrojeff.moe/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/</id>
    <published>2020-03-08T02:07:14.000Z</published>
    <updated>2021-01-14T06:20:07.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h1><p>因为我懒，所以熬夜。</p><h1 id="概率-Probability"><a href="#概率-Probability" class="headerlink" title="概率 - Probability"></a>概率 - Probability</h1><h2 id="大数定律-Law-of-large-number-概率的基石"><a href="#大数定律-Law-of-large-number-概率的基石" class="headerlink" title="大数定律 - Law of large number (概率的基石)"></a>大数定律 - Law of large number (概率的基石)</h2><p>If we observe more and more repetitions of any chance process, the proportion of times that a specific outcome occurs approaches a single value.</p><h2 id="概率-Probability-1"><a href="#概率-Probability-1" class="headerlink" title="概率 - Probability"></a>概率 - Probability</h2><script type="math/tex; mode=display">    P(A) = \frac {\text {number of outcomes corresponding to event }A}{\text{total number of outcomes in sample space}}</script><h2 id="样本空间-Sample-Space"><a href="#样本空间-Sample-Space" class="headerlink" title="样本空间 - Sample Space"></a>样本空间 - Sample Space</h2><p>所有可能的结果组成的集合。Set of all possible outcomes.</p><h2 id="概率模型-Probability-Models"><a href="#概率模型-Probability-Models" class="headerlink" title="概率模型 - Probability Models"></a>概率模型 - Probability Models</h2><p>样本空间 $S$ 以及每个结果说对应的概率。</p><a id="more"></a><h2 id="Probability-Rule"><a href="#Probability-Rule" class="headerlink" title="Probability Rule"></a>Probability Rule</h2><ul><li>Legitimate values:<script type="math/tex; mode=display">  0 \leq P(A) \leq 1</script></li><li>Probability for sample space:<script type="math/tex; mode=display">  \sum_i P_i = 1</script></li><li>Complement Rule<script type="math/tex; mode=display">  P(A^C) = 1 - P(A)</script></li></ul><h2 id="条件概率-Conditional-Probability"><a href="#条件概率-Conditional-Probability" class="headerlink" title="条件概率 - Conditional Probability"></a>条件概率 - Conditional Probability</h2><p>Definition: $P(B|A)$ represent the probability that event B happens given that event A happened.</p><p>Computation:</p><script type="math/tex; mode=display">    P(A|B) = \frac {P(A \cup B)} {P(B)}</script><script type="math/tex; mode=display">    P(B|A) = \frac {P(A \cup B)} {P(A)}</script><h2 id="独立事件-Independence"><a href="#独立事件-Independence" class="headerlink" title="独立事件 - Independence"></a>独立事件 - Independence</h2><p>两个事件相互独立的定义：如果一个事件的发生不会改变另一个事件发生的概率，那么这两个事件相互独立。</p><p>如果两个是事件是独立的，如下关系成立：</p><script type="math/tex; mode=display">    P(A\cap B) = P(A)P(B)</script><script type="math/tex; mode=display">    P(A|B) = P(A)</script><script type="math/tex; mode=display">    P(B|A) = P(B)</script><h2 id="Mutually-Exclusive"><a href="#Mutually-Exclusive" class="headerlink" title="Mutually Exclusive"></a>Mutually Exclusive</h2><p>如果一个事件发生了，导致另一个事件必定不可能发生，那么这样的两个事件就是Mutually Exclusive.</p><p>If one has happened, the other must not happen at all.</p><h2 id="Mutually-Exclusive-amp-Independence"><a href="#Mutually-Exclusive-amp-Independence" class="headerlink" title="Mutually Exclusive &amp; Independence"></a>Mutually Exclusive &amp; Independence</h2><p>如果两个事件是Mutually Exclusive，那么他们必定不可能是Independent的。反之亦然。</p><script type="math/tex; mode=display">P(A\cap B) = 0</script><h2 id="An-important-conclusion"><a href="#An-important-conclusion" class="headerlink" title="An important conclusion"></a>An important conclusion</h2><script type="math/tex; mode=display">P(A \cup B) = P(A) + P(B) - P(A\cap B)</script><p>P.S. When $A$ and $B$ are sets, </p><script type="math/tex; mode=display">\operatorname{card}(A \cup B) = \operatorname{card}(A) + \operatorname{card}(B) - \operatorname{card}(A \cap B)</script><h2 id="Two-way-Tables"><a href="#Two-way-Tables" class="headerlink" title="Two-way Tables"></a>Two-way Tables</h2><p>Study two categorical variables.</p><h2 id="组合-Combination"><a href="#组合-Combination" class="headerlink" title="组合 - Combination"></a>组合 - Combination</h2><p>Definition: $n$ 个里面选 $m$ 个</p><script type="math/tex; mode=display">    C_n^m = \binom {n}{m} =  \displaystyle\frac {n!}{m!(n-m)!}</script><p>计算器：menu -&gt; 概率 -&gt; 组合，e.g. nCr(5, 3) = 10.</p><h2 id="重复独立概率-Repeated-Independent-Probability"><a href="#重复独立概率-Repeated-Independent-Probability" class="headerlink" title="重复独立概率 - Repeated Independent Probability"></a>重复独立概率 - Repeated Independent Probability</h2><p>例子：一个人投篮命中率 $70\%$ ，连续投 $5$ 次，恰好命中 $3$ 次的概率：</p><script type="math/tex; mode=display">    \binom{5}{3} \times 0.7^3 \times 0.3 ^ 2</script><p>干一件事，成功率是 $p$ ，连续干了 $n$ 次，恰好成功 $m$ 次的概率：</p><script type="math/tex; mode=display">    \binom{n}{m} \times p^m \times (1 - p)^{n - m}</script><h1 id="随机变量-Random-Variable"><a href="#随机变量-Random-Variable" class="headerlink" title="随机变量 - Random Variable"></a>随机变量 - Random Variable</h1><p><strong>Definition</strong>: A numerical varaible that describes the outcomes of a chance process is called a <strong>random variable</strong>.</p><h1 id="概率分布-Probability-Distribution"><a href="#概率分布-Probability-Distribution" class="headerlink" title="概率分布 - Probability Distribution"></a>概率分布 - Probability Distribution</h1><p><strong>Definition</strong>: The probability model for a random varaible is its <strong>probability distribution</strong>.</p><h1 id="离散型随机变量-Discete-Random-Variable"><a href="#离散型随机变量-Discete-Random-Variable" class="headerlink" title="离散型随机变量 - Discete Random Variable"></a>离散型随机变量 - Discete Random Variable</h1><p><strong>Definition</strong>: A <strong>discrete random variable</strong> $X$ takes a fixed set of possible values. The probability distribution of discrete random variable $X$ lists the values $x_i$ and their probabilities $p_i$.</p><h2 id="离散型随机变量的期望-Mean-of-Discrete-Random-Variable"><a href="#离散型随机变量的期望-Mean-of-Discrete-Random-Variable" class="headerlink" title="离散型随机变量的期望 - Mean of Discrete Random Variable"></a>离散型随机变量的期望 - Mean of Discrete Random Variable</h2><p><strong>Definition</strong>: The mean of any discrete random variable is an average of the possible outcomes, with each weighted by its probability.</p><script type="math/tex; mode=display">\mu_x = E[X] = \sum_i x_ip_i</script><p>P.S. 又称Expected Value，即”期望”。</p><h2 id="离散型随机变量的方差-Variance-of-Discrete-Random-Varaible"><a href="#离散型随机变量的方差-Variance-of-Discrete-Random-Varaible" class="headerlink" title="离散型随机变量的方差 - Variance of Discrete Random Varaible"></a>离散型随机变量的方差 - Variance of Discrete Random Varaible</h2><script type="math/tex; mode=display">\operatorname{Var}[X] = \sum_i (E[x] - x_i) ^ 2 p_i</script><h2 id="离散型随机变量的标准差-Standard-Deviation-of-Discrete-Random-Variable"><a href="#离散型随机变量的标准差-Standard-Deviation-of-Discrete-Random-Variable" class="headerlink" title="离散型随机变量的标准差 - Standard Deviation of Discrete Random Variable"></a>离散型随机变量的标准差 - Standard Deviation of Discrete Random Variable</h2><script type="math/tex; mode=display">    \sigma_X = \sqrt {\operatorname{Var[X]}} = \sqrt {\sum _ i (E[x] - x_i) ^ 2 p_i}</script><h2 id="一个重要的公式"><a href="#一个重要的公式" class="headerlink" title="一个重要的公式"></a>一个重要的公式</h2><script type="math/tex; mode=display">    \operatorname{Var}[X] = E[X^2] - E^2[X]</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&\operatorname{Var}[X]  \\    =&\sum_i(E[X] - x_i) ^ 2 p_i \\     =&E[(E[X] - X)^2] \\     =&E[E^2[X] - 2XE[X] + X^2] \\    =&E^2[X] - 2E^2[X] + E[X^2] \\     =& E[X^2] - E^2[X]\end{aligned}</script><p>P.S. 关于$E[X^2]$，根据定义：</p><script type="math/tex; mode=display">    E[X^2] = \sum_i x_i^2p_i</script><h2 id="随机变量的线性变换-Linear-Transformation-of-Random-Variables"><a href="#随机变量的线性变换-Linear-Transformation-of-Random-Variables" class="headerlink" title="随机变量的线性变换 - Linear Transformation of Random Variables"></a>随机变量的线性变换 - Linear Transformation of Random Variables</h2><script type="math/tex; mode=display">\begin{aligned}    X &\rightarrow aX + b \\     E[X] &\rightarrow aE[X] + b \\    \operatorname{Var}[X] &\rightarrow a^2\operatorname{Var}[X] \\    \sigma_X &\rightarrow |a|\sigma_X\end{aligned}</script><h2 id="随机变量的结合-Combining-Ramdom-Variables"><a href="#随机变量的结合-Combining-Ramdom-Variables" class="headerlink" title="随机变量的结合 - Combining Ramdom Variables"></a>随机变量的结合 - Combining Ramdom Variables</h2><p>但两个随机变量 $X$, $Y$ 互相独立时：</p><script type="math/tex; mode=display">    E[X+Y] = E[X] + E[Y]</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&E[X+Y]  \\    (\text{since }X\text{ and }Y\text{ are independent})=&\sum_i\sum_j(x_i + y_j) p_{xi} p_{yj} \\     =&\sum_i\sum_j x_ip_{xi} p_{yj} + \sum_i\sum_j y_j p_{xi} p_{yj} \\    =&\sum_ix_ip_{xi}\sum_j  p_{yj} + \sum_j y_j p_{yj} \sum_ip_{xi} \\    =&\sum_ix_ip_{xi} + \sum_j y_j p_{yj} = E[X] + E[Y]\end{aligned}</script><script type="math/tex; mode=display">    \operatorname{Var}[X+Y] = \operatorname{Var}[X] + \operatorname{Var}[Y]</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&\operatorname{Var}[X+Y]  \\    =&E[(X+Y)^2] - E^2[X+Y] \\     =&E[X^2 + 2XY + Y^2] - (E[X] + E[Y])^2 \\    =&E[X^2] + 2E[XY] + E[Y^2] - E^2[X] - 2E[X]E[Y] - E^2[Y] \\    =&(E[X^2] - E^2[X]) + (E[Y^2] - E^2[Y]) + 2E[XY] - 2E[X]E[Y] \\    =&\operatorname{Var}[X] + \operatorname{Var}[Y] + 2E[XY] - 2E[X]E[Y] \\     (\text{since }X\text{ and }Y\text{ are independent})=&\operatorname{Var}[X] + \operatorname{Var}[Y] + 2\sum_i\sum_j(x_iy_i)p_{xi}p_{yj} - 2\sum_ix_ip_{xi} \sum_jy_jp_{yj} \\    =&\operatorname{Var}[X] + \operatorname{Var}[Y]\end{aligned}</script><script type="math/tex; mode=display">    \sigma_{X+Y} = \sqrt {\sigma_X^2 + \sigma_Y^2}</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&\sigma_{X+Y} \\    =&\sqrt{\operatorname{Var}[X+Y]} \\     =&\sqrt{\operatorname{Var}[X] + \operatorname{Var}[Y]} \\     =&\sqrt{\sigma_X^2 + \sigma_Y^2}\end{aligned}</script><script type="math/tex; mode=display">    E[X-Y] = E[X] - E[Y]</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&E[X-Y]  \\    (\text{since }X\text{ and }Y\text{ are independent})=&\sum_i\sum_j(x_i - y_j) p_{xi} p_{yj} \\     =&\sum_i\sum_j x_ip_{xi} p_{yj} - \sum_i\sum_j y_j p_{xi} p_{yj} \\    =&\sum_ix_ip_{xi}\sum_j  p_{yj} - \sum_j y_j p_{yj} \sum_ip_{xi} \\    =&\sum_ix_ip_{xi} - \sum_j y_j p_{yj} = E[X] - E[Y]\end{aligned}</script><script type="math/tex; mode=display">    \operatorname{Var}[X-Y] = \operatorname{Var}[X] + \operatorname{Var}[Y]</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&\operatorname{Var}[X-Y]  \\    =&\operatorname{Var}[X] + \operatorname{Var}[-Y] \\     =&\operatorname{Var}[X] + \operatorname{Var}[Y] (-1)^2 \\     =&\operatorname{Var}[X] + \operatorname{Var}[Y]\end{aligned}</script><script type="math/tex; mode=display">    \sigma_{X-Y} = \sqrt {\sigma_X^2 + \sigma_Y^2}</script><script type="math/tex; mode=display">\begin{aligned}    \textit{Proof. }~~~~~~~~~~~~~~~~~~~&\sigma_{X+Y} \\    =&\sqrt{\operatorname{Var}[X-Y]} \\     =&\sqrt{\operatorname{Var}[X] + \operatorname{Var}[Y]} \\     =&\sqrt{\sigma_X^2 + \sigma_Y^2}\end{aligned}</script><h2 id="Binomial-Settings"><a href="#Binomial-Settings" class="headerlink" title="Binomial Settings"></a>Binomial Settings</h2><p><strong>Definition</strong>: A <strong>binomial setting</strong> arises when we perform several independent trials of the same chance process and record the number of times that a particular outcome occurs. The four conditions for a binomial settings are: </p><ul><li><strong>B</strong>inary: The possible outcomes of each trial can be classified as “success” or “failure”</li><li><strong>I</strong>ndependent: Trials must be independent, that is, knowing the result of one trail must not have any effect on the result of any other trial.</li><li><strong>N</strong>umber: The number of trials $n$ of the chance process must be fixed in advance.</li><li><strong>S</strong>uccess: On each trial, the possibility $p$ must be the same.</li></ul><p>要求：</p><ul><li>结果只有两种，成功或失败</li><li>每次的事件是独立的</li><li>固定的次数</li><li>每次成功概率一样</li></ul><h2 id="Binomial-Random-Variable"><a href="#Binomial-Random-Variable" class="headerlink" title="Binomial Random Variable"></a>Binomial Random Variable</h2><p><strong>Definition</strong>: The count $X$ of success in a <strong>binomial setting</strong> is a <strong>binomial random variable</strong></p><h2 id="二项分布-Binomial-Distribution"><a href="#二项分布-Binomial-Distribution" class="headerlink" title="二项分布 - Binomial Distribution"></a>二项分布 - Binomial Distribution</h2><p><strong>Definition</strong>: The probability distribution of $X$ (a binomial random variable) is a <strong>binomial distribution</strong> with parameters $n$ and $p$.</p><h2 id="Binomial-Probability"><a href="#Binomial-Probability" class="headerlink" title="Binomial Probability"></a>Binomial Probability</h2><p>如果一个随机变量 $X$ 是而二项分布随机变量，那么 $P(X=k)$指的就是”exactly $k$ succuesses in $n$ trials”。可以记作：</p><p>$X\sim B(n,p)$</p><script type="math/tex; mode=display">    P(X=k) = \binom{n}{k}p^k(1-p)^{n-k  }</script><h2 id="二项分布的计算器计算"><a href="#二项分布的计算器计算" class="headerlink" title="二项分布的计算器计算"></a>二项分布的计算器计算</h2><p>menu -&gt; 统计 -&gt; 分布 -&gt; 二项PDF -&gt; 计算 $P(X=k)$</p><p>menu -&gt; 统计 -&gt; 分布 -&gt; 二项CDF -&gt; 计算 $P(a \leq X \leq b)$</p><h2 id="二项分布的Mean和Standard-Deviation"><a href="#二项分布的Mean和Standard-Deviation" class="headerlink" title="二项分布的Mean和Standard Deviation"></a>二项分布的Mean和Standard Deviation</h2><p>$X \sim B(n,p)$，</p><p>期望：</p><script type="math/tex; mode=display">\mu_x = E[X] = np</script><p>推导：</p><script type="math/tex; mode=display">E[X] = E[X_1 + X_2 + \cdots X_n] = E[X_1] + E[X_2] + \cdots + E[X_n] = np</script><p>方差：</p><script type="math/tex; mode=display">\operatorname{Var}[X] = np(1-p)</script><p>推导：</p><script type="math/tex; mode=display">\begin{aligned}&\operatorname{Var}[X] \\ =& \operatorname{Var}[X_1 + X_2 + \cdots + X_n] \\=& \operatorname{Var}[X_1] + \operatorname{Var}[X_2] + \cdots + \operatorname{Var}[X_n] \\ =& n\operatorname{Var}[X_i] \\ =& n((0 - E[X]) ^ 2 (1-p) + (1 - E[X])^2p) \\=& n(p^2 (1 - p) + (1 - p) ^ 2 p) \\ =& np(1-p)\end{aligned}</script><p>标准差：</p><script type="math/tex; mode=display">\sigma_X = \sqrt {\operatorname{Var}[X]} = \sqrt{np(1 - p)}</script><h2 id="Geometric-Settings"><a href="#Geometric-Settings" class="headerlink" title="Geometric Settings"></a>Geometric Settings</h2><p><strong>Definition</strong>: A <strong>geometric setting</strong> arises when we perform independent trials of the same chance process and record the number of trials until a particular outcome occurs. The four conditions for a geometric setting are: </p><ul><li><strong>B</strong>inary: The possible outcomes of each trial can be classified as “success” or “failure”</li><li><strong>I</strong>ndependent: Trials must be independent, that is, knowing the result of one trail must not have any effect on the result of any other trial.</li><li><strong>T</strong>rials: The goal is to count the number of trials until the first success occurs.</li><li><strong>S</strong>uccess: On each trial, the possibility $p$ must be the same.</li></ul><p>要求：</p><ul><li>结果只有两种，成功或失败</li><li>每次的事件是独立的</li><li>目标：统计第一次成功时总共用的次数</li><li>每次成功概率一样</li></ul><h2 id="Geomtric-Random-Variable"><a href="#Geomtric-Random-Variable" class="headerlink" title="Geomtric Random Variable"></a>Geomtric Random Variable</h2><p><strong>Definition</strong>: The number of trials $Y$ that it takes to get a success in a geometric setting is a <strong>geometric random variable</strong>.</p><h2 id="几何分布-Geometric-Distribution"><a href="#几何分布-Geometric-Distribution" class="headerlink" title="几何分布 - Geometric Distribution"></a>几何分布 - Geometric Distribution</h2><p><strong>Definition</strong>: The probability distribution of $Y$ (which is a geometric random variable) is a <strong>geometric distribution</strong> with parameter $p$, the probability of success on any trial.</p><h2 id="Geometric-Probability"><a href="#Geometric-Probability" class="headerlink" title="Geometric Probability"></a>Geometric Probability</h2><p>$Y \sim G(p)$</p><script type="math/tex; mode=display">    P(Y = k) = p(1 - p)^{k - 1}</script><h2 id="几何分布的Mean和Standard-Deviation"><a href="#几何分布的Mean和Standard-Deviation" class="headerlink" title="几何分布的Mean和Standard Deviation"></a>几何分布的Mean和Standard Deviation</h2><p>期望：</p><script type="math/tex; mode=display">E[Y] = \mu_Y = \frac {1}{p}</script><p>标准差：</p><script type="math/tex; mode=display">\sigma_Y = \frac {\sqrt {1 - p}} p</script><h2 id="几何分布的图像"><a href="#几何分布的图像" class="headerlink" title="几何分布的图像"></a>几何分布的图像</h2><p>一般是<code>right-skewed</code>的，因为趋向于0。</p><h2 id="几何分布的计算器计算"><a href="#几何分布的计算器计算" class="headerlink" title="几何分布的计算器计算"></a>几何分布的计算器计算</h2><p>menu -&gt; 统计 -&gt; 分布 -&gt; 几何PDF -&gt; 计算 $P(Y=k)$</p><p>menu -&gt; 统计 -&gt; 分布 -&gt; 几何CDF -&gt; 计算 $P(a \leq Y \leq b)$</p><h2 id="做题的例子"><a href="#做题的例子" class="headerlink" title="做题的例子"></a>做题的例子</h2><p>Let random variable $Y$ denotes …, it satisfies … with ….</p><h1 id="连续性随机变量-Continuous-Random-Variable"><a href="#连续性随机变量-Continuous-Random-Variable" class="headerlink" title="连续性随机变量 - Continuous Random Variable"></a>连续性随机变量 - Continuous Random Variable</h1><h2 id="概率密度曲线-Density-Curve"><a href="#概率密度曲线-Density-Curve" class="headerlink" title="概率密度曲线 - Density Curve"></a>概率密度曲线 - Density Curve</h2><ul><li>is always on or above the horizontal axis<script type="math/tex; mode=display">  f(x) \geq 0</script></li><li>has area exactly 1 underneath it: <script type="math/tex; mode=display">  \int_{-\infty}^{\infty} f(t)\mathrm dt = 1</script></li></ul><p>对于连续性随机变量，只有区间的概率才有意义，单点的概率趋向于零，且有：</p><script type="math/tex; mode=display">    P(a < X < b) = P(a \leq X < b) = P(a < X \leq b) = P(a \leq X \leq b)</script><p>（拓展）概率分布函数：</p><script type="math/tex; mode=display">    F(x) = \int_{-\infty} ^ {x} f(t) \mathrm dt</script><p>且概率密度函数是概率分布函数的导数</p><script type="math/tex; mode=display">    f(x) = F'(x)</script><script type="math/tex; mode=display">    P(a < X \leq b) = F(b) - F(a) = \int_a^b f(x)\mathrm dx</script><h2 id="正态分布-Normal-Distribution"><a href="#正态分布-Normal-Distribution" class="headerlink" title="正态分布 - Normal Distribution"></a>正态分布 - Normal Distribution</h2><ul><li>自然界中比较正常、自然随机的变量一般都服从正态分布。</li><li>随机变量$X$服从均值为$\mu$，标准差为$\sigma$的正态分布，记作<script type="math/tex; mode=display">  X \sim \mathcal N(\mu, \sigma)</script></li></ul><h2 id="正态分布的图像"><a href="#正态分布的图像" class="headerlink" title="正态分布的图像"></a>正态分布的图像</h2><ul><li>Unimodal - 单峰</li><li>Symmetric - 对称</li><li>Bell-shaped - 钟形曲线</li></ul><h2 id="经验法则-The-Empirical-Rule"><a href="#经验法则-The-Empirical-Rule" class="headerlink" title="经验法则 - The Empirical Rule"></a>经验法则 - The Empirical Rule</h2><ul><li>$68\%$ 的数据在 $\mu \pm \sigma$ 范围内</li><li>$95.4\%$ 的数据在 $\mu \pm 2\sigma$ 范围内</li><li>$99.7\%$ 的数据在 $\mu \pm 3\sigma$ 范围内</li></ul><h2 id="标准正态分布"><a href="#标准正态分布" class="headerlink" title="标准正态分布"></a>标准正态分布</h2><ul><li><strong>Definition</strong>: 标准正态分布就是以$0$为均值$1$为标准差的正态分布。</li><li>标准正态分布可以说是$z-score$形成的正态分布<ul><li>既然原来的数据是正态分布的，$z-score = \displaystyle\frac {x - \mu}{\sigma}$只是对原来数据进行了线性转换，所以还是服从正态分布的。</li><li>$z-score$的意义是看数据的大小偏离了均值多少个标准差，所以很明显，$z-score$的均值应该是$0$，标准差是$1$（可以通过定义证明，但同样可以通过感性来理解）</li></ul></li></ul><h2 id="标准正态分布表"><a href="#标准正态分布表" class="headerlink" title="标准正态分布表"></a>标准正态分布表</h2><p>使用：算出$z-score$查表，就能知道$P(X \leq x_i) = P(z \leq z_i)$</p><p>注：标准正态分布表算的概率是小于某个值的概率。</p><p>几种不同的情况：</p><script type="math/tex; mode=display">    P(X < x_i) = P(z < z_i)</script><script type="math/tex; mode=display">    P(X > x_i) = 1 - P(X < x_i) = 1 - P(z < z_i)</script><script type="math/tex; mode=display">    P(x_1 < X < x_2) = P(X < x_2) - P(X < x_1)</script><script type="math/tex; mode=display">    \text{Inverse: }z_i = \frac {x_i - \mu}{\sigma} \Rightarrow x_i = z_i\sigma + \mu</script><h2 id="正态分布例题-Normal-Distribution-Calculation-Example"><a href="#正态分布例题-Normal-Distribution-Calculation-Example" class="headerlink" title="正态分布例题 - Normal Distribution Calculation Example"></a>正态分布例题 - Normal Distribution Calculation Example</h2><p>Women’s heights are $\mathcal N(64, 2.5)$. What percentage of women are shorter than $62$.</p><p>$\textit{ Sol. }$ Let a random variable $X$ denotes the womens’s height, $X$ satisfies Normal Distribution. $X \sim \mathcal N(64, 2.5)$. The porportion of women’s heights under $62$ is shown above. (应该在上面画一张图) </p><script type="math/tex; mode=display">    P(X < 62) = P(z < \frac {62 - 64} {2.5}) = 21.19 \%</script><p>Approximately there are $21.19\%$ of women are shorter than $62$.</p><h2 id="正态分布的计算器计算"><a href="#正态分布的计算器计算" class="headerlink" title="正态分布的计算器计算"></a>正态分布的计算器计算</h2><p>menu -&gt; 统计 -&gt; 分布 -&gt; 正态分布 CDF</p><ul><li>Lower Bound：下界</li><li>Upper Bound：上界</li><li>$\mu$：分布的均值</li><li>$\sigma$：分布的标标准差</li><li>答案：$P(a &lt; X &lt; b)$</li></ul><p>menu -&gt; 统计 -&gt; 分布 -&gt; Inverse Normal</p><ul><li>Area: $P(X &lt; k)$</li><li>$\mu$：分布的均值</li><li>$\sigma$：分布的标准差</li><li>答案：$k$</li></ul><h2 id="正态分布的题目技巧"><a href="#正态分布的题目技巧" class="headerlink" title="正态分布的题目技巧"></a>正态分布的题目技巧</h2><p>如果题目中并没有给出均值或者标准差，不妨试试看标准正态分布，求出$z-score$来进行接下来的计算。</p><h1 id="抽样分布-Sampling-Distributions"><a href="#抽样分布-Sampling-Distributions" class="headerlink" title="抽样分布 - Sampling Distributions"></a>抽样分布 - Sampling Distributions</h1><h2 id="Population-VS-Sample"><a href="#Population-VS-Sample" class="headerlink" title="Population VS. Sample"></a>Population VS. Sample</h2><script type="math/tex; mode=display">\begin{aligned}    &\text{Population} & \text {Sample} \\    \text{mean}~~~~~~&\mu &\bar x \\    \text{variance}~~~~~~&\sigma ^ 2&s^2 \\     \text{standard deviation}~~~~~~&\sigma & s \\    \text{proportion}~~~~~~&p &  \hat p\end{aligned}</script><p><strong>Definition</strong>: the value of s statistic varies in repeated random sampling is called <strong>sampling variability</strong>.</p><h2 id="Parameter-VS-Statistic"><a href="#Parameter-VS-Statistic" class="headerlink" title="Parameter VS. Statistic"></a>Parameter VS. Statistic</h2><p><strong>Definition</strong>: </p><ul><li><strong>Prarmeter</strong>: (unknown) number that describes a characteristic of a <em>population</em>.</li><li><strong>Statistic</strong>: (obtained) number that describes a characteristic of a <em>sample</em> drawn from the population.</li></ul><p><strong>Parameter</strong>描绘<strong>总体</strong>，<strong>Statistic</strong>描述样本。</p><h2 id="Sampling-Distribution"><a href="#Sampling-Distribution" class="headerlink" title="Sampling Distribution"></a>Sampling Distribution</h2><p><strong>Definition</strong>: The <strong>Sampling Distribution of a statistic</strong> is the distribution of values taken by the statistic in all possible samples of the same size from the same population. </p><p>简单的来说，这就是每次抽取的样本的统计量的值所构成的分布。举个例子，现在在对一群人做平均升高的统计，每次抽出300个人，算出平均值，记录下来。如果这样随机抽了10000次，这一千次算出来的平均身高就成为: the sampling distribution of the sample mean.</p><h2 id="Sample-Distribution-Population-Distribution-Sampling-Distribution"><a href="#Sample-Distribution-Population-Distribution-Sampling-Distribution" class="headerlink" title="Sample Distribution, Population Distribution, Sampling Distribution"></a>Sample Distribution, Population Distribution, Sampling Distribution</h2><ul><li><strong>Sample Distribution</strong>: 指的是在单一一次抽样当中，<strong>抽样出的数据</strong>形成的分布</li><li><strong>Population Distribution</strong>: 指的是总体的分布</li><li><strong>Sampling Distribution</strong>: 每一次抽样当中得到的statistic放在一起形成的分布（是<strong>统计量</strong>形成的分布）</li></ul><h2 id="Biased-and-unbiased-estimators"><a href="#Biased-and-unbiased-estimators" class="headerlink" title="Biased and unbiased estimators"></a>Biased and unbiased estimators</h2><p><strong>Definition</strong>: a statistic used to estimate a parameter is an <strong>unbiased estimator</strong> if the mean of sampling statistic equals the true value of population parameter. </p><p>翻译成人话就是说如果一个统计量是一个不biased，那么</p><script type="math/tex; mode=display">    E[\bar x] = \frac {\bar x_1 + \bar x_2 + \cdots + \bar x_n} n = \mu_x</script><script type="math/tex; mode=display">    E[\hat p] = \frac {\hat p_1 + \hat p_2 + \cdots + \hat p_n} n = p</script><p>这里的$\bar x$和$\hat p$只是举例，可以换成别的统计量。</p><h2 id="Variability-of-a-Statistic"><a href="#Variability-of-a-Statistic" class="headerlink" title="Variability of a Statistic"></a>Variability of a Statistic</h2><p><strong>Definition</strong>: The <strong>variability of a statistic</strong> is described by the spread of its sampling distribution. This spread is determined primarily by the size of the random sample. <strong><em>Larger samples give smaller spread</em></strong>. Variability of sampling statistics should be smaller.</p><p>翻译成人话：每次抽样数量的多少会影响到Sampling Distribution, 每次抽样得越多，Variability越小，越好。</p><p>目标：</p><ul><li>unbiased</li><li>small variability</li></ul><h2 id="The-Centural-Limit-Theorem"><a href="#The-Centural-Limit-Theorem" class="headerlink" title="The Centural Limit Theorem"></a>The Centural Limit Theorem</h2><p>Draw an SRS of size $n$ from any population with mean $\mu$ and finite standard deviation $\sigma$. The <strong><em>CLT</em></strong> says that when $n$ is large ($n \geq 30$), the sampling distribution of the sample mean $\bar x$ is approximately Normal.</p><p>CLT: 在每次抽样的个数变大之后，<strong>均值</strong>的分布逐渐由不规律转换为正态分布。</p><h2 id="Sampling-Distribution-of-a-Sample-Mean"><a href="#Sampling-Distribution-of-a-Sample-Mean" class="headerlink" title="Sampling Distribution of a Sample Mean"></a>Sampling Distribution of a Sample Mean</h2><ol><li>Population follow Normal Distribution: $X \sim \mathcal N(\mu, \sigma) \Rightarrow \bar x \sim\mathcal N(\mu, \displaystyle\frac {\sigma}{\sqrt n})$<script type="math/tex; mode=display"> \begin{aligned}     \textit{Proof. } ~~~~~~\mu_{\bar x} &= E\Big[\frac{x_1 + x_2 + \cdots + x_n}{n}\Big] \\ &= \frac {1}{n} E[x_1 + x_2 + \cdots + x_n] \\ &= \frac 1 n (E[x_1] + E[x_2] + \cdots + E[x_n]) \\ &= \frac 1 n n \mu = \mu \\      \operatorname{Var}[\bar x] &= \operatorname{Var}\Big [ \frac {x_1 + x_2 + \cdots + x_n}{ n} \Big] \\ &= \frac 1 {n ^2} [\operatorname{Var}[x_1] + \operatorname{Var}[x_2] + \cdots + \operatorname{Var}[x_n]] \\ &= \frac {1 }{n^2} [\sigma^2 + \sigma^2 + \cdots + \sigma ^ 2] = \frac {\sigma^2} n \\ \sigma_{\bar x} &= \sqrt {\operatorname{Var}[\bar x]} = \frac \sigma {\sqrt n} \end{aligned}</script></li><li>Population distribution is skewed / unknown, with $n \geq 30$, $\bar x \sim\mathcal N(\mu, \displaystyle\frac {\sigma}{\sqrt n})$ (According to <strong><em>CLT</em></strong>).</li></ol><h2 id="The-Sampling-Distribution-of-a-Difference-Between-Two-Means"><a href="#The-Sampling-Distribution-of-a-Difference-Between-Two-Means" class="headerlink" title="The Sampling Distribution of a Difference Between Two Means"></a>The Sampling Distribution of a Difference Between Two Means</h2><p>若原分布是正态分布或者$n_1 \geq 30, n_2\geq 30$（根据CLT），那么</p><script type="math/tex; mode=display">    \bar {x_1} - \bar {x_2} \sim \mathcal N(\mu_1 - \mu_2, \sqrt {\frac {\sigma_1^2}{n_1} + \frac {\sigma_2^2}{n_2}})</script><p>证明略（可以通过和上面差不多的方法得到证明）。</p><h2 id="Sampling-Distribution-of-hat-p"><a href="#Sampling-Distribution-of-hat-p" class="headerlink" title="Sampling Distribution of $\hat p$"></a>Sampling Distribution of $\hat p$</h2><p>每次抽样，得到抽样的数量的分布可以理解为一个二项分布，这个二项分布除以每次抽样得人数，就形成了一个比例的分布。当满足如下条件时：</p><script type="math/tex; mode=display">\begin{aligned}    \text {large count condition: }~np \geq 10,&~n(1-p)\geq 10 & \text{保证形成正态分布} \\ n \leq& ~10\%~ N &\text {保证抽样形成二项分布}\end{aligned}</script><p>有：设$X$表示每次抽样数量的随机变量</p><script type="math/tex; mode=display">X \sim \mathcal B(n, p) \Rightarrow \hat p \sim \mathcal N(\mu_{\hat p} = p, \sigma_{\hat p} = \sqrt {\frac{p(1 - p)}{n}})</script><p>推导：</p><script type="math/tex; mode=display">    E[\hat p] = E\Big [ \frac X n \Big ] = \frac 1 n E[X] = \frac 1 n np = p</script><script type="math/tex; mode=display">    \operatorname{Var}[\hat p] = \operatorname{Var}\Big [ \frac X n \Big] = \frac {1} {n^2} \operatorname{Var}[X] = \frac {1}{n^2} np(1-p) = \frac{p(1-p)}{n}</script><script type="math/tex; mode=display">    \sigma_{\hat p} = \sqrt {\operatorname{Var}[\hat p]} = \sqrt {\frac{p(1-p)}{n}}</script><div class="note info">这里面的Fact是：二项分布在$n$逐渐变大时，趋向于正态分布。</div><div class="note primary">而$\hat p = \displaystyle\frac{X}{n}$</div><div class="note success">得到的结论：$\hat p$也趋向于正态分布</div><h2 id="The-Sampling-Distribution-of-a-Difference-Between-Two-Proportions"><a href="#The-Sampling-Distribution-of-a-Difference-Between-Two-Proportions" class="headerlink" title="The Sampling Distribution of a Difference Between Two Proportions"></a>The Sampling Distribution of a Difference Between Two Proportions</h2><p>If</p><script type="math/tex; mode=display">    n_1 p_1 \geq 10, ~n_1(1 - p_1) \leq 10</script><script type="math/tex; mode=display">    n_2 p_2 \geq 10, ~n_2(1 - p_2) \leq 10</script><script type="math/tex; mode=display">    n_1 \leq 10\% N_1, ~n_2 \leq 10\%N_2</script><p>Then </p><script type="math/tex; mode=display">    \hat p_1 - \hat p_2 \sim \mathcal N(p_1 - p_2, \sqrt {\frac {p_1(1 - p_1)}{n_1} + \frac {p_2(1 - p_2)}{n_2}})</script><h2 id="关于正态分布的一个重要结论"><a href="#关于正态分布的一个重要结论" class="headerlink" title="关于正态分布的一个重要结论"></a>关于正态分布的一个重要结论</h2><p>两个独立的正态分布的任意线性组合仍然服从正态分布（现无法证明）</p><h2 id="Point-Estimator"><a href="#Point-Estimator" class="headerlink" title="Point Estimator"></a>Point Estimator</h2><p>点估计，需要满足Unbiased and Low Variability：</p><ul><li>Unbiased: 无偏差的，即统计出的值（statistic）和真实的值（parameter）一致</li><li>Low Variability: 更好地情况需要方差更小（可以通过增加sample size）</li></ul><p><strong>答题技巧</strong>：</p><ul><li>Unbiased和Low Variability都要提到</li></ul><h1 id="Confidence-Interval-Interval-Estimation"><a href="#Confidence-Interval-Interval-Estimation" class="headerlink" title="Confidence Interval / Interval Estimation"></a>Confidence Interval / Interval Estimation</h1><p>因为点估计要满足那些个条件，所以引入了区间估计</p><script type="math/tex; mode=display">\text {estimate} \pm \text {margin of error}</script><p>$\text {margin of error}$的大小是一个$\text {trade off}$.</p><p><strong>Definition</strong>: <em>To interpret a $C\%$ confidence interval for an unknown parameter, say, “We are $C\%$ confident that in the long run the interval from $\text {estimate} - \text {margin of error}$ to $\text {estimate} + \text {margin of error}$ would succeed in $\color{red}{capturing}$ the actual value of the [population parameter in context].”</em></p><div class="note info">If the estimator is unbiased, then $E[\hat x] = x$</div><p>注意：</p><ul><li>不是probability</li><li>主语是interval, 谓语是capture</li><li>估计的是population parameter，而不是sample statistic.</li></ul><h2 id="Confidence-Level-1-alpha"><a href="#Confidence-Level-1-alpha" class="headerlink" title="Confidence Level: $1 - \alpha$"></a>Confidence Level: $1 - \alpha$</h2><p>举个例子，$95\%$ confidence的interval，$1 - \alpha = 0.95$</p><h2 id="临界值-Critical-Value"><a href="#临界值-Critical-Value" class="headerlink" title="临界值 - Critical Value"></a>临界值 - Critical Value</h2><p>记作$z^*$或者$z_{\frac \alpha 2}$，可以理解为，在$[-z^*, z^*]$范围内，”区间”可以包含population parameter。 且$P(z &lt; -z^*) = P(z &gt; z^*) = \displaystyle \frac \alpha 2$，$P(-z^* &lt; z &lt; z^*) = 1 - \alpha$。</p><p>有了这个临界值之后，我们就可以通过变换来求出每次sample所对应的”区间”：因为$z^*$是处于一个标准正态分布$\mathcal N(\mu = 0,\sigma = 1)$，在临界处与population parameter差了$z^*$个标准差。</p><script type="math/tex; mode=display">\text{confident interval} = \text {sample statistic} \pm z^* \times \text{standard deviation of statistic}</script><p>以均值这个统计量为例：</p><script type="math/tex; mode=display">\text{confident interval of mean} = \text {sample statistic} \pm z^* \times \sigma_{\bar x} = \text {sample statistic} \pm z^* \times \frac {\sigma}{\sqrt n}</script><p>术语：</p><ul><li>$\text {standard error} = \text{standard deviation of statistic}$</li><li>$\text {margin of error} = z^* \times \text{standard deviation of statistic}$</li></ul><p>所以还可以写成：</p><script type="math/tex; mode=display">\text{confident interval} = \text {sample statistic} \pm \text {critical value} \times \text{standard error}</script><p>对于大多数统计量而言，如果要降低$\text {margin of error}$，有两种方法</p><ul><li>降低置信区间 $C\% \downarrow$</li><li>增加每次的抽样数 $n \uparrow$</li></ul><p>同样，我们把$z$表达出来也可以写出：</p><script type="math/tex; mode=display">-z^* < \frac {x - \mu}{\sigma_x} < z^*</script><p>其中$x$为样本的值（statistic），$\mu$为总体均值，$\sigma$为总体标准差，那么</p><script type="math/tex; mode=display">x - \sigma_x z^* < \mu < x + \sigma_x z^*</script><h2 id="t-分布-t-Distribution"><a href="#t-分布-t-Distribution" class="headerlink" title="$t$分布 - $t$ Distribution"></a>$t$分布 - $t$ Distribution</h2><p>在我们在根据样本做预测时，我们的统计量会会呈现出一种新的分布，被称为$t$ distribution. 其中</p><script type="math/tex; mode=display">t = \frac {x - \mu}{s_x}</script><p>其中，$s_x$为是这个统计量的标准差，其可以转化为关于抽样数据标准差$s$的式子（上面提到过，不同的统计量不同），且有</p><script type="math/tex; mode=display">s = \frac {\sum _{i = 1} ^ n (x_i - \bar x)^2}{n - 1}</script><p>这里的自由度（$\text{degree of freedom}$）是$n-1$，由于找不到很严格的说明方法（只是我太菜了看不懂罢了），有一个形象的理解：</p><div class="note primary">一个系统中有$n$个变量，我们要通过抽样得一部分数据来预测population parameter，我们会发现在确定了$n-1$个数据之后，最后一个数据和系统的paramter是密切相关的，可以自由设置的值只有$n-1$个，$\text{df} = n - 1$</div><div class="note default">其实我也觉得很胡扯，但没办法（哭，考试还是得考的嘛</div><h2 id="t-分布的特点"><a href="#t-分布的特点" class="headerlink" title="$t$分布的特点"></a>$t$分布的特点</h2><ul><li>It is symmetric with a single peak at $0$.</li><li>It has much more data on the tails.</li><li>It has a similar shape like normal distribution, but a greater spread and a lower peak.</li></ul><div class="note info">When $n \rightarrow \infty$, $t \rightarrow z$.</div><h2 id="用样本的标准差估计的置信区间"><a href="#用样本的标准差估计的置信区间" class="headerlink" title="用样本的标准差估计的置信区间"></a>用样本的标准差估计的置信区间</h2><p>因为我们做估计的时候，永远也不可能获得population的标准差，只可能得到sample的标准差，此时就要用自由度为$n-1$的$t$值：</p><script type="math/tex; mode=display">\text {critical value }t^* = t_{\frac{\alpha}{2}^{n - 1}}</script><script type="math/tex; mode=display">-t^* < \frac {x - \mu}{s_x} < t^*</script><script type="math/tex; mode=display">x - s_x t^* < \mu < x + s_x t^*</script><p>置信区间：$x \pm s_xt^*$</p><script type="math/tex; mode=display">\text{confident interval} = \text {sample statistic} \pm t^* \times \text{standard deviation of statistic}</script><h2 id="t-值的计算器查找"><a href="#t-值的计算器查找" class="headerlink" title="$t$值的计算器查找"></a>$t$值的计算器查找</h2><p>menu -&gt; 统计 -&gt; 分布 -&gt; 反向t分布</p><div class="note default">Area就是从左到右的面积，在计算时取$\displaystyle\frac{\alpha}{2}$。也就是说如果要$90\%$的置信区间，取$0.025$</div><div class="note default">df ($\text{degree of freedom}$): 自由度</div><h2 id="置信区间的计算器计算"><a href="#置信区间的计算器计算" class="headerlink" title="置信区间的计算器计算"></a>置信区间的计算器计算</h2><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; z区间 -&gt; 统计</p><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; t区间 -&gt; 统计</p><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双样本z区间 -&gt; 统计</p><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双样本t区间 -&gt; 统计</p><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; 单比例z区间 -&gt; 统计</p><p>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双比例z区间 -&gt; 统计</p><h2 id="置信区间的条件"><a href="#置信区间的条件" class="headerlink" title="置信区间的条件"></a>置信区间的条件</h2><ul><li><strong>Random</strong>: The data should come from a well-designed random sample or randomized experiment.</li><li><strong>Normal</strong>: The sampling distribution is exactly Normal if the population distribution is Normal. In the cases that the population distribution is not normal, the Centural Limit Theorem (<strong><em>CLT</em></strong>) tells us that the sampling distribution of sample mean will be approximately normal if $n$ is large ($n \geq 30$). (For proportions, $np \geq 10, n(1 - p) \geq 10$)</li><li><strong>Independent</strong>: Individual observations Individual observations are independent if $n \leq \frac 1 {10} N$. This is called $10\%$ condition.</li></ul><h2 id="单样本Mean的置信区间"><a href="#单样本Mean的置信区间" class="headerlink" title="单样本Mean的置信区间"></a>单样本Mean的置信区间</h2><p>Population distribution is normal or sample space is large ($n \geq 30$), with $n \leq 10\% N$, </p><script type="math/tex; mode=display">\bar x \sim \mathcal N(\mu, \frac{\sigma}{\sqrt n})</script><p>When $\sigma$ is known </p><script type="math/tex; mode=display">\text{Confidence Interval: } \bar x \pm z^*\frac{\sigma}{\sqrt n}</script><p>When $\sigma$ is unknown</p><script type="math/tex; mode=display">\text{Confidence Interval: } \bar x \pm t^*_{n - 1}\frac{\sigma}{\sqrt n}</script><h2 id="双样本Mean的置信区间"><a href="#双样本Mean的置信区间" class="headerlink" title="双样本Mean的置信区间"></a>双样本Mean的置信区间</h2><p>Both population distribution is normal or both sample size is large ($n_1 \geq 30, n_2 \geq 30$), with $n_1 \leq 10\% N_1, n_2 \leq 10\% N_2$, </p><script type="math/tex; mode=display">\bar {x_1} - \bar {x_2} \sim \mathcal N(\mu_1 - \mu_2, \sqrt {\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}})</script><p>When $\sigma_1$ and $\sigma_2$ is known</p><script type="math/tex; mode=display">\text {Confidence Interval: }(\bar{x_1} - \bar{x_2}) \pm z^*\sqrt {\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}</script><p>When $\sigma_1$ and $\sigma_2$ is unknown</p><script type="math/tex; mode=display">\text {Confidence Interval: } (\bar{x_1} - \bar{x_2}) \pm t^*_{df}\sqrt {\frac{\sigma_1^2}{n_1} + \frac{\sigma_2^2}{n_2}}</script><p>in which</p><script type="math/tex; mode=display">df = \frac{(\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2})}{\frac{1}{n_1 - 1}(\frac{s_1^2}{n_1})^2 + \frac{1}{n_2 - 1}(\frac{s_2^2}{n_2})}</script><h2 id="例题"><a href="#例题" class="headerlink" title="例题"></a>例题</h2><p><strong>FRQ</strong>  One of the two fire stations in a certain town responds to calls in the northern half of the town, and the other fire station responds to calls in the southern half of the town. One of the town council members believes that the two fire stations have different mean response times. Response time is measured by the differnce between the timwe an emergency call comes into the fire station and the time the first fire truck arrives at the scene of the fire. Data were collected to investigate whether the council member’s beliefis correct. A random sample of $50$ calls selected from the northern fire station had a mean response time of $4.3$ minutes with a standard deviation of $3.7$ minutes. A random sample to $50$ calls selected from the southern fire station had a mean response time of $5.3$ minutes with a standard deviation of $3.2$ minutes. Construct and interpret a $95$ percent confidence interval for the difference in mean response times between the two fire stations.</p><p><strong>Step 1: State</strong>  The two-sample $t$ interval for $\mu_N - \mu_S$, the difference in population mean response times, is $(\bar x_N - \bar x_S) \pm t^* \sqrt {\displaystyle\frac{s_N^2}{n_N} + \displaystyle\frac{s_S^2}{n_S}}$, where $\mu_N$ denotes the mean response for calls from the northern fire station and $\mu_s$ denotes the mean response for calls from the southern fire station.</p><p><strong>Step 2: Plan</strong>  Conditions</p><ul><li>Random: A random sample of 50 calls was selected from the northern fire station, and random sample of 50 calls selected from the southern station</li><li>Independent: The calls of the northern are independent from the calls of the southern.</li><li>Normal (稍微详细写一点): The use of the two-sample $t$ interval is reasonable beacause both sample sizes are large ($n_N = 50 &gt; 30$ and $n_S = 50 &gt; 30$), and by <strong>Centural Limit Theorem</strong>, the sampling distributions for the two sample means are approximately normal. Therefore the sampling distribution of the difference of the sample means $\bar x_N - \bar x_S$ is approximately normal.</li></ul><p><strong>Step 3: Do</strong>  </p><p>$\text{The Degree of freedom}= 96$</p><script type="math/tex; mode=display">\begin{aligned}&(4.3 - 5.3) \pm 1.985 \sqrt {\frac{3.7^2}{50} + \frac{3.2^2}{50}} \\ &-1.0 \pm 1.985 \times 0.6918 \\ &(-2.37,0.37)\end{aligned}</script><p><strong>Step 4: Interpretation</strong>  Based on these samples, one can be $95$ percent confident that the difference in the population mean response times (northern - southern) is between $-2.37$ minutes and $0.37$ minutes.</p><div class="note success">这里面的数据其实是靠反推得到的：首先先用计算器计算出「双样本t区间」得到「df」，再用「df」得到「$t^*_{df}$」</div><h2 id="The-One-Sample-for-Matched-Pairs-Sample"><a href="#The-One-Sample-for-Matched-Pairs-Sample" class="headerlink" title="The One-Sample for Matched-Pairs Sample"></a>The One-Sample for Matched-Pairs Sample</h2><div class="note danger">这是一个巨大的陷阱：这里的「Matched-Pairs」指的是一组匹配的数据，几个数据是一个pair，那么这种数据是单样本数据</div><p>对于这样的单样本数据，（如果我们要看pair里面的差的分布，使用$d = x_1 - x_2$，并且看的是$\bar d$的分布<strong>而非$\bar x_1 - \bar x_2$</strong></p><script type="math/tex; mode=display">\text{Confidence Interval: } \bar {x_d} \pm t^*_{n - 1} \frac{s_d}{\sqrt n}</script><h2 id="单样本Prop的置信区间"><a href="#单样本Prop的置信区间" class="headerlink" title="单样本Prop的置信区间"></a>单样本Prop的置信区间</h2><p>Using the normal approximation as long as $n\hat p \geq 10, n(1 - \hat p) \geq 10$, and independent, $n \leq 10\% N$,</p><script type="math/tex; mode=display">\hat p \sim \mathcal N(p, \sqrt \frac{p(1 - p)}{n})</script><p>用$\hat p$估计替代$p$，而且在Prop里只有$z$分布：</p><script type="math/tex; mode=display">\text{Confidence Interval: }\hat p \pm z^* \sqrt \frac {\hat p(1 - \hat p)}{n}</script><h2 id="双样本Prop的置信区间"><a href="#双样本Prop的置信区间" class="headerlink" title="双样本Prop的置信区间"></a>双样本Prop的置信区间</h2><p>Using the normal approximation as long as $n_1\hat p_1 \geq 10, n_1(1 - \hat p_1) \geq 10, n_2\hat p_2 \geq 10, n_2(1 - \hat p_2) \geq 10$, and independent, $n_1 \leq 10\% N_1, n_2 \leq 10\% N_2$,</p><script type="math/tex; mode=display">\hat p_1 - \hat p_2 \sim \mathcal N(p_1 - p_2, \sqrt {\frac {p_1(1 - p_1)}{n_1} + \frac {p_2(1 - p_2)}{n_2}})</script><p>用$\hat p_1$估计替代$p_1$，$\hat p_2$估计替代$p_2$，而且在Prop里只有$z$分布：</p><script type="math/tex; mode=display">\text {Confidence Interval: } (\hat p_1 - \hat p_2) \pm z^* \sqrt {\frac {\hat p_1(1 - \hat p_1)}{n_1} + \frac{\hat p_2(1 - \hat p_2)}{n_2}}</script><h1 id="Hypothesis-Test"><a href="#Hypothesis-Test" class="headerlink" title="Hypothesis Test"></a>Hypothesis Test</h1><h2 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h2><p>Hypothesis test statistical idea: flasifiability 可证伪性</p><div class="note default">这不重要</div><h2 id="显著性实验-Significance-Test"><a href="#显著性实验-Significance-Test" class="headerlink" title="显著性实验 - Significance Test"></a>显著性实验 - Significance Test</h2><p><strong>Definition</strong>: A <strong>significance test</strong> is a formal procedure for comparing observed data with a <strong>claim</strong> whose truth we want to assess. This <strong>claim</strong> is a statement about a <strong>parameter</strong>, like the population proportion $p$ or the population mean $\mu$. We express the results of a significance test in terms of a probability that measures how well the data and the claim agree.</p><div class="note info">人话：现有一个关于population parameter的claim，我们要测试它到底真实到什么程度。</div><h2 id="Null-Hypothesis-amp-Alternative-Hypothesis"><a href="#Null-Hypothesis-amp-Alternative-Hypothesis" class="headerlink" title="Null Hypothesis &amp; Alternative Hypothesis"></a>Null Hypothesis &amp; Alternative Hypothesis</h2><p>要推翻的理论：Null Hypothesis ($H_0$)</p><p>支持的理论：Alternative Hypothesis ($H_a$)</p><h2 id="Test-Statistic"><a href="#Test-Statistic" class="headerlink" title="Test Statistic"></a>Test Statistic</h2><p><strong>Definition</strong>: A <strong>test statistic</strong> measures how far a sample statistic diverges from what we would expect if the null hypothesis $H_0$ were true, in standardized units. That is</p><script type="math/tex; mode=display">\text{test statistic} = \frac{\text{statistic} - \text{parameter}}{\text{standard deviation of statistic}}</script><div class="note info">人话：抽样得statistic相对于，以$H_0$的parameter为$\mu$，自身的标准差为$\sigma$，的$z$值。</div><h2 id="显著程度-Significance-Level-alpha"><a href="#显著程度-Significance-Level-alpha" class="headerlink" title="显著程度 - Significance Level $\alpha$"></a>显著程度 - Significance Level $\alpha$</h2><p>The <strong>significance level ($\alpha$)</strong> defined for a study is the probability of the study <strong>rejecting</strong> the null hypothesis, given that it were true.</p><div class="note info">人话：我们做的实验得到的数据有多大的概率推翻原假设</div><h2 id="Stating-Hypothesis-left-tailed-test"><a href="#Stating-Hypothesis-left-tailed-test" class="headerlink" title="Stating Hypothesis (left-tailed test)"></a>Stating Hypothesis (left-tailed test)</h2><p>When</p><script type="math/tex; mode=display">    H_0 : \text {parameter = claimed value}</script><script type="math/tex; mode=display">    H_a : \text {parameter} < \text {claimed value}</script><p>If</p><script type="math/tex; mode=display">\text {test statistic} < -z_{\alpha}</script><p>then $H_0$ can be rejected.</p><h2 id="Stating-Hypothesis-right-tailed-test"><a href="#Stating-Hypothesis-right-tailed-test" class="headerlink" title="Stating Hypothesis (right-tailed test)"></a>Stating Hypothesis (right-tailed test)</h2><p>When</p><script type="math/tex; mode=display">    H_0 : \text {parameter = claimed value}</script><script type="math/tex; mode=display">    H_a : \text {parameter} > \text {claimed value}</script><p>If</p><script type="math/tex; mode=display">\text {test statistic} > z_\alpha</script><p>then $H_0$ can be rejected.</p><h2 id="Stating-Hypothesis-two-tailed-test"><a href="#Stating-Hypothesis-two-tailed-test" class="headerlink" title="Stating Hypothesis (two-tailed test)"></a>Stating Hypothesis (two-tailed test)</h2><p>When</p><script type="math/tex; mode=display">    H_0 : \text {parameter = claimed value}</script><script type="math/tex; mode=display">    H_a : \text {parameter} \neq \text {claimed value}</script><p>If</p><script type="math/tex; mode=display">|\text {test statistic}| > z_{\frac {\alpha}{2}}</script><p>then $H_0$ can be rejected.</p><h2 id="标准差-sigma-未知的情况"><a href="#标准差-sigma-未知的情况" class="headerlink" title="标准差$\sigma$未知的情况"></a>标准差$\sigma$未知的情况</h2><p>和CI问题相同，使用$t$分布来替代$z$分布，使用$s$代替$\sigma$，上述过程中的所有Inverse-z替换成Inverse-t.</p><div class="note warning">注意自由度$df$</div><h2 id="P-text-Values"><a href="#P-text-Values" class="headerlink" title="$P-\text {Values}$"></a>$P-\text {Values}$</h2><p>$t$值和$z$值不方便，不直接，不直观，所以引入了$P-\text {Values}$.</p><p><strong>Definition</strong>: <strong>P-value</strong> is the probability that we observe a test statistic value at least as extreme as the one computed from the sample, if $H_0$ were true.</p><div class="note info">人话：P-value描述的是，比现在的值还要极端的值还有多少</div><h3 id="计算方法：计算-t-分布或-z-分布的CDF"><a href="#计算方法：计算-t-分布或-z-分布的CDF" class="headerlink" title="计算方法：计算$t$分布或$z$分布的CDF"></a>计算方法：计算$t$分布或$z$分布的CDF</h3><ul><li>left-tailed: $P(z &lt; \text {test statistic})$或者$P(t &lt; \text {test statistic})$</li><li>right-tailed: $P(z &gt; \text {test statistic})$或者$P(t &gt; \text {test statistic})$</li><li>two-tailed: $P(|z| &gt; |\text {test statistic}|)$或者$P(|t| &gt; |\text {test statistic}|)$</li></ul><h3 id="P-text-Values-得到的结论"><a href="#P-text-Values-得到的结论" class="headerlink" title="$P-\text {Values}$得到的结论"></a>$P-\text {Values}$得到的结论</h3><script type="math/tex; mode=display">P-\text{Values} < \alpha \rightarrow \text {reject }H_0 \rightarrow \text {conclude }H_a \text {(in context)}</script><script type="math/tex; mode=display">P-\text{Values} \geq \alpha \rightarrow \text {fail to reject }H_0 \rightarrow \text {cannot conclude }H_a \text {(in context)}</script><h2 id="Type-I-and-Type-II-Errors"><a href="#Type-I-and-Type-II-Errors" class="headerlink" title="Type I and Type II Errors"></a>Type I and Type II Errors</h2><h3 id="拒真错误-Type-I-Error"><a href="#拒真错误-Type-I-Error" class="headerlink" title="拒真错误 - Type I Error"></a>拒真错误 - Type I Error</h3><p><strong>Definition</strong>: 当$H_0$为真，reject $H_0$.</p><div class="note primary">有$\alpha$的概率产生拒真错误</div><div class="note warning">想要减少Type I Error，需要减少$\alpha$</div><h3 id="受伪错误-Type-II-Error"><a href="#受伪错误-Type-II-Error" class="headerlink" title="受伪错误 - Type II Error"></a>受伪错误 - Type II Error</h3><p><strong>Definition</strong>: 当$H_0$为假，fail to reject $H_0$.</p><div class="note warning">想要减少Type II Error，需要增加$\alpha$</div><h3 id="Power-1-beta"><a href="#Power-1-beta" class="headerlink" title="Power - $1 - \beta$"></a>Power - $1 - \beta$</h3><p><strong>Definition</strong>: 当$H_0$为假，成功reject的概率就是Power，为$1 - \beta$.</p><div class="note info">自然，我们可得：Type II Error的概率为$\beta$</div><p>增加Power的方法：</p><ul><li>增加$\alpha$</li><li>增加Sample Size</li></ul><h2 id="HT问题的Conditions"><a href="#HT问题的Conditions" class="headerlink" title="HT问题的Conditions"></a>HT问题的Conditions</h2><p>和CI问题的Conditions差不多，还是三个条件：</p><ul><li>Random: The data should come from a well-designed random sample or randomized experiment.</li><li>Independent: Individual obervations are independent if $n \leq \displaystyle\frac{1}{10}N$</li><li>Normal:<ul><li>Normal if the original distribution is Normal.</li><li>Normal according to <strong>Central Limit Theorem</strong> when $n \geq 30$.</li><li>Normal when approximating by <strong>Binomial Distribution</strong> and $np \geq 10$, $n(1 - p) \geq 10$.</li><li>在题目中没有提及且是小样本的情况下：<ol><li>画Dot Plot</li><li>Since the graph reveal no obvious skewness or outliers, we assume that the distribution is approximately normal.</li></ol></li></ul></li></ul><h2 id="The-One-Sample-z-Test"><a href="#The-One-Sample-z-Test" class="headerlink" title="The One-Sample $z$ Test"></a>The One-Sample $z$ Test</h2><p>When conditions are met, we can test a claim about a poulation mean $\mu$ using a <strong>one-sample $z$ test</strong>.</p><p>one-sample $z$ statistic: </p><script type="math/tex; mode=display">z = \frac {\bar x - \mu_0}{\frac {\sigma}{\sqrt n}}</script><h2 id="The-One-Sample-t-Test"><a href="#The-One-Sample-t-Test" class="headerlink" title="The One-Sample $t$ Test"></a>The One-Sample $t$ Test</h2><p>When conditions are met, we can test a claim about a population mean $\mu$ using a <strong>one-sample $t$ test</strong>.</p><p>one-sample $t$ statistic: </p><script type="math/tex; mode=display">t = \frac {\bar x - \mu_0}{\displaystyle\frac {s_x}{\sqrt n}}</script><div class="note info">$df = n - 1$</div><h2 id="Two-Sample-z-Test-for-The-Difference-Between-Two-Means"><a href="#Two-Sample-z-Test-for-The-Difference-Between-Two-Means" class="headerlink" title="Two-Sample $z$ Test for The Difference Between Two Means"></a>Two-Sample $z$ Test for The Difference Between Two Means</h2><p>Suppose the Random, Normal and Independent conditions are met. To test the hypothesis $H_0: \mu_1 - \mu_2 = \text {hypothesis value}$, compute the $z$ statistic</p><script type="math/tex; mode=display">z = \frac {(\bar x_1 - \bar x_2) - (\mu_1 - \mu_2)}{\displaystyle\sqrt {\frac{\sigma_1 ^2}{n_1}+\frac{\sigma_2 ^2}{n_2}}}</script><h2 id="Two-Sample-t-Test-for-The-Difference-Between-Two-Means"><a href="#Two-Sample-t-Test-for-The-Difference-Between-Two-Means" class="headerlink" title="Two-Sample $t$ Test for The Difference Between Two Means"></a>Two-Sample $t$ Test for The Difference Between Two Means</h2><p>Suppose the Random, Normal and Independent conditions are met. To test the hypothesis $H_0: \mu_1 - \mu_2 = \text {hypothesis value}$, compute the $t$ statistic</p><script type="math/tex; mode=display">t = \frac {(\bar x_1 - \bar x_2) - (\mu_1 - \mu_2)}{\displaystyle\sqrt {\frac{s_1 ^2}{n_1}+\frac{s_2 ^2}{n_2}}}</script><h2 id="Paired-Data-t-z-Test"><a href="#Paired-Data-t-z-Test" class="headerlink" title="Paired-Data $t$ / $z$ Test"></a>Paired-Data $t$ / $z$ Test</h2><div class="note danger">和CI中的Paired Data一样，这也是陷阱，需要用相同的方式去处理</div><h2 id="The-One-Sample-z-Test-for-a-Proportion"><a href="#The-One-Sample-z-Test-for-a-Proportion" class="headerlink" title="The One-Sample $z$ Test for a Proportion"></a>The One-Sample $z$ Test for a Proportion</h2><p>Choose an SRS of size $n$ from a large population that contains an unknown proportion $p$ of successe. To test the hypothesis $H_0 : p = p_0$, compute the $z$ statistic</p><script type="math/tex; mode=display">z = \frac {\hat p - p_0}{\displaystyle\sqrt\frac{p_0(1 - p_0)}{n}}</script><div class="note primary">注意：在做比例的CI时，使用的是$\hat p$（因为$p$未知）</div><h2 id="Two-Sample-z-Test-for-the-Difference-Between-Two-Proportions"><a href="#Two-Sample-z-Test-for-the-Difference-Between-Two-Proportions" class="headerlink" title="Two-Sample $z$ Test for the Difference Between Two Proportions"></a>Two-Sample $z$ Test for the Difference Between Two Proportions</h2><p>Suppose the Random, Normal, and Independent conditions are met. To test the hypothesis $H_0 : p_1 - p_2 = 0$, first find the pooled proportion $\hat p_C$ of successes in both samples combined</p><script type="math/tex; mode=display">\hat p_C = \frac {\hat p_1 n_1 + \hat p_2 n_2}{n _ 1 + n _ 2}</script><p>Then compute the $z$ statistic</p><script type="math/tex; mode=display">z = \frac {(\hat p_1 - \hat p_2) - 0}{\sqrt {\displaystyle\frac{\hat p_C(1 - \hat p_C)}{n_1} + \displaystyle\frac{\hat p_C(1 - \hat p_C)}{n_2}}}</script><div class="note primary">解释：在做区间估计的时候，我们用$\hat p$来替代$p$。在这边我么只是假设了$p_1 = p_2$，但是没有假设$p_1$和$p_2$是多少。如果我们照搬以前的办法，使用$\hat p_1$和$\hat p_2$来替代的话，会发现这会与我们的假设$p_1 = p_2$矛盾，所以定义一个$\hat p_C$。</div><h2 id="例题-1"><a href="#例题-1" class="headerlink" title="例题"></a>例题</h2><p><strong>FRQ</strong> Investigators at the U.S. Department of Agriculture wished to compare methods of determining the level<br>of $E$ coli bacteria contamination in beef. Two different methods (A and B) of determining the level of contamination were used on each of ten randomly selected specimens of a certain type of beef. The data obtained, in millimicrobes/liter of ground beef, for each of the methods are shown in the table below.</p><div class="note info">这里省略了一堆数据</div><p>Is there a significant difference in the mean amount of $E$. coli bacteria detected by the two methods for this type of beef? Provide a statistical justification to support your answer.</p><p><strong>Step 1: State</strong>  </p><script type="math/tex; mode=display">H_0 : \mu_d = 0</script><script type="math/tex; mode=display">H_a : \mu_d \neq 0</script><p>where $\mu_d$ is the mean difference (method A - method B) in the level of E. coli bacteria contamination in beef detected by the two methods.</p><p>Thus, we are gonna use the Paired $t$-test, where</p><script type="math/tex; mode=display">t = \frac {\bar x_d - 0}{\displaystyle\frac{s_d}{\sqrt{n_d}}}</script><p><strong>Step 2: Plan</strong></p><p>Conditions:</p><ul><li>Since the observations are obtained on 10 randomly selected specimens, it is reasonable to assume that the 10 data pairs are independent of one another.</li><li>The population distribution of differences is normal. (画图，说为什么Normal)</li></ul><p>The computed differences are:</p><script type="math/tex; mode=display">-0.3, 0.5, 0.3, 0.6, 0.8, 0.7, 1.2, 0.2, -0.1, -1.0</script><p><strong>Step 3: Do</strong></p><script type="math/tex; mode=display">\bar x_d = 0.29</script><script type="math/tex; mode=display">s_d = 0.629727</script><script type="math/tex; mode=display">t = \frac{0.29}{0.629727 / \sqrt {10}} = 1.46</script><script type="math/tex; mode=display">d.f. = 9</script><script type="math/tex; mode=display">P-\text {value} = 0.179</script><p><strong>Step 4: Intepretation</strong></p><p>Since the $P$ -value is greater than $0.05,$ we cannot reject $H_{0} .$ We do NOT have statistically significant evidence to conclude that there is a difference in the mean amount of $E$. coli bacteria detected by the two methods for this type of beef. In other words, there does not appear to be a significant difference in these two methods for measuring the level of $E$. coli contamination in beef.</p><h2 id="HT-2012-FRQ"><a href="#HT-2012-FRQ" class="headerlink" title="HT 2012 FRQ"></a>HT 2012 FRQ</h2><img src="/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/5.jpg" class=""><img src="/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/6.jpg" class=""><h2 id="HT的计算器计算"><a href="#HT的计算器计算" class="headerlink" title="HT的计算器计算"></a>HT的计算器计算</h2><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; z检验</p><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; t检验</p><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; 双样本z检验</p><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; 双样本t检验</p><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; 单比例z检验</p><p>menu -&gt; 统计 -&gt; 统计检验 -&gt; 单比例t检验</p><div class="note info">在比例部分，$x$是成功次数：$x = \hat pn$，其中$\hat p$是实验抽样的概率，$n$是Sample Size。</div><h1 id="Inference-for-Categorical-Data-Chi-Square"><a href="#Inference-for-Categorical-Data-Chi-Square" class="headerlink" title="Inference for Categorical Data: Chi-Square"></a>Inference for Categorical Data: Chi-Square</h1><h2 id="卡方统计量-The-Chi-Square-Statistic"><a href="#卡方统计量-The-Chi-Square-Statistic" class="headerlink" title="卡方统计量 - The Chi-Square Statistic"></a>卡方统计量 - The Chi-Square Statistic</h2><p><strong>Definition</strong>: <strong>The Chi-Square Statistic</strong> is a measure of how far the observed counts are from the expected counts. The formula for the statistic is</p><script type="math/tex; mode=display">\chi^2 = \sum \frac{(\text {observed} - \text {expected})^2}{\text {expected}}</script><h2 id="The-Chi-Square-Distributions-and-P-Values"><a href="#The-Chi-Square-Distributions-and-P-Values" class="headerlink" title="The Chi-Square Distributions and P-Values"></a>The Chi-Square Distributions and P-Values</h2><p>The chi-square distributions are a family of distributions that take only positive values and are skewed to the right.</p><p>A particular chi-square distribution is specified by giving its degrees of freedom.</p><div class="note info">The chi-square goodness-of-fit test uses the chi-square distribution with degrees of freedom = $k - 1$, in which $k = \# categories$</div> <img src="/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/2.png" class=""><h2 id="The-Chi-Square-Goodness-of-Fit-Test"><a href="#The-Chi-Square-Goodness-of-Fit-Test" class="headerlink" title="The Chi-Square Goodness-of-Fit Test"></a>The Chi-Square Goodness-of-Fit Test</h2><h3 id="Null-Hypothesis-amp-Alternative-Hypothesis-1"><a href="#Null-Hypothesis-amp-Alternative-Hypothesis-1" class="headerlink" title="Null Hypothesis &amp; Alternative Hypothesis"></a>Null Hypothesis &amp; Alternative Hypothesis</h3><script type="math/tex; mode=display">H_0 : \text {The specified distribution of the categorical variable is correct.}</script><script type="math/tex; mode=display">H_a : \text {The specified distribution of the categorical variable is not correct.}</script><div class="note primary">人话：要反驳一个categorical variable的分布</div><h3 id="Conditions"><a href="#Conditions" class="headerlink" title="Conditions"></a>Conditions</h3><ul><li><strong>Random</strong>: The data come from a random sample or a randomized experiment</li><li><strong>Independent</strong>: Individual observations are independent if $n \leq \displaystyle\frac {1}{10}N$. This is called $10\%$ condition.</li><li><strong>Large Sample Size</strong>: All expected counts are at least $5$.</li></ul><div class="note warning">注：这里是Expected Counts大于五。</div><h3 id="The-Chi-Square-GOF-Test"><a href="#The-Chi-Square-GOF-Test" class="headerlink" title="The Chi-Square GOF Test"></a>The Chi-Square GOF Test</h3><p>Suppose the conditions are met. Start by finding the expected count for each category assuming that $H_0$ is true. Then calculate the chi-square statistic. The P-value is the area to the right of chi-square distribution with $k - 1$ degrees of freedom.</p><div class="note success">使用计算器计算：menu -> Statistic -> Stat Tests -> $\chi^2$ GOF</div><div class="note primary">Observed List: 一个数组，在TI-nspire中可以表示为$\{n1, n2, n3, ...\}$</div><div class="note primary">Expected List: 一个数组，同上</div><div class="note default">Degree of Freedom: 自由度，$k - 1$</div><h2 id="The-Chi-Square-Test-for-Association-Independence"><a href="#The-Chi-Square-Test-for-Association-Independence" class="headerlink" title="The Chi-Square Test for Association / Independence"></a>The Chi-Square Test for Association / Independence</h2><h3 id="Null-Hypothesis-amp-Alternative-Hypothesis-2"><a href="#Null-Hypothesis-amp-Alternative-Hypothesis-2" class="headerlink" title="Null Hypothesis &amp; Alternative Hypothesis"></a>Null Hypothesis &amp; Alternative Hypothesis</h3><script type="math/tex; mode=display">H_0 : \text{There is no association between two categorical variables in the population of interest.}</script><script type="math/tex; mode=display">H_a : \text{There is an association between two categorical variables in the population of interest.}</script><div class="note info">人话：看两件事相不相关</div><h3 id="Conditions-1"><a href="#Conditions-1" class="headerlink" title="Conditions"></a>Conditions</h3><ul><li><strong>Random</strong>: The data come from a random sample or a randomized experiment</li><li><strong>Large Sample Size</strong>: All expected counts are at least $5$.</li></ul><div class="note warning">注：这里是Expected Counts大于五。</div><h3 id="Calculations"><a href="#Calculations" class="headerlink" title="Calculations"></a>Calculations</h3><script type="math/tex; mode=display">\chi^2 = \sum \frac{(\text {observed} - \text {expected})^2}{\text {expected}}</script><p>in which the expected value is given by</p><script type="math/tex; mode=display">P(row_i \cap col_j) = P(row_i) \times P(col_j) \text {  since assumed independent}</script><script type="math/tex; mode=display">\Rightarrow \text {total} \times \text {total} \times P(row_i \cap col_j) = [P(row_i) \times \text {total}] \times [P(col_j) \times \text {total} ]</script><script type="math/tex; mode=display">\Rightarrow \text {expected}_{ij} = \frac {\text {row-total}_i \times \text {col-total}_j}{\text {total}}</script><p>The degree of freedom is</p><script type="math/tex; mode=display">\text {df} = (\#row - 1)(\#col - 1)</script><div class="note success">使用计算器计算：menu -> Statistics -> Stat Tests -> $\chi^2$ 2-way Test</div><div class="note primary">Matrix: 创建矩阵（menu -> Matrix & Vector -> Create -> Matrix）</div><h1 id="Inference-for-Quantitative-Data-Slope"><a href="#Inference-for-Quantitative-Data-Slope" class="headerlink" title="Inference for Quantitative Data: Slope"></a>Inference for Quantitative Data: Slope</h1><p>Least Regression Line的斜率$b$也是一个统计量，所以也可以做CI和HT问题。这里直接给出<strong>众多</strong>公式：</p><h2 id="Least-Regression-Line"><a href="#Least-Regression-Line" class="headerlink" title="Least Regression Line"></a>Least Regression Line</h2><p>Line Predicted from the sample:</p><script type="math/tex; mode=display">\hat y = a + bx</script><p>Line for the population:</p><script type="math/tex; mode=display">\hat y = \alpha + \beta x</script><h2 id="Sampling-Distribution-of-a-Slope"><a href="#Sampling-Distribution-of-a-Slope" class="headerlink" title="Sampling Distribution of a Slope"></a>Sampling Distribution of a Slope</h2><ul><li>The Mean of the sampling distribution of $b$ is $\mu_b = \beta$</li><li>The Standard Deviation of the sampling distribution of $b$ is <script type="math/tex; mode=display">      \sigma_b = \frac {\sigma}{\sigma_x \sqrt n}</script></li><li>The Standard Error of $b$ is <script type="math/tex; mode=display">      SE_b = \frac {s}{s_x \sqrt {n - 1}}</script>  <div class="note primary">$s$是$b$的标准差，$s_x$是原始数据中$x$的标准差。</div></li></ul><h2 id="Confidence-Interval"><a href="#Confidence-Interval" class="headerlink" title="Confidence Interval"></a>Confidence Interval</h2><script type="math/tex; mode=display">b \pm t^* SE_b</script><div class="note danger">这里的$df$是$n-2$</div><h2 id="Hypothesis-Test-1"><a href="#Hypothesis-Test-1" class="headerlink" title="Hypothesis Test"></a>Hypothesis Test</h2><p>Test Statistic</p><script type="math/tex; mode=display">t = \frac {b - \beta _ 0}{SE_b}</script><h1 id="计算器使用汇总"><a href="#计算器使用汇总" class="headerlink" title="计算器使用汇总"></a>计算器使用汇总</h1><ul><li>定义变量：define xxx = xxx</li><li>矩阵：menu -&gt; 矩阵与向量 -&gt; 创建 -&gt; 矩阵</li><li>求统计量：menu -&gt; 统计 -&gt; 数组计算 -&gt; 需要的统计量 -&gt; 填入数组名称  <div class="note primary">这里数组的计算都是根据列来的，如果有$n$个数据，创建$n$行$1$列的矩阵进行运算。</div></li><li>组合：menu -&gt; 概率 -&gt; 组合，e.g. nCr(5, 3) = 10.</li><li>二项分布PDF：menu -&gt; 统计 -&gt; 分布 -&gt; 二项PDF -&gt; 计算 $P(X=k)$</li><li>二项分布CDF：menu -&gt; 统计 -&gt; 分布 -&gt; 二项CDF -&gt; 计算 $P(a \leq X \leq b)$</li><li>几何分布PDF：menu -&gt; 统计 -&gt; 分布 -&gt; 几何PDF -&gt; 计算 $P(Y=k)$</li><li>几何分布CDF：menu -&gt; 统计 -&gt; 分布 -&gt; 几何CDF -&gt; 计算 $P(a \leq Y \leq b)$</li><li>正态分布的概率：menu -&gt; 统计 -&gt; 分布 -&gt; 正态分布 CDF<ul><li>Lower Bound：下界</li><li>Upper Bound：上界</li><li>$\mu$：分布的均值</li><li>$\sigma$：分布的标标准差</li><li>答案：$P(a &lt; X &lt; b)$</li></ul></li><li>反向正太分布：menu -&gt; 统计 -&gt; 分布 -&gt; Inverse Normal<ul><li>Area: $P(X &lt; k)$</li><li>$\mu$：分布的均值</li><li>$\sigma$：分布的标准差</li><li>答案：$k$</li></ul></li><li>反向$t$分布：menu -&gt; 统计 -&gt; 分布 -&gt; 反向t分布  <div class="note default">Area就是从左到右的面积，在计算时取$\displaystyle\frac{\alpha}{2}$。也就是说如果要$90\%$的置信区间，取$0.025$</div>  <div class="note default">df ($\text{degree of freedom}$): 自由度</div></li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; z区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; t区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双样本z区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双样本t区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; 单比例z区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 置信区间 -&gt; 双比例z区间 -&gt; 统计</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; z检验</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; t检验</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; 双样本z检验</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; 双样本t检验</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; 单比例z检验</li><li>menu -&gt; 统计 -&gt; 统计检验 -&gt; 单比例t检验  <div class="note info">在比例部分，$x$是成功次数：$x = \hat pn$，其中$\hat p$是实验抽样的概率，$n$是Sample Size。</div></li><li>menu -&gt; Statistic -&gt; Stat Tests -&gt; $\chi^2$ GOF  <div class="note primary">Observed List: 一个数组，在TI-nspire中可以表示为$\{n1, n2, n3, ...\}$</div>  <div class="note primary">Expected List: 一个数组，同上</div>  <div class="note default">Degree of Freedom: 自由度，$k - 1$</div></li><li>menu -&gt; Statistics -&gt; Stat Tests -&gt; $\chi^2$ 2-way Test  <div class="note primary">Matrix: 创建矩阵（menu -> Matrix & Vector -> Create -> Matrix）</div></li></ul><h1 id="尾声"><a href="#尾声" class="headerlink" title="尾声"></a>尾声</h1><blockquote class="blockquote-center">            <i class="fa fa-quote-left"></i>            <p>八个夜晚，一人，一电脑，一笔，一个奇迹。</p>            <i class="fa fa-quote-right"></i>          </blockquote><h1 id="AP-2020-特辑"><a href="#AP-2020-特辑" class="headerlink" title="AP 2020 特辑"></a>AP 2020 特辑</h1><h2 id="出题点"><a href="#出题点" class="headerlink" title="出题点"></a>出题点</h2><img src="/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/3.png" class=""><h2 id="答题切记"><a href="#答题切记" class="headerlink" title="答题切记"></a>答题切记</h2><div class="note primary">结合Context!!!!!!!!!!</div><div class="note primary">结合Context!!!!!!!!!!</div><div class="note primary">结合Context!!!!!!!!!!</div><div class="note primary">结合Context!!!!!!!!!!</div><div class="note primary">结合Context!!!!!!!!!!</div><h2 id="Unit-1-单变量"><a href="#Unit-1-单变量" class="headerlink" title="Unit 1 - 单变量"></a>Unit 1 - 单变量</h2><h3 id="描述图表题"><a href="#描述图表题" class="headerlink" title="描述图表题"></a>描述图表题</h3><ul><li><strong>Shape</strong><ul><li><strong>Symmetric Distribution</strong><ul><li>对称的分布</li><li>Median = Mean</li></ul></li><li><strong>Left-Skewed Distribution</strong><ul><li>左偏分布</li><li>数据集中在右边</li><li>Mean &lt; Median</li></ul></li><li><strong>Right-Skewed Distribution</strong><ul><li>右偏分布</li><li>数据集中在左边</li><li>Mean &gt; Median</li></ul></li><li><strong>Uniform Distribution</strong><ul><li>非常平均的</li><li>就像一条水平线一样的</li></ul></li><li><strong>Bimodal Distribution</strong><ul><li>双峰分布</li></ul></li></ul></li><li><strong>Outliers</strong><ul><li>有 / 无 / 位置？</li></ul></li><li><strong>Center</strong><ul><li>Median / Mean</li></ul></li><li><strong>Spread</strong><ul><li>IQR / Range</li></ul></li></ul><h3 id="画图题"><a href="#画图题" class="headerlink" title="画图题"></a>画图题</h3><p>比如画箱型图 Box-Plot</p><ul><li>一定要判断Outlier<ul><li>上界：Q3 + 1.5IQR</li><li>下界：Q1 - 1.5IQR</li><li>新方法：$\text {Mean} \pm 2 \text { Std Dev}$</li></ul></li></ul><h3 id="选择度量问题"><a href="#选择度量问题" class="headerlink" title="选择度量问题"></a>选择度量问题</h3><ul><li>为什么Median不Mean<ul><li>因为Median是Resistent to outliers</li></ul></li><li>为什么IQR不Standard Deviation<ul><li>因为IQR是Resistent to outliers</li></ul></li></ul><h3 id="简单计算问题"><a href="#简单计算问题" class="headerlink" title="简单计算问题"></a>简单计算问题</h3><ul><li>IQR = Q3 - Q1</li></ul><h2 id="Unit-2-双变量"><a href="#Unit-2-双变量" class="headerlink" title="Unit 2 - 双变量"></a>Unit 2 - 双变量</h2><h3 id="描述回归线的Slope和y-Intercept"><a href="#描述回归线的Slope和y-Intercept" class="headerlink" title="描述回归线的Slope和y-Intercept"></a>描述回归线的Slope和y-Intercept</h3><p>结合实际问题：</p><ul><li><strong>Slope</strong>: the amount by which y <strong>is predicted to change</strong> when x increases by 1 unit.</li><li><strong>y-Intercept</strong>: predicted value of y when x = 0.</li></ul><h3 id="读表格"><a href="#读表格" class="headerlink" title="读表格"></a>读表格</h3><img src="/2020/03/08/AP-Statistics-%E4%B8%B4%E6%AD%BB%E5%89%8D%E7%9A%84%E6%8C%A3%E6%89%8E/4.jpg" class=""><p>图中，Slope = 174.40, y-Intercept = 72.95, $R^2$ = 73.33%</p><h3 id="描述Scatter-Plot"><a href="#描述Scatter-Plot" class="headerlink" title="描述Scatter Plot"></a>描述Scatter Plot</h3><ul><li><strong>Direction</strong><ul><li>Positive / Negative</li><li>Positive: xxxx Increase as xxxx Increase</li><li>Negative: xxxx Decrease as xxxx Increase</li></ul></li><li><strong>Form</strong><ul><li>Linear / Nonlinear / Curve / …</li><li>Linear: When xxxx is increased by 1 unit, xxxx will also increase by a constant unit <strong>by average</strong>.</li></ul></li><li><strong>Strength</strong><ul><li>Strong / Moderate / Weak / …</li><li>Strong: Points are close to a line.</li><li>Weak: Points are far away to a line.</li></ul></li><li><strong>Outlier</strong><ul><li>有 / 无 / 位置?</li></ul></li></ul><h3 id="描述-R-2-Coefficient-of-Determination"><a href="#描述-R-2-Coefficient-of-Determination" class="headerlink" title="描述$R^2$ (Coefficient of Determination)"></a>描述$R^2$ (Coefficient of Determination)</h3><p>About $R^2$ of the varaibility of xxxxxx can be accounted for by the linear relationship between xxxxxx and xxxxxx.</p><h3 id="描述-r-Correlation"><a href="#描述-r-Correlation" class="headerlink" title="描述$r$ (Correlation)"></a>描述$r$ (Correlation)</h3><ul><li><strong>Definition</strong> $r$ is a measure of the direction and strength of the linear relationship between two quantitative variables.</li><li>$-1≤r≤1$</li><li>$r &gt; 0$: Positive Association</li><li>$r &lt; 0$: Negative Association</li><li>越Strong，绝对值越大</li><li>但是绝对值越大，不一定越Strong，因为不一定成线性关系</li></ul><h3 id="Extrapolation-越界"><a href="#Extrapolation-越界" class="headerlink" title="Extrapolation - 越界"></a>Extrapolation - 越界</h3><p>Explain不能推广（就是越界）的答题格式：<br>No, This is extrapolation beyond the …. data. xxxxxxx data were not investigated.</p><h3 id="Outlier-High-Leverage-Point的判断和影响"><a href="#Outlier-High-Leverage-Point的判断和影响" class="headerlink" title="Outlier / High Leverage Point的判断和影响"></a>Outlier / High Leverage Point的判断和影响</h3><div class="note primary">Outlier：Residual比较大的点 (Large Risidual)</div><div class="note info">High Leverage Point: 水平方向上离得很远的点 (A high-leverage point in regression has a substantially larger or smaller x-value than the other observations have.)</div><div class="note success">两者都是Influential Points</div><h3 id="双变量的计算问题"><a href="#双变量的计算问题" class="headerlink" title="双变量的计算问题"></a>双变量的计算问题</h3><script type="math/tex; mode=display">\text {residual} = y - \hat y</script><h2 id="Unit-3-Collecting-Data"><a href="#Unit-3-Collecting-Data" class="headerlink" title="Unit 3 - Collecting Data"></a>Unit 3 - Collecting Data</h2><h3 id="描述抽样方法"><a href="#描述抽样方法" class="headerlink" title="描述抽样方法"></a>描述抽样方法</h3><ol><li><strong>SRS - Simple Random Sample</strong>: Label the subjects (students, patients, etc.) from 1 to N (N = population size). Use random number generator in the calculator randInt(1, N) to generate n (n = sample size) <strong>different</strong> numbers and select these n corresponding subjects (students, patients, etc.) for the sample.</li><li><strong>Stratified Random Sample</strong>: In each strata (gender, plots, etc.), label the individuals (students, trees, etc.) in this strata from 1 to n (n is the number of individuals in this strata). Use randInt(1, n) to generate m <strong>different</strong> numbers and select these m different numbers for the sample. Repeat this procedure for every strata (genders, plots, etc.).<ul><li>注：每个Stata内部的差异越小越好，不同Stata之间的差异越大越好，最终在每个Stata的内部抽样</li></ul></li><li><strong>Cluster Random Sample</strong>: Label all the clusters (plots, gender, etc.) from 1 to n (n = total number of clusters). Use random number generator in the calculator randInt(1, n) to generate m <strong>different</strong> numbers. Select <strong>all</strong> the individuals in these m corresponding clusters for the sample.<ul><li>注：每个Cluster内部差异越大越好，不同Cluster之间的差异越小越好，最终抽取几个Cluster</li></ul></li></ol><h3 id="比较抽样方法"><a href="#比较抽样方法" class="headerlink" title="比较抽样方法"></a>比较抽样方法</h3><ul><li>Cluster的优点：省事. Easier to obtain.</li><li>Stratified的有点：Low Variability. result in a better representative of the population.</li></ul><h3 id="说明某种误差带来的问题"><a href="#说明某种误差带来的问题" class="headerlink" title="说明某种误差带来的问题"></a>说明某种误差带来的问题</h3><ul><li><strong>Selection Bias</strong><ul><li><strong>Under Coverage</strong>: 覆盖不全</li></ul></li><li><strong>Non-selection Bias</strong>:<ul><li><strong>Non-response Bias</strong>: 样本没有回复，比如说人联系不上或者拒绝回答</li><li><strong>Response Bias</strong>: 骗人</li><li><strong>Wording of Questions</strong>: 用词不当造成的误差</li></ul></li></ul><h3 id="Experiment和Observational-Study的区别"><a href="#Experiment和Observational-Study的区别" class="headerlink" title="Experiment和Observational Study的区别"></a>Experiment和Observational Study的区别</h3><ul><li>Experiment: 人为施加措施，attempt to impose treatment</li><li>Observational Study: 只是看</li></ul><h3 id="Language-of-Experiment"><a href="#Language-of-Experiment" class="headerlink" title="Language of Experiment"></a>Language of Experiment</h3><ul><li>Treatment: 干的事情</li><li>Experimental Units: The smallest collection of individuals to which treatments are applied. 比如说，在不同瓶子里喷洒农药看虫子的存活情况中，Experimental Units是这些瓶子。</li><li>Response Variable: 反馈的变量</li></ul><h3 id="如何Random-Assignment"><a href="#如何Random-Assignment" class="headerlink" title="如何Random Assignment"></a>如何Random Assignment</h3><ol><li>标号</li><li>计算器随机生成</li><li>根据生成的数来assign</li></ol><h3 id="Random-Assignment-的好处"><a href="#Random-Assignment-的好处" class="headerlink" title="Random Assignment 的好处"></a>Random Assignment 的好处</h3><p>防止 Confounding Variables 影响实验结果</p><h3 id="Control-Group"><a href="#Control-Group" class="headerlink" title="Control Group"></a>Control Group</h3><p>A Group that is not assigned of any treatment.</p><h3 id="Control-Group-的好处"><a href="#Control-Group-的好处" class="headerlink" title="Control Group 的好处"></a>Control Group 的好处</h3><p>A control group gives the researchers a comparison group to be used to evaluate the effectiveness of the treatments (medication, therapy, etc.), in comparison with normal effect (context) of control group on the response variable (context).</p><h3 id="Randomized-Blocked-Design"><a href="#Randomized-Blocked-Design" class="headerlink" title="Randomized Blocked Design"></a>Randomized Blocked Design</h3><p>把对象根据不同的feature进行分组，然后在组内进行random的抽取</p><h3 id="Randomized-Blocked-Design-的好处"><a href="#Randomized-Blocked-Design-的好处" class="headerlink" title="Randomized Blocked Design 的好处"></a>Randomized Blocked Design 的好处</h3><p>lower 组内的 Variability</p><h3 id="是否可以Single-Blind-Double-Blind"><a href="#是否可以Single-Blind-Double-Blind" class="headerlink" title="是否可以Single-Blind / Double-Blind"></a>是否可以Single-Blind / Double-Blind</h3><h4 id="单盲（single-blind）"><a href="#单盲（single-blind）" class="headerlink" title="单盲（single blind）"></a>单盲（single blind）</h4><ul><li>只有研究者了解分组情况，研究对象不知道自己是试验组还是对照组。</li><li>这种盲法的优点是研究者可以更好地观察了解研究对象，在必须时可以及时恰当地处理研究对象可能发生的意外问题，使研究对象的安全得到保障。</li><li>缺点是避免不了研究者方面带来的主观偏倚，易造成试验组和对照组的处理不均衡。</li></ul><h4 id="双盲（Double-Blind）"><a href="#双盲（Double-Blind）" class="headerlink" title="双盲（Double Blind）"></a>双盲（Double Blind）</h4><p>双盲试验，是指在试验过程中，测验者与被测验者都不知道被测者所属的组别（实验组或对照组），分析者在分析资料时，通常也不知道正在分析的资料属于哪一组。旨在消除可能出现在实验者和参与者意识当中的主观偏差和个人偏好。在大多数情况下，双盲实验要求达到非常高的科学严格程度。</p><h2 id="Unit-4-6"><a href="#Unit-4-6" class="headerlink" title="Unit 4 - 6"></a>Unit 4 - 6</h2><h3 id="概率-算算算"><a href="#概率-算算算" class="headerlink" title="概率 - 算算算"></a>概率 - 算算算</h3><h3 id="问是不是Independent"><a href="#问是不是Independent" class="headerlink" title="问是不是Independent"></a>问是不是Independent</h3><h3 id="算的时候的格式"><a href="#算的时候的格式" class="headerlink" title="算的时候的格式"></a>算的时候的格式</h3><div class="note info">一定要定义，声明变量是代表什么</div>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h1&gt;&lt;p&gt;因为我懒，所以熬夜。&lt;/p&gt;
&lt;h1 id=&quot;概率-Probability&quot;&gt;&lt;a href=&quot;#概率-Probability&quot; class=&quot;headerlink&quot; title=&quot;概率 - Probability&quot;&gt;&lt;/a&gt;概率 - Probability&lt;/h1&gt;&lt;h2 id=&quot;大数定律-Law-of-large-number-概率的基石&quot;&gt;&lt;a href=&quot;#大数定律-Law-of-large-number-概率的基石&quot; class=&quot;headerlink&quot; title=&quot;大数定律 - Law of large number (概率的基石)&quot;&gt;&lt;/a&gt;大数定律 - Law of large number (概率的基石)&lt;/h2&gt;&lt;p&gt;If we observe more and more repetitions of any chance process, the proportion of times that a specific outcome occurs approaches a single value.&lt;/p&gt;
&lt;h2 id=&quot;概率-Probability-1&quot;&gt;&lt;a href=&quot;#概率-Probability-1&quot; class=&quot;headerlink&quot; title=&quot;概率 - Probability&quot;&gt;&lt;/a&gt;概率 - Probability&lt;/h2&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
    P(A) = \frac {\text {number of outcomes corresponding to event }A}{\text{total number of outcomes in sample space}}&lt;/script&gt;&lt;h2 id=&quot;样本空间-Sample-Space&quot;&gt;&lt;a href=&quot;#样本空间-Sample-Space&quot; class=&quot;headerlink&quot; title=&quot;样本空间 - Sample Space&quot;&gt;&lt;/a&gt;样本空间 - Sample Space&lt;/h2&gt;&lt;p&gt;所有可能的结果组成的集合。Set of all possible outcomes.&lt;/p&gt;
&lt;h2 id=&quot;概率模型-Probability-Models&quot;&gt;&lt;a href=&quot;#概率模型-Probability-Models&quot; class=&quot;headerlink&quot; title=&quot;概率模型 - Probability Models&quot;&gt;&lt;/a&gt;概率模型 - Probability Models&lt;/h2&gt;&lt;p&gt;样本空间 $S$ 以及每个结果说对应的概率。&lt;/p&gt;</summary>
    
    
    
    <category term="Statistics" scheme="http://gyrojeff.moe/categories/Statistics/"/>
    
    
    <category term="Math" scheme="http://gyrojeff.moe/tags/Math/"/>
    
    <category term="AP" scheme="http://gyrojeff.moe/tags/AP/"/>
    
    <category term="Statistics" scheme="http://gyrojeff.moe/tags/Statistics/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu虚拟机调教 - 4</title>
    <link href="http://gyrojeff.moe/2020/03/07/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-4/"/>
    <id>http://gyrojeff.moe/2020/03/07/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-4/</id>
    <published>2020-03-07T04:10:43.000Z</published>
    <updated>2020-09-14T23:58:08.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="无所事事-瞎折腾"><a href="#无所事事-瞎折腾" class="headerlink" title="无所事事 - 瞎折腾"></a>无所事事 - 瞎折腾</h1><h1 id="npm安装"><a href="#npm安装" class="headerlink" title="npm安装"></a>npm安装</h1><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install npm</span><br></pre></td></tr></table></figure><p>VSCode 插件<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install vsce -g</span><br></pre></td></tr></table></figure><br>Hexo博客<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install hexo -g</span><br></pre></td></tr></table></figure></p><a id="more"></a><p>VSCode 插件代码生成器<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm i -g npm</span><br></pre></td></tr></table></figure></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install -g yo</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo npm install -g yo generator-code</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;无所事事-瞎折腾&quot;&gt;&lt;a href=&quot;#无所事事-瞎折腾&quot; class=&quot;headerlink&quot; title=&quot;无所事事 - 瞎折腾&quot;&gt;&lt;/a&gt;无所事事 - 瞎折腾&lt;/h1&gt;&lt;h1 id=&quot;npm安装&quot;&gt;&lt;a href=&quot;#npm安装&quot; class=&quot;headerlink&quot; title=&quot;npm安装&quot;&gt;&lt;/a&gt;npm安装&lt;/h1&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo apt install npm&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;VSCode 插件&lt;br&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo npm install vsce -g&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;br&gt;Hexo博客&lt;br&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo npm install hexo -g&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/categories/Ubuntu/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/tags/Ubuntu/"/>
    
    <category term="VSCode" scheme="http://gyrojeff.moe/tags/VSCode/"/>
    
    <category term="npm" scheme="http://gyrojeff.moe/tags/npm/"/>
    
    <category term="node.js" scheme="http://gyrojeff.moe/tags/node-js/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu虚拟机调教 - 3</title>
    <link href="http://gyrojeff.moe/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-3/"/>
    <id>http://gyrojeff.moe/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-3/</id>
    <published>2020-03-06T13:15:35.000Z</published>
    <updated>2020-09-14T23:58:04.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="人生苦短，我选择LaTeX"><a href="#人生苦短，我选择LaTeX" class="headerlink" title="人生苦短，我选择LaTeX"></a>人生苦短，我选择LaTeX</h1><h2 id="LaTeX安装"><a href="#LaTeX安装" class="headerlink" title="LaTeX安装"></a>LaTeX安装</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install texlive</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install latex-cjk-all</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install texlive-full</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install texlive-xetex</span><br></pre></td></tr></table></figure><a id="more"></a><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install tex-live-lang-chinese</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install texstudio</span><br></pre></td></tr></table></figure><h2 id="VSCode-整治"><a href="#VSCode-整治" class="headerlink" title="VSCode 整治"></a>VSCode 整治</h2><p>安装LaTeX Workshop插件</p><p>安装LaTeX Snippets插件</p><p>打开设置，输入：<br><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;latex-workshop.synctex.afterBuild.enabled&quot;</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">&quot;latex-workshop.view.pdf.viewer&quot;</span>: <span class="string">&quot;tab&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;latex-workshop.latex.tools&quot;</span>: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="comment">// 编译工具和命令</span></span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;xelatex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;command&quot;</span>: <span class="string">&quot;xelatex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;args&quot;</span>: [</span><br><span class="line">                <span class="string">&quot;-synctex=1&quot;</span>,</span><br><span class="line">                <span class="string">&quot;-interaction=nonstopmode&quot;</span>,</span><br><span class="line">                <span class="string">&quot;-file-line-error&quot;</span>,</span><br><span class="line">                <span class="string">&quot;-pdf&quot;</span>,</span><br><span class="line">                <span class="string">&quot;%DOCFILE%&quot;</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;,</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;pdflatex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;command&quot;</span>: <span class="string">&quot;pdflatex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;args&quot;</span>: [</span><br><span class="line">                <span class="string">&quot;-synctex=1&quot;</span>,</span><br><span class="line">                <span class="string">&quot;-interaction=nonstopmode&quot;</span>,</span><br><span class="line">                <span class="string">&quot;-file-line-error&quot;</span>,</span><br><span class="line">                <span class="string">&quot;%DOCFILE%&quot;</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;,</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;bibtex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;command&quot;</span>: <span class="string">&quot;bibtex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;args&quot;</span>: [</span><br><span class="line">                <span class="string">&quot;%DOCFILE%&quot;</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">    ],</span><br><span class="line">    <span class="attr">&quot;latex-workshop.latex.recipes&quot;</span>: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;xelatex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;tools&quot;</span>: [</span><br><span class="line">                <span class="string">&quot;xelatex&quot;</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;,</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;xe-&gt;bib-&gt;xe-&gt;xe&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;tools&quot;</span>: [</span><br><span class="line">                <span class="string">&quot;xelatex&quot;</span>,</span><br><span class="line">                <span class="string">&quot;bibtex&quot;</span>,</span><br><span class="line">                <span class="string">&quot;xelatex&quot;</span>,</span><br><span class="line">                <span class="string">&quot;xelatex&quot;</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">    ],</span><br><span class="line">    <span class="attr">&quot;editor.fontFamily&quot;</span>: <span class="string">&quot;&#x27;Consolas&#x27;, &#x27;&#x27;, monospace, &#x27;Droid Sans Fallback&#x27;&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;window.zoomLevel&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="attr">&quot;editor.renderWhitespace&quot;</span>: <span class="string">&quot;boundary&quot;</span>,</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    <span class="attr">&quot;editor.suggestSelection&quot;</span>: <span class="string">&quot;first&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;editor.snippetSuggestions&quot;</span>: <span class="string">&quot;top&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;editor.suggest.showWords&quot;</span>: <span class="literal">false</span>,</span><br><span class="line">    <span class="attr">&quot;editor.detectIndentation&quot;</span>: <span class="literal">false</span>,</span><br><span class="line">    <span class="attr">&quot;editor.suggest.snippetsPreventQuickSuggestions&quot;</span>: <span class="literal">false</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;人生苦短，我选择LaTeX&quot;&gt;&lt;a href=&quot;#人生苦短，我选择LaTeX&quot; class=&quot;headerlink&quot; title=&quot;人生苦短，我选择LaTeX&quot;&gt;&lt;/a&gt;人生苦短，我选择LaTeX&lt;/h1&gt;&lt;h2 id=&quot;LaTeX安装&quot;&gt;&lt;a href=&quot;#LaTeX安装&quot; class=&quot;headerlink&quot; title=&quot;LaTeX安装&quot;&gt;&lt;/a&gt;LaTeX安装&lt;/h2&gt;&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo apt install texlive&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo apt-get install latex-cjk-all&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo apt-get install texlive-full&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;figure class=&quot;highlight bash&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;sudo apt-get install texlive-xetex&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;</summary>
    
    
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/categories/Ubuntu/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/tags/Ubuntu/"/>
    
    <category term="LaTeX" scheme="http://gyrojeff.moe/tags/LaTeX/"/>
    
    <category term="VSCode" scheme="http://gyrojeff.moe/tags/VSCode/"/>
    
  </entry>
  
  <entry>
    <title>200306-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/06/200306-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/06/200306-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-06T08:13:38.000Z</published>
    <updated>2020-09-22T12:59:14.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-6-地理课"><a href="#3-6-地理课" class="headerlink" title="3/6 地理课"></a>3/6 地理课</h1><h2 id="发达国家人口问题"><a href="#发达国家人口问题" class="headerlink" title="发达国家人口问题"></a>发达国家人口问题</h2><blockquote><p>瑞典是第一个老年人口大于少年儿童人口的国家</p></blockquote><ul><li><p>人口老龄化</p><ul><li>劳动力不足、社会赡养费用上升，财政压力增大，青壮年负担加重</li></ul></li><li><p>人口负增长</p><ul><li>加大就业、资源、环境、教育、医疗卫生等压力</li></ul></li></ul><a id="more"></a><ul><li>老龄化原因及政策<script type="math/tex; mode=display">  \begin{aligned}  老龄化原因\begin {cases}  生活水平和医疗水平高，人均寿命长，老年人比重上升 \\  社会保障制度健全，生育观念改变  \end {cases} &\Rightarrow \begin {cases}  出生率低，死亡率回升，自然增长率下降\\青少年人口比重下降\\人口规模不再扩大，趋于萎缩  \end {cases} \\  &\downarrow \\  鼓励生育和移民，延迟&退休，健全养老保障体系  \end{aligned}</script></li></ul><h2 id="发展中国家的人口问题"><a href="#发展中国家的人口问题" class="headerlink" title="发展中国家的人口问题"></a>发展中国家的人口问题</h2><ul><li>人口出生率高<ul><li>世界每年$95\%$的新增人口来自发展中国家</li></ul></li><li>自然增长过快<ul><li>加大就业、资源、环境、教育、医疗卫生等压力</li></ul></li><li>少年儿童比重大<ul><li>产生巨大的人口增长惯性，波及未来几十年的人口、就业、经济等形势</li></ul></li><li>带来的问题及政策</li></ul><script type="math/tex; mode=display">人口增长 \rightarrow 社会贫困 \rightarrow 环境恶化 \rightarrow \cdots  \Rightarrow 采取积极地控制人口增长的政策</script><h2 id="我国的人口国情和人口政策"><a href="#我国的人口国情和人口政策" class="headerlink" title="我国的人口国情和人口政策"></a>我国的人口国情和人口政策</h2><ol><li>人口国情<ul><li>人口众多</li><li>增长率不高</li><li>现阶段基本国情：人口众多，未富先老，对资源、环境造成巨大压力</li></ul></li><li>人口政策<ul><li>上世纪80年代：实行控制人口数量、提高人口素质、实行计划生育的基本国策（优生优育幼教，利国利民利家）</li><li>不断调整和变化</li></ul></li><li>我国人口主要问题<ul><li>自然增长率低，但人口基数大，每年净增长高<ul><li>年净增长多：800万~1000万</li><li>地区增长不平衡：城市缓慢，农村较快</li></ul></li><li>人口素质有待提高，人才短缺问题突出<ul><li>受教育程度比发达国家低</li><li>人才短缺成为之月我国产业升级和科技创新的瓶颈</li></ul></li><li>人口老龄化问题日趋严重<ul><li>中国老龄化的特点<ul><li>老龄化发展速度最快、规模大 </li><li>未富先老</li></ul></li><li>人口老龄化带来的问题<ul><li>社会养老负担重</li><li>劳动力的活力降低</li><li>社会消费刺激不足</li></ul></li></ul></li><li>流动人口带来的社会问题<ul><li>城市：交通、治安、就业及教育、医疗等社会保障压力大</li><li>乡村：“妇老农业”、“留守子女”等问题</li></ul></li></ul></li></ol><h2 id="小结：我国人口问题及对策"><a href="#小结：我国人口问题及对策" class="headerlink" title="小结：我国人口问题及对策"></a>小结：我国人口问题及对策</h2><h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><ul><li>人口基数大，年净增长多</li><li>人口素质有待提高，人才短缺问题突出</li><li>人口老龄化问题日趋严重（未富先老）</li><li>人口流动带来的社会问题</li></ul><h3 id="对策"><a href="#对策" class="headerlink" title="对策"></a>对策</h3><ul><li>控制人口数量，提高人口素质，改善人口结构</li><li>瑞驰退休年龄，完善社会保障制度</li><li>引导人口合理分布，促进人口与社会的可持续性发展</li><li>计划生育政策保持动态调整</li></ul><h2 id="案例分析：上海人口问题"><a href="#案例分析：上海人口问题" class="headerlink" title="案例分析：上海人口问题"></a>案例分析：上海人口问题</h2><ul><li>90年低谷：新中国成立前后，战阵原因出生率比较低，死亡率比较高</li><li>00年大幅增加：发展较快，吸纳大量外来人口</li><li>上海的人口年龄结构老化程度在全国最高</li><li>上海的人口问题：人口的负增长及人口老龄化程度已经达到发达国家的平均水平，赡养压力巨大。外来人口对上海老龄化有一定减缓。</li><li>上海的人口政策：调整计划生育政策，完善各项社会保障体系。</li></ul><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">人口问题 \begin {cases}发达国家 \begin {cases}人口老龄化 \\ 负增长\end {cases} \\发展中国家 \begin {cases}出生率高 \\ 自然增长快 \\ 少年儿童比重大\end {cases} \\我国的人口问题 \begin {cases}基数大，年净增多 \\ 素质待提高，人才短缺 \\ 老龄化日趋严重 \\ 流动人口带来的社会问题\end {cases}\Rightarrow 人口国情、人口政策\end {cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-6-地理课&quot;&gt;&lt;a href=&quot;#3-6-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/6 地理课&quot;&gt;&lt;/a&gt;3/6 地理课&lt;/h1&gt;&lt;h2 id=&quot;发达国家人口问题&quot;&gt;&lt;a href=&quot;#发达国家人口问题&quot; class=&quot;headerlink&quot; title=&quot;发达国家人口问题&quot;&gt;&lt;/a&gt;发达国家人口问题&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;瑞典是第一个老年人口大于少年儿童人口的国家&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;人口老龄化&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;劳动力不足、社会赡养费用上升，财政压力增大，青壮年负担加重&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;人口负增长&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;加大就业、资源、环境、教育、医疗卫生等压力&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu虚拟机调教 - 2</title>
    <link href="http://gyrojeff.moe/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/"/>
    <id>http://gyrojeff.moe/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/</id>
    <published>2020-03-06T06:35:51.000Z</published>
    <updated>2020-09-15T01:01:06.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="黎明-Ubuntu虚拟机调教-2"><a href="#黎明-Ubuntu虚拟机调教-2" class="headerlink" title="黎明 - Ubuntu虚拟机调教 - 2"></a>黎明 - Ubuntu虚拟机调教 - 2</h1><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>初次的混沌之后，终将迎来黎明。搭梯子+美化记录（折腾了无数次Snapshot）</p><h2 id="梯子的配置"><a href="#梯子的配置" class="headerlink" title="梯子的配置"></a>梯子的配置</h2><p>本来是安装ElectronSSR的，但是由于是虚拟机环境，配置失败。现有以下解决方法：</p><h3 id="配置Mac的ShadowSocket"><a href="#配置Mac的ShadowSocket" class="headerlink" title="配置Mac的ShadowSocket"></a>配置Mac的ShadowSocket</h3><a id="more"></a><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/1.jpg" class=""><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/2.jpg" class=""><h3 id="虚拟机网络设置"><a href="#虚拟机网络设置" class="headerlink" title="虚拟机网络设置"></a>虚拟机网络设置</h3><p>在Parallel当中，将网络选择为桥接 -&gt; Default</p><p>在VMWare中，网络：桥接 -&gt; 自动</p><h3 id="Ubuntu网络设置"><a href="#Ubuntu网络设置" class="headerlink" title="Ubuntu网络设置"></a>Ubuntu网络设置</h3><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/3.jpg" class=""><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/4.jpg" class=""><h2 id="美化"><a href="#美化" class="headerlink" title="美化"></a>美化</h2><h3 id="安装Chrome插件"><a href="#安装Chrome插件" class="headerlink" title="安装Chrome插件"></a>安装Chrome插件</h3><p>梯子挂好之后，打开如下链接：</p><p><a href="https://chrome.google.com/webstore/detail/gnome-shell-integration/gphhapmejobijbbhgpjhcjognlahblep/related">https://chrome.google.com/webstore/detail/gnome-shell-integration/gphhapmejobijbbhgpjhcjognlahblep/related</a></p><p>安装插件</p><h3 id="安装Gnome-tweaks"><a href="#安装Gnome-tweaks" class="headerlink" title="安装Gnome-tweaks"></a>安装Gnome-tweaks</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install gnome-tweaks chrome-gnome-shell</span><br></pre></td></tr></table></figure><h3 id="安装Gnome-extensions"><a href="#安装Gnome-extensions" class="headerlink" title="安装Gnome-extensions"></a>安装Gnome-extensions</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install gnome-extensions</span><br></pre></td></tr></table></figure><h3 id="安装-Dask-to-Dock"><a href="#安装-Dask-to-Dock" class="headerlink" title="安装 Dask to Dock"></a>安装 Dask to Dock</h3><p><a href="https://extensions.gnome.org/extension/307/dash-to-dock/">https://extensions.gnome.org/extension/307/dash-to-dock/</a></p><h3 id="安装-User-Themes"><a href="#安装-User-Themes" class="headerlink" title="安装 User Themes"></a>安装 User Themes</h3><p><a href="https://extensions.gnome.org/extension/19/user-themes/">https://extensions.gnome.org/extension/19/user-themes/</a></p><h3 id="安装-Remove-Dropdown-Arrows"><a href="#安装-Remove-Dropdown-Arrows" class="headerlink" title="安装 Remove Dropdown Arrows"></a>安装 Remove Dropdown Arrows</h3><p><a href="https://extensions.gnome.org/extension/800/remove-dropdown-arrows/">https://extensions.gnome.org/extension/800/remove-dropdown-arrows/</a></p><h3 id="安装-Activities-Configurator"><a href="#安装-Activities-Configurator" class="headerlink" title="安装 Activities Configurator"></a>安装 Activities Configurator</h3><p><a href="https://extensions.gnome.org/extension/358/activities-configurator/">https://extensions.gnome.org/extension/358/activities-configurator/</a></p><h3 id="在线安装方法"><a href="#在线安装方法" class="headerlink" title="在线安装方法"></a>在线安装方法</h3><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/5.jpg" class=""><h3 id="安装Adapta主题"><a href="#安装Adapta主题" class="headerlink" title="安装Adapta主题"></a>安装Adapta主题</h3><p><a href="https://www.gnome-look.org/p/1190851/">https://www.gnome-look.org/p/1190851/</a></p><p>选择deb包下载：</p><p><a href="https://www.gnome-look.org/p/1190851/startdownload?file_id=1538199555&amp;file_name=adapta-gtk-theme-colorpack_3.94.0.149.deb&amp;file_type=application/x-debian-package&amp;file_size=12494480">https://www.gnome-look.org/p/1190851/startdownload?file_id=1538199555&amp;file_name=adapta-gtk-theme-colorpack_3.94.0.149.deb&amp;file_type=application/x-debian-package&amp;file_size=12494480</a></p><p>下载后双击打开，安装。</p><p>系统搜索tweak打开优化，修改：</p><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/6.jpg" class=""><h3 id="安装Paper图标"><a href="#安装Paper图标" class="headerlink" title="安装Paper图标"></a>安装Paper图标</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo add-apt-repository -u ppa:snwh/ppa</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install paper-icon-theme</span><br></pre></td></tr></table></figure><p>还是在前面装主题的地方改图标</p><h3 id="大调试"><a href="#大调试" class="headerlink" title="大调试"></a>大调试</h3><p>调成喜欢的样子，祭出桌面图：</p><img src="/2020/03/06/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99-2/7.jpg" class=""><p>P.S. 对于没有deb包的主题，解压好，然后将文件夹移动到<code>~/.themes</code>（没有的话新建），然后再到『优化』中就有了。</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;黎明-Ubuntu虚拟机调教-2&quot;&gt;&lt;a href=&quot;#黎明-Ubuntu虚拟机调教-2&quot; class=&quot;headerlink&quot; title=&quot;黎明 - Ubuntu虚拟机调教 - 2&quot;&gt;&lt;/a&gt;黎明 - Ubuntu虚拟机调教 - 2&lt;/h1&gt;&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;初次的混沌之后，终将迎来黎明。搭梯子+美化记录（折腾了无数次Snapshot）&lt;/p&gt;
&lt;h2 id=&quot;梯子的配置&quot;&gt;&lt;a href=&quot;#梯子的配置&quot; class=&quot;headerlink&quot; title=&quot;梯子的配置&quot;&gt;&lt;/a&gt;梯子的配置&lt;/h2&gt;&lt;p&gt;本来是安装ElectronSSR的，但是由于是虚拟机环境，配置失败。现有以下解决方法：&lt;/p&gt;
&lt;h3 id=&quot;配置Mac的ShadowSocket&quot;&gt;&lt;a href=&quot;#配置Mac的ShadowSocket&quot; class=&quot;headerlink&quot; title=&quot;配置Mac的ShadowSocket&quot;&gt;&lt;/a&gt;配置Mac的ShadowSocket&lt;/h3&gt;</summary>
    
    
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/categories/Ubuntu/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/tags/Ubuntu/"/>
    
    <category term="虚拟机" scheme="http://gyrojeff.moe/tags/%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
    
    <category term="科学上网" scheme="http://gyrojeff.moe/tags/%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91/"/>
    
    <category term="Gnome" scheme="http://gyrojeff.moe/tags/Gnome/"/>
    
    <category term="美化" scheme="http://gyrojeff.moe/tags/%E7%BE%8E%E5%8C%96/"/>
    
  </entry>
  
  <entry>
    <title>Workflow小结 - 网课</title>
    <link href="http://gyrojeff.moe/2020/03/06/Workflow%E5%B0%8F%E7%BB%93-%E7%BD%91%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/06/Workflow%E5%B0%8F%E7%BB%93-%E7%BD%91%E8%AF%BE/</id>
    <published>2020-03-05T17:14:11.000Z</published>
    <updated>2020-03-12T05:25:21.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="疫情期间网课Workflow-T-T"><a href="#疫情期间网课Workflow-T-T" class="headerlink" title="疫情期间网课Workflow T^T"></a>疫情期间网课Workflow T^T</h1><h2 id="上课"><a href="#上课" class="headerlink" title="上课"></a>上课</h2><ul><li>数学：（不记笔记 逃）</li><li>物理 / 化学：GoodNotes手写 $\rightarrow$ Typora / VSCode 整理 $\rightarrow$ Hexo发布</li><li>地理 / 信息科技：上课期间使用Typora</li><li>英语 / 历史（课后XMind整理） / 语文：一言难尽……qwq</li></ul><h2 id="作业"><a href="#作业" class="headerlink" title="作业"></a>作业</h2><ul><li>纸质作业：扫描 $\rightarrow$ GoodNotes</li><li>卷子：Word2PDF $\rightarrow$ GoodNotes</li></ul><p>嘶…感觉效率低下（我现在为什么在水博客）？？？</p><a id="more"></a><blockquote><p>玩耍是人的天性<br>我们不能抑制人的天性</p></blockquote>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;疫情期间网课Workflow-T-T&quot;&gt;&lt;a href=&quot;#疫情期间网课Workflow-T-T&quot; class=&quot;headerlink&quot; title=&quot;疫情期间网课Workflow T^T&quot;&gt;&lt;/a&gt;疫情期间网课Workflow T^T&lt;/h1&gt;&lt;h2 id=&quot;上课&quot;&gt;&lt;a href=&quot;#上课&quot; class=&quot;headerlink&quot; title=&quot;上课&quot;&gt;&lt;/a&gt;上课&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;数学：（不记笔记 逃）&lt;/li&gt;
&lt;li&gt;物理 / 化学：GoodNotes手写 $\rightarrow$ Typora / VSCode 整理 $\rightarrow$ Hexo发布&lt;/li&gt;
&lt;li&gt;地理 / 信息科技：上课期间使用Typora&lt;/li&gt;
&lt;li&gt;英语 / 历史（课后XMind整理） / 语文：一言难尽……qwq&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;作业&quot;&gt;&lt;a href=&quot;#作业&quot; class=&quot;headerlink&quot; title=&quot;作业&quot;&gt;&lt;/a&gt;作业&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;纸质作业：扫描 $\rightarrow$ GoodNotes&lt;/li&gt;
&lt;li&gt;卷子：Word2PDF $\rightarrow$ GoodNotes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;嘶…感觉效率低下（我现在为什么在水博客）？？？&lt;/p&gt;</summary>
    
    
    
    <category term="随想" scheme="http://gyrojeff.moe/categories/%E9%9A%8F%E6%83%B3/"/>
    
    
    <category term="随想" scheme="http://gyrojeff.moe/tags/%E9%9A%8F%E6%83%B3/"/>
    
    <category term="小结" scheme="http://gyrojeff.moe/tags/%E5%B0%8F%E7%BB%93/"/>
    
    <category term="学习" scheme="http://gyrojeff.moe/tags/%E5%AD%A6%E4%B9%A0/"/>
    
    <category term="Workflow" scheme="http://gyrojeff.moe/tags/Workflow/"/>
    
  </entry>
  
  <entry>
    <title>200305-市历史课</title>
    <link href="http://gyrojeff.moe/2020/03/06/200305-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/06/200305-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/</id>
    <published>2020-03-05T17:01:10.000Z</published>
    <updated>2020-03-12T05:28:29.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="第一课-文明的产生与早期发展"><a href="#第一课-文明的产生与早期发展" class="headerlink" title="第一课 文明的产生与早期发展"></a>第一课 文明的产生与早期发展</h1><h2 id="文明产生的基本条件"><a href="#文明产生的基本条件" class="headerlink" title="文明产生的基本条件"></a>文明产生的基本条件</h2><h3 id="原始社会"><a href="#原始社会" class="headerlink" title="原始社会"></a>原始社会</h3><ul><li><p>采集农业</p><ul><li>特点：1、采集农田，狩猎为主</li><li>2、生产力低下，无私有财产，没有阶级<a id="more"></a></li></ul></li><li><p>种植农业</p><ul><li><p>前提</p><ul><li>农耕和畜牧业的产生</li></ul></li><li><p>社会分工</p><ul><li>农业</li><li>手工业</li><li>工商业</li></ul></li><li><p>定居生活</p><ul><li>较大的定居点发展为城市</li></ul></li></ul></li><li><p>私有制产生</p><ul><li><p>前提</p><ul><li>有剩余产品</li></ul></li><li><p>阶级出现</p><ul><li>统治阶级 VS 被统治阶级</li><li>奴隶 反抗 奴隶主-&gt;最早的阶级对抗</li></ul></li><li><p>战争</p><ul><li>争夺土地和资源</li></ul></li><li><p>国家形成 $\rightarrow$ 人类进入文明的标志（文明诞生）</p><ul><li>强制机关</li><li>君主</li><li>官僚</li></ul></li></ul></li></ul><h2 id="文明的多元文化"><a href="#文明的多元文化" class="headerlink" title="文明的多元文化"></a>文明的多元文化</h2><h3 id="两河流域"><a href="#两河流域" class="headerlink" title="两河流域"></a>两河流域</h3><ul><li><p>苏美尔文明</p><ul><li><p>地理环境</p><ul><li>大部分地区干旱少雨，幼发拉底河、底格里斯河提供充足的水源</li></ul></li><li><p>文明出现</p></li><li>城市国家</li><li><p>大一统</p><ul><li>时日：约公元前18世纪</li><li>君主：古巴比伦汉漠拉比</li></ul></li><li><p>君主专制制度</p></li><li><p>贡献</p><ul><li><p>《汉谟拉比法典》</p><ul><li><p>地位</p><ul><li>最早，较完整的成文法典</li></ul></li><li><p>内容</p><ul><li>社会结构</li><li>婚姻</li><li>土地租赁＆借贷等</li></ul></li><li><p>实质</p><ul><li>君权神授维护统治</li></ul></li></ul></li><li><p>楔形文字（最古老）</p></li><li>洪水和方舟传说</li><li>60进制</li></ul></li></ul></li></ul><h3 id="尼罗河流域"><a href="#尼罗河流域" class="headerlink" title="尼罗河流域"></a>尼罗河流域</h3><ul><li><p>古埃及文明</p><ul><li><p>地理环境</p><ul><li>尼罗河定期泛滥，交道条件</li></ul></li><li><p>统一</p><ul><li>3100BC，初步统一</li></ul></li><li><p>官僚系统</p><ul><li>法老＆其下官员</li></ul></li><li><p>贡献</p><ul><li>金字塔</li><li>象形文字</li><li>世界上第一部太阳历</li><li>莎草纸</li></ul></li></ul></li></ul><h3 id="黄河和长江流域"><a href="#黄河和长江流域" class="headerlink" title="黄河和长江流域"></a>黄河和长江流域</h3><ul><li>中华文明</li></ul><h3 id="印度河和恒河流域"><a href="#印度河和恒河流域" class="headerlink" title="印度河和恒河流域"></a>印度河和恒河流域</h3><ul><li><p>印度文明</p><ul><li><p>地理环境</p><ul><li>雨水丰沛、植被茂盛的恒河流域逐步得到开发</li></ul></li><li><p>统一</p><ul><li>公元前6世纪，恒河流域形成一系列统一国家</li></ul></li><li><p>种姓制度</p><ul><li><p>特点</p><ul><li>贵贱分明、职业世袭、法律地位不平等</li></ul></li><li><p>严格等级制度</p><ul><li>婆罗门</li><li>刹帝利</li><li>吠舍</li><li>首陀罗</li><li>贱民</li></ul></li></ul></li><li><p>佛教</p><ul><li>对种姓制度形成一定程度的冲击</li></ul></li></ul></li></ul><h3 id="巴尔干半岛南部"><a href="#巴尔干半岛南部" class="headerlink" title="巴尔干半岛南部"></a>巴尔干半岛南部</h3><ul><li><p>希腊文明</p><ul><li><p>地理环境</p><ul><li>山多，平原少，不利于地区性大国兴起</li></ul></li><li><p>城邦</p><ul><li>公元前8~6世纪，城邦逐渐发展</li><li><p>代表</p><ul><li>雅典</li><li>斯巴达</li></ul></li><li><p>特点</p><ul><li>小国寡民</li></ul></li></ul></li><li><p>民主政治</p><ul><li><p>实质</p><ul><li>建立在奴隶制基础上少数人的民主</li></ul></li></ul></li><li><p>贡献</p><ul><li>希腊神话</li><li>等</li></ul></li></ul></li></ul><p>MindMap: </p><img src="/2020/03/06/200305-%E5%B8%82%E5%8E%86%E5%8F%B2%E8%AF%BE/1.png" class="">]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;第一课-文明的产生与早期发展&quot;&gt;&lt;a href=&quot;#第一课-文明的产生与早期发展&quot; class=&quot;headerlink&quot; title=&quot;第一课 文明的产生与早期发展&quot;&gt;&lt;/a&gt;第一课 文明的产生与早期发展&lt;/h1&gt;&lt;h2 id=&quot;文明产生的基本条件&quot;&gt;&lt;a href=&quot;#文明产生的基本条件&quot; class=&quot;headerlink&quot; title=&quot;文明产生的基本条件&quot;&gt;&lt;/a&gt;文明产生的基本条件&lt;/h2&gt;&lt;h3 id=&quot;原始社会&quot;&gt;&lt;a href=&quot;#原始社会&quot; class=&quot;headerlink&quot; title=&quot;原始社会&quot;&gt;&lt;/a&gt;原始社会&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;采集农业&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;特点：1、采集农田，狩猎为主&lt;/li&gt;
&lt;li&gt;2、生产力低下，无私有财产，没有阶级</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="History" scheme="http://gyrojeff.moe/tags/History/"/>
    
  </entry>
  
  <entry>
    <title>200305-市信息课</title>
    <link href="http://gyrojeff.moe/2020/03/05/200305-%E5%B8%82%E4%BF%A1%E6%81%AF%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/05/200305-%E5%B8%82%E4%BF%A1%E6%81%AF%E8%AF%BE/</id>
    <published>2020-03-05T12:07:26.000Z</published>
    <updated>2020-09-22T09:40:58.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-5-信息科技"><a href="#3-5-信息科技" class="headerlink" title="3/5 信息科技"></a>3/5 信息科技</h1><h2 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h2><ul><li><p>算术运算符</p><ul><li>1 乘幂：^</li><li>2 取负：-</li><li>3 乘：*</li><li>3 除：/</li><li>4 整除：\</li><li>5 取模：Mod</li><li>6 加：+</li><li>6 减：-<a id="more"></a></li></ul></li><li><p>关系运算符</p><ul><li>7 相等：=</li><li>7 不相等：&lt;&gt;</li><li>7 大于：&lt;</li><li>7 大于：&gt;</li><li>7 小于等于：&lt;=</li><li>7 大于等于：&gt;=</li></ul><blockquote><p>字符串比较依据：ASCII码</p></blockquote></li><li><p>逻辑运算符</p><ul><li>8 非：Not</li><li>9 与：And</li><li>10 或：Or</li></ul></li></ul><h2 id="运算符优先级"><a href="#运算符优先级" class="headerlink" title="运算符优先级"></a>运算符优先级</h2><script type="math/tex; mode=display">算术运算符>关系运算符>逻辑运算符</script><h2 id="函数"><a href="#函数" class="headerlink" title="函数"></a>函数</h2><ul><li>Abs(x)：求x的绝对值</li><li>Sqr(x)：求x的算术平方根</li><li>Int(x)：$\lfloor x \rfloor$</li></ul><h2 id="表达式"><a href="#表达式" class="headerlink" title="表达式"></a>表达式</h2><p>是由数字、算符、数字分组符号（括号）、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-5-信息科技&quot;&gt;&lt;a href=&quot;#3-5-信息科技&quot; class=&quot;headerlink&quot; title=&quot;3/5 信息科技&quot;&gt;&lt;/a&gt;3/5 信息科技&lt;/h1&gt;&lt;h2 id=&quot;运算符&quot;&gt;&lt;a href=&quot;#运算符&quot; class=&quot;headerlink&quot; title=&quot;运算符&quot;&gt;&lt;/a&gt;运算符&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;算术运算符&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 乘幂：^&lt;/li&gt;
&lt;li&gt;2 取负：-&lt;/li&gt;
&lt;li&gt;3 乘：*&lt;/li&gt;
&lt;li&gt;3 除：/&lt;/li&gt;
&lt;li&gt;4 整除：\&lt;/li&gt;
&lt;li&gt;5 取模：Mod&lt;/li&gt;
&lt;li&gt;6 加：+&lt;/li&gt;
&lt;li&gt;6 减：-</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="信息科技" scheme="http://gyrojeff.moe/tags/%E4%BF%A1%E6%81%AF%E7%A7%91%E6%8A%80/"/>
    
  </entry>
  
  <entry>
    <title>200305-10-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/05/200305-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/05/200305-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-05T07:45:19.000Z</published>
    <updated>2020-09-22T12:59:12.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-5-3-10-化学课"><a href="#3-5-3-10-化学课" class="headerlink" title="3/5 + 3/10 化学课"></a>3/5 + 3/10 化学课</h1><h2 id="二氧化硫的物理性质"><a href="#二氧化硫的物理性质" class="headerlink" title="二氧化硫的物理性质"></a>二氧化硫的物理性质</h2><ol><li>无色具有刺激性气味气体</li><li>有毒</li><li>$\rho_{\ce{SO2}} &gt; \rho_{空气}$</li><li>易溶于水，$1$体积水溶解$40$体积$\ce{SO2}$</li><li>易液化</li></ol><h2 id="二氧化硫的用途"><a href="#二氧化硫的用途" class="headerlink" title="二氧化硫的用途"></a>二氧化硫的用途</h2><p>杀菌、防腐</p><a id="more"></a><h2 id="二氧化硫的化学性质"><a href="#二氧化硫的化学性质" class="headerlink" title="二氧化硫的化学性质"></a>二氧化硫的化学性质</h2><ol><li><p>与水发生反应生成亚硫酸：</p><script type="math/tex; mode=display">     \ce {SO2 + H2O <=> H2SO3}</script><p>亚硫酸是弱酸，$\ce{SO2}$为酸性氧化物（亚硫酐），二元弱酸</p><script type="math/tex; mode=display">     \ce {H2SO2 <=> H+ + HSO3-}</script><script type="math/tex; mode=display">     \ce {HSO3- <=> H+ + SO3^{2-}}</script><blockquote><p>亚硫酸的酸性强于碳酸</p></blockquote></li><li><p>与碱反应（酸性氧化物的通性）</p><script type="math/tex; mode=display">     \ce {2NaOH + SO2 -> Na2SO3 + H2O~~~~~~~~~NaOH过量}</script><script type="math/tex; mode=display">     \ce {NaOH + SO2 -> NaHSO3~~~~~~~~~SO2过量}</script><p> 其中：</p><script type="math/tex; mode=display">     \ce {Na2SO3 + SO2 + H2O -> 2NaHSO3}</script><p> 对于澄清石灰水也有类似地结论：</p><script type="math/tex; mode=display">     \ce {Ca(OH)2 + SO2 -> CaSO3 v + H2O~~~~~~~~~Ca(OH)2过量}</script><p> $\ce {SO2}$逐滴加入澄清石灰水中可以观察到产生白色沉淀，方程式如上。</p><script type="math/tex; mode=display">     \ce {Ca(OH)2 + 2SO2 -> Ca(HSO3)2~~~~~~~~~SO2过量}</script></li><li><p>漂白性：二氧化硫可以使品红溶液褪色。不稳定，加热后又变红，有二氧化硫放出。此为二氧化硫的特性，可用于检验二氧化硫。</p></li><li><p>还原性: $\overset{+4}{\ce S} \rightarrow \overset {+6}{\ce S}$</p><p> 溴水，酸性高锰酸钾，过氧化氢</p><script type="math/tex; mode=display"> \ce{SO_2 + H2O2 -> H2SO4}</script><script type="math/tex; mode=display"> \ce{SO2 + Br2 + 2H2O -> H2SO4 + 2HBr}</script><p> 二氧化硫可以被氧气氧化</p><script type="math/tex; mode=display"> \ce {2SO2 + O2 <=>[催化剂][\Delta] 2SO3}</script><p> 亚硫酸在空气中，酸性增强</p><script type="math/tex; mode=display"> \ce {2H2SO3 + O2 -> 2H2SO4}</script><p> 亚硫酸盐也可以被氧化变成硫酸盐</p><script type="math/tex; mode=display"> \ce {2Na2SO3 + O2 -> 2Na2SO4}</script><script type="math/tex; mode=display"> \ce {Na2SO3 + Cl2 + H2O -> Na2SO4 + 2HCl}</script></li><li><p>氧化性（$\overset{+4}{\ce S} \rightarrow \overset {0}{\ce S}$）</p><script type="math/tex; mode=display"> \ce{SO2 + 2H2S -> 3S v + 2H2O}</script></li></ol><h2 id="二氧化硫的实验室制备"><a href="#二氧化硫的实验室制备" class="headerlink" title="二氧化硫的实验室制备"></a>二氧化硫的实验室制备</h2><p>反应原理：</p><script type="math/tex; mode=display">    \ce {Na2SO3 + H2SO4 -> Na2SO4 + SO2 ^ + H2O}</script><p>气体发生装置：$\color{red}{固+液}$</p><p>气体收集装置：向上排空气法，尾气用氢氧化钠溶液吸收。</p><h2 id="三氧化硫（-ce-SO3-）"><a href="#三氧化硫（-ce-SO3-）" class="headerlink" title="三氧化硫（$\ce {SO3}$）"></a>三氧化硫（$\ce {SO3}$）</h2><p>酸性氧化物（硫酐）</p><p>熔点：$16.8^\circ \text C$</p><p>$\color{red}{与水反应剧烈，放出大量热}$</p><script type="math/tex; mode=display">    \ce {SO3 + H2O -> H2SO4}</script><p>与碱反应：</p><script type="math/tex; mode=display">    \ce {SO3 + 2NaOH -> Na2SO4 + H2O}</script><h2 id="酸雨"><a href="#酸雨" class="headerlink" title="酸雨"></a>酸雨</h2><ol><li>定义：$pH&lt;5.6$的降水被称为酸雨。<br>未污染的雨水pH一般小于$7$大于$5.6$<script type="math/tex; mode=display"> \ce {H2O + CO2 <=> H2O}</script>溶解了$\ce {SO2}$的雨水酸性增强<script type="math/tex; mode=display"> \ce {SO2 + H2O <=> H2SO3}</script></li><li>形成途径：<ul><li>先氧化后水合<script type="math/tex; mode=display">   \ce {2SO2 + O2 ->[催化剂][\Delta]2SO3}</script><script type="math/tex; mode=display">   \ce {SO3 + H2O -> H2SO4}</script></li><li>先水合后氧化<script type="math/tex; mode=display">   \ce {SO2 + H2O -> H2SO3}</script><script type="math/tex; mode=display">   \ce {2H2SO3 + O2 -> 2H2SO4}</script></li></ul></li><li>酸雨防治<script type="math/tex; mode=display"> 含硫燃料 \xrightarrow{燃料}含二氧化硫的尾气</script><ul><li>尾气减排：碱液吸收<script type="math/tex; mode=display">   \ce {2NaOH + SO2 -> Na2SO3}</script><script type="math/tex; mode=display">   \ce{Na2SO3 + SO2 + H2O -> 2NaHSO3}</script></li><li>燃料脱硫：钙基固硫<script type="math/tex; mode=display">   \ce {S + O2 ->[\Delta] SO2}</script><script type="math/tex; mode=display">   \ce {CaO + SO2 ->[\Delta] CaSO3}</script><script type="math/tex; mode=display">   \ce {2CaSO3 + O2 ->[\Delta] 2CaSO4}</script><script type="math/tex; mode=display">   \ce {2CaO + 2SO2 + O2 ->[\Delta] 2CaSO4}</script></li><li>能源替代</li></ul></li></ol>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-5-3-10-化学课&quot;&gt;&lt;a href=&quot;#3-5-3-10-化学课&quot; class=&quot;headerlink&quot; title=&quot;3/5 + 3/10 化学课&quot;&gt;&lt;/a&gt;3/5 + 3/10 化学课&lt;/h1&gt;&lt;h2 id=&quot;二氧化硫的物理性质&quot;&gt;&lt;a href=&quot;#二氧化硫的物理性质&quot; class=&quot;headerlink&quot; title=&quot;二氧化硫的物理性质&quot;&gt;&lt;/a&gt;二氧化硫的物理性质&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;无色具有刺激性气味气体&lt;/li&gt;
&lt;li&gt;有毒&lt;/li&gt;
&lt;li&gt;$\rho_{\ce{SO2}} &amp;gt; \rho_{空气}$&lt;/li&gt;
&lt;li&gt;易溶于水，$1$体积水溶解$40$体积$\ce{SO2}$&lt;/li&gt;
&lt;li&gt;易液化&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;二氧化硫的用途&quot;&gt;&lt;a href=&quot;#二氧化硫的用途&quot; class=&quot;headerlink&quot; title=&quot;二氧化硫的用途&quot;&gt;&lt;/a&gt;二氧化硫的用途&lt;/h2&gt;&lt;p&gt;杀菌、防腐&lt;/p&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>200304-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/05/200304-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/05/200304-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-05T01:56:24.000Z</published>
    <updated>2020-09-22T09:40:57.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-4-地理课"><a href="#3-4-地理课" class="headerlink" title="3/4 地理课"></a>3/4 地理课</h1><h2 id="如何描述举一个国家或地区的人口构成？"><a href="#如何描述举一个国家或地区的人口构成？" class="headerlink" title="如何描述举一个国家或地区的人口构成？"></a>如何描述举一个国家或地区的人口构成？</h2><ul><li><p>年龄构成</p><p>分为三个阶段</p><ul><li>少年儿童人口：0~14岁</li><li>劳动人口：15~64岁</li><li>老年人口：65岁及以上</li></ul><p>65岁$≥7\%$：老龄化</p><p>65岁$≥10\%$：严重老龄化</p><a id="more"></a></li><li><p>性别构成</p><p>主要衡量指标：<strong>人口性别比</strong>。</p><p>人口性别比：100个女性对应的男性数</p><blockquote><p> 由于女性平均寿命高于男性，老年女性的数量往往过于老年男性的数量</p></blockquote><p>正常情况下，人口出生的性别比约为$103\sim 107$</p></li><li><p>职业构成</p><p>反映一个国家或地区的产业结构或经济发展情况</p></li><li><p>文也构成</p><p>衡量一个国家或地区人口<strong>科学文化素质</strong>高低的重要指标</p><ul><li>每10万人受教育程度</li><li>文盲率</li></ul></li><li><p>人口金字塔</p><p>形象直观同时表示一个国家或地区人口<strong>年龄构成</strong>和<strong>性别构成</strong>的图</p><ul><li>横坐标：百分比或万人</li><li>纵坐标：年龄段</li><li>蓝色表示男性，红色表示女性</li></ul><p>类型：</p><ul><li>增长型：基座比较大</li><li>稳定型：比较稳定</li><li>缩减型：出生婴儿比重较小，导致人口总体的缩减</li></ul><p>不同国家对应的人口金字塔：</p><ul><li>发达国家：稳定型或缩减型</li><li>发展中国家：增长型</li></ul></li></ul><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><script type="math/tex; mode=display">人口构成\begin{cases}年龄构成\begin {cases}少年儿童 & 0\sim 14岁 \\ 劳动人口 & 15 \sim 64岁 \\老年人口 & 65岁及以上\end {cases}\\性别构成 -性别比\begin {cases}正常：103\sim 107 \\ 失衡的影响\end {cases}\\ 职业构成- 反映产业结构和经济发展情况\\ 文化构成- 反映科学文化素质高低\\人口金字塔\begin {cases}增长型-人口高增长\\稳定型-人口增长缓慢\\ 缩减型-人口规模趋于缩减\end {cases}\end {cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-4-地理课&quot;&gt;&lt;a href=&quot;#3-4-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/4 地理课&quot;&gt;&lt;/a&gt;3/4 地理课&lt;/h1&gt;&lt;h2 id=&quot;如何描述举一个国家或地区的人口构成？&quot;&gt;&lt;a href=&quot;#如何描述举一个国家或地区的人口构成？&quot; class=&quot;headerlink&quot; title=&quot;如何描述举一个国家或地区的人口构成？&quot;&gt;&lt;/a&gt;如何描述举一个国家或地区的人口构成？&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;年龄构成&lt;/p&gt;
&lt;p&gt;分为三个阶段&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;少年儿童人口：0~14岁&lt;/li&gt;
&lt;li&gt;劳动人口：15~64岁&lt;/li&gt;
&lt;li&gt;老年人口：65岁及以上&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;65岁$≥7\%$：老龄化&lt;/p&gt;
&lt;p&gt;65岁$≥10\%$：严重老龄化&lt;/p&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu虚拟机调教 - 1</title>
    <link href="http://gyrojeff.moe/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/"/>
    <id>http://gyrojeff.moe/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/</id>
    <published>2020-03-05T00:24:04.000Z</published>
    <updated>2020-09-15T12:01:58.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="魔幻之旅-Ubuntu虚拟机调教-1"><a href="#魔幻之旅-Ubuntu虚拟机调教-1" class="headerlink" title="魔幻之旅 - Ubuntu虚拟机调教 - 1"></a>魔幻之旅 - Ubuntu虚拟机调教 - 1</h1><h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><p>由于在Mac下opencv-python屡次的安装问题（可能是被未经世事的我「折腾」坏了），然而Mac系统重装对于我这个重度Homebrew用户，重度Terminal用户，重度Vim用户来说是极其不友好的，更不要说Mac的「在线更新」那拖沓的网速。综上所述，在「邻居」的指引下开始折腾起Ubuntu虚拟机。</p><h2 id="安装环境"><a href="#安装环境" class="headerlink" title="安装环境"></a>安装环境</h2><ul><li>Mac OS X 10.14</li><li>Parallels Desktop 13</li></ul><p>Parallels是人类之光！拒绝VMWare Fusion</p><a id="more"></a><h2 id="系统"><a href="#系统" class="headerlink" title="系统"></a>系统</h2><ul><li>Ubuntu 18.04</li></ul><p>（一开始我还脑残用Parallel的安装包）</p><p>下载ISO：<a href="http://releases.ubuntu.com/18.04.4/ubuntu-18.04.4-desktop-amd64.iso">http://releases.ubuntu.com/18.04.4/ubuntu-18.04.4-desktop-amd64.iso</a></p><h2 id="安装系统"><a href="#安装系统" class="headerlink" title="安装系统"></a>安装系统</h2><p>使用Parallel，选择磁盘映像，选择全部Manual，内存分配4GB。完成后会看到如下界面：</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/41421583337519_.pic.jpg" class=""><p>选择简体中文：</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/41471583337542_.pic_hd.jpg" class=""><p>安装：</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/41511583337566_.pic.jpg" class=""><p>选择最小安装，不安装更新，安装第三方软件</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/41641583337646_.pic_hd.jpg" class=""><p>下图就可以了，千万不能够LVM</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/41751583337720_.pic_hd.jpg" class=""><p>决定主文件夹名：</p><img src="/2020/03/05/Ubuntu%E8%99%9A%E6%8B%9F%E6%9C%BA%E8%B0%83%E6%95%99/42081583337883_.pic_hd.jpg" class=""><p>等待。安装完毕。</p><h2 id="Vim"><a href="#Vim" class="headerlink" title="Vim"></a>Vim</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install vim</span><br></pre></td></tr></table></figure><h2 id="配置镜像源"><a href="#配置镜像源" class="headerlink" title="配置镜像源"></a>配置镜像源</h2><p>使用阿里的镜像：</p><p>Ubuntu 的软件源配置文件是 /etc/apt/sources.list。将系统自带的该文件做个备份，将该文件替换为下面内容。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span><br><span class="line">deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse</span><br><span class="line">deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse</span><br></pre></td></tr></table></figure><p>执行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update</span><br></pre></td></tr></table></figure><h2 id="安装虚拟机驱动：Parallels-Tools"><a href="#安装虚拟机驱动：Parallels-Tools" class="headerlink" title="安装虚拟机驱动：Parallels Tools"></a>安装虚拟机驱动：Parallels Tools</h2><p>根据Parallel Desktop的指示：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo /media/USERNAME/Parallels\ Tools/install</span><br></pre></td></tr></table></figure><p>但是在安装的过程中造成诸多问题，查了一下log发现是tools自身的问题。遂升级到Parallels Desktop 15。</p><p>在更新完成之后，发现新问题：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)</span><br><span class="line">E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) </span><br></pre></td></tr></table></figure><p>解决方法如下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo rm -r -f /var/lib/dpkg/lock-frontend</span><br><span class="line">sudo rm -r -f /var/lib/dpkg/lock</span><br></pre></td></tr></table></figure><p>继续安装。安装完成后会提示重启，一路点下去就没有问题。</p><h2 id="浏览器"><a href="#浏览器" class="headerlink" title="浏览器"></a>浏览器</h2><p>在Ubuntu软件里面卸载Firefox，安装Google Chrome.</p><h2 id="Java"><a href="#Java" class="headerlink" title="Java"></a>Java</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install default-jre</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install default-jdk</span><br></pre></td></tr></table></figure><h2 id="网络工具"><a href="#网络工具" class="headerlink" title="网络工具"></a>网络工具</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install net-tools</span><br></pre></td></tr></table></figure><h2 id="安装git"><a href="#安装git" class="headerlink" title="安装git"></a>安装git</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install git</span><br></pre></td></tr></table></figure><h2 id="安装配置zsh"><a href="#安装配置zsh" class="headerlink" title="安装配置zsh"></a>安装配置zsh</h2><h3 id="通过apt安装zsh"><a href="#通过apt安装zsh" class="headerlink" title="通过apt安装zsh"></a>通过apt安装zsh</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install zsh</span><br></pre></td></tr></table></figure><h3 id="安装Oh-my-zsh"><a href="#安装Oh-my-zsh" class="headerlink" title="安装Oh-my-zsh"></a>安装Oh-my-zsh</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh</span><br></pre></td></tr></table></figure><p>注：不能再zsh中安装，要在原来的/bin/bash中安装，否则会github 403</p><h3 id="安装字体"><a href="#安装字体" class="headerlink" title="安装字体"></a>安装字体</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install fonts-powerline</span><br></pre></td></tr></table></figure><h3 id="主题"><a href="#主题" class="headerlink" title="主题"></a>主题</h3><p>我现在选用的是ys，在~/.zshrc中更改：<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ZSH_THEME=<span class="string">&quot;ys&quot;</span></span><br></pre></td></tr></table></figure></p><h3 id="插件"><a href="#插件" class="headerlink" title="插件"></a>插件</h3><ol><li><code>zsh-syntax-highlighting</code></li><li><code>zsh-autosuggestions</code></li></ol><p>GitHub搜索，有安装教程（使用Oh-my-zsh）</p><h3 id="成为默认"><a href="#成为默认" class="headerlink" title="成为默认"></a>成为默认</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chsh -s /bin/zsh</span><br></pre></td></tr></table></figure><h3 id="配置刷新"><a href="#配置刷新" class="headerlink" title="配置刷新"></a>配置刷新</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure><h3 id="进入zsh"><a href="#进入zsh" class="headerlink" title="进入zsh"></a>进入zsh</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/bin/zsh</span><br></pre></td></tr></table></figure><h2 id="深度终端"><a href="#深度终端" class="headerlink" title="深度终端"></a>深度终端</h2><p>在Ubuntu商店里有</p><h2 id="Typora"><a href="#Typora" class="headerlink" title="Typora"></a>Typora</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># or run:</span></span><br><span class="line"><span class="comment"># sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE</span></span><br><span class="line"></span><br><span class="line">wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add -</span><br><span class="line"></span><br><span class="line"><span class="comment"># add Typora&#x27;s repository</span></span><br><span class="line"></span><br><span class="line">sudo add-apt-repository <span class="string">&#x27;deb https://typora.io/linux ./&#x27;</span></span><br><span class="line"></span><br><span class="line">sudo apt-get update</span><br><span class="line"></span><br><span class="line"><span class="comment"># install typora</span></span><br><span class="line"></span><br><span class="line">sudo apt-get install typora</span><br></pre></td></tr></table></figure><h2 id="pip3"><a href="#pip3" class="headerlink" title="pip3"></a>pip3</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install python3-pip</span><br></pre></td></tr></table></figure><h2 id="安装VSCode"><a href="#安装VSCode" class="headerlink" title="安装VSCode"></a>安装VSCode</h2><p>百度VSCode，然后使用官方的deb安装</p><p><a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a></p><h2 id="配置pip的镜像源"><a href="#配置pip的镜像源" class="headerlink" title="配置pip的镜像源"></a>配置pip的镜像源</h2><p>配置阿里云镜像。</p><p>打开terminal，在用户路径下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkdir .pip</span><br></pre></td></tr></table></figure><p>进入该目录<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim pip.conf</span><br></pre></td></tr></table></figure></p><p>输入<br><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[global]</span><br><span class="line">index-url = https://mirrors.aliyun.com/pypi/simple/</span><br><span class="line">[install]</span><br><span class="line">trusted-host = mirrors.aliyun.com</span><br></pre></td></tr></table></figure></p><h2 id="安装一些Python的库"><a href="#安装一些Python的库" class="headerlink" title="安装一些Python的库"></a>安装一些Python的库</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip3 install numpy</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip3 install opencv-python</span><br></pre></td></tr></table></figure><h2 id="python链接"><a href="#python链接" class="headerlink" title="python链接"></a>python链接</h2><p>有许多方式，但是发现最终造成了terminal打开不了的情况，遂删除，决定使用系统自带的python3.6。（因为这个折腾了三个小时（哭））</p><h2 id="安装Chrome"><a href="#安装Chrome" class="headerlink" title="安装Chrome"></a>安装Chrome</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -q -O - https://dl.google.com/linux/linux_signing_key.pub  | sudo apt-key add -</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get update</span><br></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-get install google-chrome-stable</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;魔幻之旅-Ubuntu虚拟机调教-1&quot;&gt;&lt;a href=&quot;#魔幻之旅-Ubuntu虚拟机调教-1&quot; class=&quot;headerlink&quot; title=&quot;魔幻之旅 - Ubuntu虚拟机调教 - 1&quot;&gt;&lt;/a&gt;魔幻之旅 - Ubuntu虚拟机调教 - 1&lt;/h1&gt;&lt;h2 id=&quot;起因&quot;&gt;&lt;a href=&quot;#起因&quot; class=&quot;headerlink&quot; title=&quot;起因&quot;&gt;&lt;/a&gt;起因&lt;/h2&gt;&lt;p&gt;由于在Mac下opencv-python屡次的安装问题（可能是被未经世事的我「折腾」坏了），然而Mac系统重装对于我这个重度Homebrew用户，重度Terminal用户，重度Vim用户来说是极其不友好的，更不要说Mac的「在线更新」那拖沓的网速。综上所述，在「邻居」的指引下开始折腾起Ubuntu虚拟机。&lt;/p&gt;
&lt;h2 id=&quot;安装环境&quot;&gt;&lt;a href=&quot;#安装环境&quot; class=&quot;headerlink&quot; title=&quot;安装环境&quot;&gt;&lt;/a&gt;安装环境&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mac OS X 10.14&lt;/li&gt;
&lt;li&gt;Parallels Desktop 13&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parallels是人类之光！拒绝VMWare Fusion&lt;/p&gt;</summary>
    
    
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/categories/Ubuntu/"/>
    
    
    <category term="Linux" scheme="http://gyrojeff.moe/tags/Linux/"/>
    
    <category term="Ubuntu" scheme="http://gyrojeff.moe/tags/Ubuntu/"/>
    
    <category term="虚拟机" scheme="http://gyrojeff.moe/tags/%E8%99%9A%E6%8B%9F%E6%9C%BA/"/>
    
  </entry>
  
  <entry>
    <title>Canny边缘检测java实现</title>
    <link href="http://gyrojeff.moe/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/"/>
    <id>http://gyrojeff.moe/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/</id>
    <published>2020-03-04T16:21:00.000Z</published>
    <updated>2020-09-22T12:59:33.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Canny边缘检测算法（基于OpenCV的Java实现）"><a href="#Canny边缘检测算法（基于OpenCV的Java实现）" class="headerlink" title="Canny边缘检测算法（基于OpenCV的Java实现）"></a>Canny边缘检测算法（基于OpenCV的Java实现）</h1><h2 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h2><p>最近在学习ORB的过程中又仔细学习了Canny，故写下此篇笔记，以作总结。</p><h2 id="Canny边缘检测算法的发展历史"><a href="#Canny边缘检测算法的发展历史" class="headerlink" title="Canny边缘检测算法的发展历史"></a>Canny边缘检测算法的发展历史</h2><p>Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出，就此拉开了Canny边缘检测算法的序幕。</p><p>Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术，目前已广泛应用于各种计算机视觉系统。Canny发现，在不同视觉系统上对边缘检测的要求较为类似，因此，可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括：</p><ul><li>以低的错误率检测边缘，也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。</li><li>检测到的边缘应精确定位在真实边缘的中心。</li><li>图像中给定的边缘应只被标记一次，并且在可能的情况下，图像的噪声不应产生假的边缘。</li></ul><p>为了满足这些要求，Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述，它可以由高斯函数的一阶导数来近似。</p><p>在目前常用的边缘检测方法中，Canny边缘检测算法是具有严格定义的，可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势，成为边缘检测最流行的算法之一。</p><a id="more"></a><h2 id="Canny边缘检测算法的处理流程"><a href="#Canny边缘检测算法的处理流程" class="headerlink" title="Canny边缘检测算法的处理流程"></a>Canny边缘检测算法的处理流程</h2><p>Canny边缘检测算法可以分为以下5个步骤：</p><ul><li>使用高斯滤波器，以平滑图像，滤除噪声。</li><li>计算图像中每个像素点的梯度强度和方向。</li><li>应用非极大值（Non-Maximum Suppression）抑制，以消除边缘检测带来的杂散响应。</li><li>应用双阈值（Double-Threshold）检测来确定真实的和潜在的边缘。</li><li>通过抑制孤立的弱边缘最终完成边缘检测。</li></ul><p>下面详细介绍每一步的实现思路。</p><h2 id="用高斯滤波器平滑图像"><a href="#用高斯滤波器平滑图像" class="headerlink" title="用高斯滤波器平滑图像"></a>用高斯滤波器平滑图像</h2><p>高斯滤波是一种线性平滑滤波，适用于消除高斯噪声，特别是对抑制或消除服从正态分布的噪声非常有效。滤波可以消除或降低图像中噪声的影响，使用高斯滤波器主要是基于在滤波降噪的同时也可以最大限度保留边缘信息的考虑。</p><p>高斯滤波实现步骤：</p><h3 id="彩色RGB图像转换为灰度图像"><a href="#彩色RGB图像转换为灰度图像" class="headerlink" title="彩色RGB图像转换为灰度图像"></a>彩色RGB图像转换为灰度图像</h3><p>边缘检测是基于对图像灰度差异运算实现的，所以如果输入的是RGB彩色图像，需要先进行灰度图的转换。<br>RGB转换成灰度图像的一个常用公式是：</p><script type="math/tex; mode=display">    Gray = R*0.299 + G*0.587 + B*0.114</script><p>注意一般情况下图像处理中彩色图像各分量的排列顺序是B、G、R。</p><p>RGB原图像：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828153510441.jpeg" class=""><p>转换后的灰度图：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828154940746.jpeg" class=""><p><code>Java</code>代码调用系统库实现：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Mat <span class="title">RGB2Gray</span><span class="params">(Mat image)</span> </span>&#123;</span><br><span class="line">    <span class="comment">// Gray = R*0.299 + G*0.587 + B*0.114</span></span><br><span class="line">  Mat gray = <span class="keyword">new</span> Mat();</span><br><span class="line">  Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);</span><br><span class="line">  <span class="keyword">return</span> gray;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="一维，二维高斯函数及分布"><a href="#一维，二维高斯函数及分布" class="headerlink" title="一维，二维高斯函数及分布"></a>一维，二维高斯函数及分布</h3><p>一维高斯函数表述为：</p><script type="math/tex; mode=display">G(x) = \frac {1}{\sqrt {2\pi}\sigma}\exp(-\frac {(x-\mu_x)^2}{2\sigma^2})</script><p>对应图形：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160824235355117.png" class=""><p>二维高斯函数表述为：</p><script type="math/tex; mode=display">G(x) = \frac {1}{ {2\pi}\sigma^2}\exp(-\frac {(x-\mu_x)^2+(y-\mu_y)^2}{2\sigma^2})</script><p>对应图形：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160824221535543.png" class=""><p>一些重要特性说明：</p><ol><li>一维二维高斯函数中$μ$是服从正态分布的随机变量的均值，称为期望或均值影响正态分布的位置，实际的图像处理应用中一般取$μ=0;~σ$是标准差，$σ^2$是随机变量的方差，$σ$定义了正态分布数据的离散程度，$σ$越大，数据分布越分散，σ越小，数据分布越集中。</li></ol><p>在图形或滤波效果上表现为：$σ$越大，曲线越扁平，高斯滤波器的频带就越宽，平滑程度就越好，$σ$越小，曲线越瘦高，高斯滤波的频带就越窄，平滑程度也越弱；</p><ol><li>二维高斯函数具有旋转对称性，即滤波器在各个方向上的平滑程度是相同的．一般来说，一幅图像的边缘方向是事先不知道的，因此，在滤波前是无法确定一个方向上比另一方向上需要更多的平滑．旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向；</li><li>高斯函数是单值函数。这表明，高斯滤波器用像素邻域的加权均值来代替该点的像素值，而每一邻域像素点权值是随该点与中心点的距离单调增减的。这一性质是很重要的，因为边缘是一种图像局部特征，如果平滑运算对离算子中心很远的像素点仍然有很大作用，则平滑运算会使图像失真；</li><li>相同条件下，高斯卷积核的尺寸越大，图像的平滑效果越好，表现为图像越模糊，同时图像细节丢失的越多；尺寸越小，平滑效果越弱，图像细节丢失越少；</li></ol><p>以下对比一下不同大小标准差$σ$（Sigma）对图像平滑的影响：</p><p>原图：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160824230336502.jpeg" class=""><p>卷积核尺寸5*5，σ=0.1：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160824230502754.jpeg" class=""><p>卷积核尺寸5*5，σ=1：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160824230519505.jpeg" class=""><font color="#FF0000">对比可以看到，Sigma(σ)越大，平滑效果越明显。</font><h3 id="生成高斯滤波卷积核"><a href="#生成高斯滤波卷积核" class="headerlink" title="生成高斯滤波卷积核"></a>生成高斯滤波卷积核</h3><p>滤波的主要目的是降噪，一般的图像处理算法都需要先进行降噪。而高斯滤波主要使图像变得平滑（模糊），同时也有可能增大了边缘的宽度。</p><p>高斯函数是一个类似与正态分布的中间大两边小的函数。</p><p>对于一个位置（m,n）的像素点，其灰度值（这里只考虑二值图）为f(m,n)。</p><p>那么经过高斯滤波后的灰度值将变为：</p><script type="math/tex; mode=display">g_\sigma(m,n)=\frac 1 {2\pi\sigma^2} \exp(-\frac {m^2+n^2}{2\sigma^2})f(m,n)</script><p>其中，</p><script type="math/tex; mode=display">\frac 1  \exp(-\frac {m^2+n^2}{2\sigma^2})</script><p>是二元高斯函数。</p><p>为了尽可能减少噪声对边缘检测结果的影响，所以必须滤除噪声以防止由噪声引起的错误检测。为了平滑图像，使用高斯滤波器与图像进行卷积，该步骤将平滑图像，以减少边缘检测器上明显的噪声影响。大小为(2k+1)x(2k+1)的高斯滤波器核的生成方程式由下式给出：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805214317647-24872875.png" class=""><p>下面是一个sigma = 1.4，尺寸为3x3的高斯卷积核的例子（需要注意归一化）：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805214458225-1180132980.png" class=""><p>若图像中一个3x3的窗口为A，要滤波的像素点为e，则经过高斯滤波之后，像素点e的亮度值为：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805214556506-446561967.png" class=""><p> 其中*为卷积符号，sum表示矩阵中所有元素相加求和。</p><p>重要的是需要理解，高斯卷积核大小的选择将影响Canny检测器的性能。尺寸越大，检测器对噪声的敏感度越低，但是边缘检测的定位误差也将略有增加。一般5x5是一个比较不错的trade off。</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">double</span>[][] getGaussianArray(<span class="keyword">int</span> size, <span class="keyword">double</span> sigma) &#123;</span><br><span class="line">  <span class="keyword">double</span>[][] array = <span class="keyword">new</span> <span class="keyword">double</span>[size][size];</span><br><span class="line">  <span class="keyword">double</span> center_i, center_j;</span><br><span class="line">  <span class="keyword">if</span> (size % <span class="number">2</span> == <span class="number">1</span>) &#123; center_i = (<span class="keyword">double</span>) (size / <span class="number">2</span>); center_j = (<span class="keyword">double</span>) (size / <span class="number">2</span>); &#125;</span><br><span class="line">  <span class="keyword">else</span> &#123; center_i = (<span class="keyword">double</span>) (size / <span class="number">2</span>) - <span class="number">0.5</span>; center_j = (<span class="keyword">double</span>) (size / <span class="number">2</span>) - <span class="number">0.5</span>; &#125;</span><br><span class="line">  <span class="keyword">double</span> sum = <span class="number">0.0</span>;</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; size; i ++)</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; size; j ++) &#123;</span><br><span class="line">      array[i][j] = Math.exp((-<span class="number">1.0</span>) * ((i - center_i) * (i - center_i) + (j - center_j) * (j - center_j)) / <span class="number">2.0</span> / sigma / sigma);</span><br><span class="line">      sum += array[i][j];</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; size; i ++)</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; size; j++)</span><br><span class="line">      array[i][j] /= sum;</span><br><span class="line">  <span class="keyword">return</span> array;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>Sigma为1时，求得的3*3大小的高斯卷积核参数为：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828160611520.jpeg" class=""><p>Sigma为1,5*5大小的高斯卷积核参数为：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828160616411.jpeg" class=""><p>在计算出高斯滤波卷积核之后就是用这个卷积核来扫过整张图像，对每个像素点进行加权平均。</p><h3 id="单色高斯滤波与彩色高斯滤波"><a href="#单色高斯滤波与彩色高斯滤波" class="headerlink" title="单色高斯滤波与彩色高斯滤波"></a>单色高斯滤波与彩色高斯滤波</h3><p>加入了多线程的优化，代码实现：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Mat <span class="title">greyGaussianFilter</span><span class="params">(Mat src, <span class="keyword">double</span>[][] array, <span class="keyword">int</span> size)</span> <span class="keyword">throws</span> InterruptedException </span>&#123;</span><br><span class="line">  Mat temp = src.clone();</span><br><span class="line">  <span class="keyword">final</span> CountDownLatch latch = <span class="keyword">new</span> CountDownLatch(src.rows());</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; src.rows(); i ++) &#123;</span><br><span class="line">    <span class="keyword">int</span> finalI = i;</span><br><span class="line">    <span class="keyword">new</span> Thread(() -&gt; &#123;</span><br><span class="line">      <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; src.cols(); j ++)</span><br><span class="line">        <span class="keyword">if</span> (finalI &gt; (size / <span class="number">2</span>) - <span class="number">1</span> &amp;&amp; j &gt; (size / <span class="number">2</span>) - <span class="number">1</span> &amp;&amp;</span><br><span class="line">            finalI &lt; src.rows() - (size / <span class="number">2</span>) &amp;&amp; j &lt; src.cols() - (size / <span class="number">2</span>)) &#123;</span><br><span class="line">          <span class="keyword">double</span> sum = <span class="number">0.0</span>;</span><br><span class="line">          <span class="keyword">for</span> (<span class="keyword">int</span> k = <span class="number">0</span>; k &lt; size; k++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> l = <span class="number">0</span>; l &lt; size; l++)</span><br><span class="line">              sum += src.get(finalI - k + size / <span class="number">2</span>, j - l + size / <span class="number">2</span>)[<span class="number">0</span>] * array[k][l];</span><br><span class="line">          temp.put(finalI, j, sum);</span><br><span class="line">        &#125;</span><br><span class="line">      latch.countDown();</span><br><span class="line">    &#125;).start();</span><br><span class="line">  &#125;</span><br><span class="line">  latch.await();</span><br><span class="line">  <span class="keyword">return</span> temp;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Mat <span class="title">colorGaussianFilter</span><span class="params">(Mat src, <span class="keyword">int</span> size, <span class="keyword">double</span> sigma)</span> <span class="keyword">throws</span> InterruptedException </span>&#123;</span><br><span class="line">  <span class="comment">// return variable</span></span><br><span class="line">  Mat ret = <span class="keyword">new</span> Mat();</span><br><span class="line">  <span class="comment">// list for merge and split</span></span><br><span class="line">  List&lt;Mat&gt; channels = <span class="keyword">new</span> ArrayList&lt;&gt;();</span><br><span class="line">  List&lt;Mat&gt; new_channels = <span class="keyword">new</span> ArrayList&lt;&gt;();</span><br><span class="line">  Map&lt;Integer, Mat&gt; temp_channels = <span class="keyword">new</span> TreeMap&lt;&gt;();</span><br><span class="line">  <span class="comment">// split into 3 channels (r, g, b)</span></span><br><span class="line">  Core.split(src, channels);</span><br><span class="line">  <span class="comment">// get gaussion array</span></span><br><span class="line">  <span class="keyword">double</span>[][] array = SmartGaussian.getGaussianArray(size, sigma);</span><br><span class="line">  <span class="comment">// multi-thread</span></span><br><span class="line">  <span class="keyword">final</span> CountDownLatch latch = <span class="keyword">new</span> CountDownLatch(channels.size());</span><br><span class="line">  channels.forEach(mat -&gt; &#123;</span><br><span class="line">    <span class="keyword">new</span> Thread(() -&gt; &#123;</span><br><span class="line">      Mat tmp = <span class="keyword">new</span> Mat();</span><br><span class="line">      <span class="keyword">try</span> &#123;</span><br><span class="line">        tmp = SmartGaussian.greyGaussianFilter(mat, array, size);</span><br><span class="line">      &#125; <span class="keyword">catch</span> (InterruptedException e) &#123;</span><br><span class="line">        e.printStackTrace();</span><br><span class="line">      &#125;</span><br><span class="line">      temp_channels.put(channels.indexOf(mat), tmp);</span><br><span class="line">      latch.countDown();</span><br><span class="line">    &#125;).start();</span><br><span class="line">  &#125;);</span><br><span class="line">  latch.await();</span><br><span class="line">  <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; channels.size(); i ++)</span><br><span class="line">    new_channels.add(temp_channels.get(i));</span><br><span class="line">  Core.merge(new_channels, ret);</span><br><span class="line">  <span class="keyword">return</span> ret;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>效果图：（左图为原图，中间为上面的实现，右边是<code>OpenCV</code>实现）</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/Xnip2020-01-11_19-39-05.jpg" class=""><h2 id="用Sobel等梯度算子计算梯度幅值和方向"><a href="#用Sobel等梯度算子计算梯度幅值和方向" class="headerlink" title="用Sobel等梯度算子计算梯度幅值和方向"></a>用Sobel等梯度算子计算梯度幅值和方向</h2><h3 id="梯度"><a href="#梯度" class="headerlink" title="梯度"></a>梯度</h3><p>梯度的本意是一个向量（矢量），表示某一函数在该点处的方向导数沿着该方向取得最大值，即函数在该点处沿着该方向（此梯度的方向）变化最快，变化率最大（为该梯度的模）。</p><p>设二元函数：</p><script type="math/tex; mode=display">z=f(x,y)</script><p> 在平面区域D上具有一阶连续偏导数，则对于每一个点$P(x,y)$都可定出一个向量：</p><script type="math/tex; mode=display">\Big\{\frac {\partial f}{\partial x},\frac {\partial f} {\partial y} \Big\}=f_x(x,y)\vec i + f_y(x,y)\vec j</script><p> 该函数就称为函数$z=f(x,y)$在点$P(x,y)$的梯度，记作$\text{grad}~f(x,y)$或$\nabla f(x,y)$，即有：</p><script type="math/tex; mode=display">\text{grad}~f(x,y)=\nabla f(x,y)=\Big\{\frac {\partial f}{\partial x},\frac {\partial f} {\partial y} \Big\}=f_x(x,y)\vec i + f_y(x,y)\vec j</script><p>其中$\nabla=\displaystyle\frac{\partial}{\partial x}\vec i+\displaystyle\frac{\partial}{\partial y}\vec j$称为（二维的）向量<a href="https://baike.baidu.com/item/微分算子">微分算子</a>或Nabla算子。</p><p>设$e={\cos\alpha,\cos\beta}$是方向$l$上的单位向量，则</p><script type="math/tex; mode=display">\begin{aligned}    &\displaystyle\frac{\partial f}{\partial l} \\ =& \displaystyle\frac{\partial f}{\partial x} \cos \alpha + \displaystyle\frac{\partial f}{\partial y} \cos \beta \\ =& \Big \{\displaystyle\frac{\partial f}{\partial x},\displaystyle\frac{\partial f}{\partial y} \Big\} \{\cos\alpha, \cos \beta\} \\ =& \operatorname{grad}f(x,y)e \\ =& |\operatorname{grad}f(x,y)||e|\cos[\operatorname{grad}f(x,y),e]\end{aligned}</script><p>由于当方向$l$与梯度方向一致时，有$\cos[\operatorname{grad}f(x,y),e]=1$。</p><p>所以当$l$与梯度方向一致时,方向导数$\displaystyle\frac{\partial f}{\partial x}$有最大值，且最大值为梯度的模，即$|\operatorname{grad}f(x,y)| = \sqrt{\Big(\displaystyle\frac{\partial f}{\partial x}\Big)^2+\Big(\displaystyle\frac{\partial f}{\partial y}\Big)^2}$。</p><p>因此说，函数在一点沿梯度方向的变化率最大，最大值为该梯度的<a href="https://baike.baidu.com/item/模/13332717">模</a>。</p><h3 id="图像灰度值的梯度的简单求法"><a href="#图像灰度值的梯度的简单求法" class="headerlink" title="图像灰度值的梯度的简单求法"></a>图像灰度值的梯度的简单求法</h3><p>图像灰度值的梯度可以使用最简单的一阶有限差分来进行近似，使用以下图像在x和y方向上偏导数的两个矩阵：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828162235218.jpeg" class=""><p>计算公式为：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828162335438.jpeg" class=""><p><strong>其中$f$为图像灰度值，$P[i,j]$代表$[i,j]$在$X$方向梯度幅值，$Q[i,j]$代表$[i,j]$在$Y$方向的梯度幅值，$M[i,j]$是该点幅值，$\theta[i,j]$是梯度方向，也就是角度。</strong></p><h3 id="使用Sobel算子来计算梯度的大小及方向："><a href="#使用Sobel算子来计算梯度的大小及方向：" class="headerlink" title="使用Sobel算子来计算梯度的大小及方向："></a>使用Sobel算子来计算梯度的大小及方向：</h3><p>图像中的边缘可以指向各个方向，因此Canny算法使用四个算子来检测图像中的水平、垂直和对角边缘。边缘检测的算子（如Roberts，Prewitt，Sobel等）返回水平Gx和垂直Gy方向的一阶导数值，由此便可以确定像素点的梯度G和方向theta 。</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805214736006-925264436.png" class=""><p>其中G为梯度强度， theta表示梯度方向，arctan为反正切函数。下面以Sobel算子为例讲述如何计算梯度强度和方向。</p><p>x和y方向的Sobel算子分别为：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805214835975-811440376.png" class=""><p>其中Sx表示x方向的Sobel算子，用于检测y方向的边缘； Sy表示y方向的Sobel算子，用于检测x方向的边缘（边缘方向和梯度方向垂直）。在直角坐标系中，Sobel算子的方向如下图所示。</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805215601037-456738898.png" class=""><p> 若图像中一个3x3的窗口为A，要计算梯度的像素点为e，则和Sobel算子进行卷积之后，像素点e在x和y方向的梯度值分别为： </p> <img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805215146803-830584665.png" class=""><p>其中*为卷积符号，sum表示矩阵中所有元素相加求和。根据公式（3-2）便可以计算出像素点e的梯度和方向。</p><p>下面是Sobel算子求梯度的java实现：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> edu.sfls.Jeff.JavaDev.CVLib;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.opencv.core.Core;</span><br><span class="line"><span class="keyword">import</span> org.opencv.core.CvType;</span><br><span class="line"><span class="keyword">import</span> org.opencv.core.Mat;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.concurrent.CountDownLatch;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">SmartSobel</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> Mat gradientX = <span class="keyword">new</span> Mat(), gradientY = <span class="keyword">new</span> Mat(), gradientXY = <span class="keyword">new</span> Mat();</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">double</span>[][] pointDirection;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="title">SmartSobel</span><span class="params">()</span> </span>&#123;&#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">compute</span><span class="params">(Mat image)</span> <span class="keyword">throws</span> InterruptedException </span>&#123;</span><br><span class="line">        pointDirection = <span class="keyword">new</span> <span class="keyword">double</span>[image.rows()][image.cols()];</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; image.rows(); i ++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; image.cols(); j ++)</span><br><span class="line">                pointDirection[i][j] = <span class="number">0</span>;</span><br><span class="line">        gradientX = Mat.zeros(image.size(), CvType.CV_32SC1);</span><br><span class="line">        gradientY = Mat.zeros(image.size(), CvType.CV_32SC1);</span><br><span class="line">        gradientXY = Mat.zeros(image.size(), CvType.CV_32SC1);</span><br><span class="line">        <span class="keyword">final</span> CountDownLatch latch = <span class="keyword">new</span> CountDownLatch(image.rows() - <span class="number">2</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; image.rows() - <span class="number">1</span>; i ++) &#123;</span><br><span class="line">            <span class="keyword">int</span> finalI = i;</span><br><span class="line">            <span class="keyword">new</span> Thread(() -&gt; &#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt; image.cols() - <span class="number">1</span>; j++) &#123;</span><br><span class="line">                    <span class="keyword">double</span> gX = (-<span class="number">1</span>) * image.get(finalI - <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            <span class="number">1</span> * image.get(finalI - <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            (-<span class="number">2</span>) * image.get(finalI, j - <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            <span class="number">2</span> * image.get(finalI, j + <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            (-<span class="number">1</span>) * image.get(finalI + <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            <span class="number">1</span> * image.get(finalI + <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>];</span><br><span class="line">                    <span class="keyword">double</span> gY = <span class="number">1</span> * image.get(finalI - <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            <span class="number">2</span> * image.get(finalI - <span class="number">1</span>, j)[<span class="number">0</span>] +</span><br><span class="line">                            <span class="number">1</span> * image.get(finalI - <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            (-<span class="number">1</span>) * image.get(finalI + <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] +</span><br><span class="line">                            (-<span class="number">2</span>) * image.get(finalI + <span class="number">1</span>, j)[<span class="number">0</span>] +</span><br><span class="line">                            (-<span class="number">1</span>) * image.get(finalI + <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>];</span><br><span class="line">                    gradientY.put(finalI, j, Math.abs(gY));</span><br><span class="line">                    gradientX.put(finalI, j, Math.abs(gX));</span><br><span class="line">                    gradientXY.put(finalI, j, Math.sqrt(gX * gX + gY * gY));</span><br><span class="line">                  <span class="comment">// 防止除以0的情况发生</span></span><br><span class="line">                    <span class="keyword">if</span> (gX == <span class="number">0</span>) gX = <span class="number">0.00000000000000001</span>;</span><br><span class="line">                    pointDirection[finalI][j] = Math.atan(gY / gX);</span><br><span class="line">                &#125;</span><br><span class="line">                latch.countDown();</span><br><span class="line">            &#125;).start();</span><br><span class="line">        &#125;</span><br><span class="line">        latch.await();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">convert</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        Core.convertScaleAbs(gradientX, gradientX);</span><br><span class="line">        Core.convertScaleAbs(gradientY, gradientY);</span><br><span class="line">        Core.convertScaleAbs(gradientXY, gradientXY);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> Mat <span class="title">getGradientX</span><span class="params">()</span> </span>&#123; <span class="keyword">return</span> <span class="keyword">this</span>.gradientX; &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> Mat <span class="title">getGradientY</span><span class="params">()</span> </span>&#123; <span class="keyword">return</span> <span class="keyword">this</span>.gradientY; &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> Mat <span class="title">getGradientXY</span><span class="params">()</span> </span>&#123; <span class="keyword">return</span> <span class="keyword">this</span>.gradientXY; &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">public</span> <span class="keyword">double</span>[][] getPointDirection() &#123; <span class="keyword">return</span> <span class="keyword">this</span>.pointDirection; &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>由于这里使用的是$Math.tan()$，所以最终的角度是映射在$[-\frac \pi 2, \frac \pi 2]$的范围之内的。如果使用$Math.tan2()$会映射到$[-\pi,\pi]$的范围内，并且无需考虑符号影响，更加精确。但是这里我们并不关心另外的一个$\pi$的情况，我们只关心其所在直线（这在后文中会提到，也就是非极大值抑制），所以无需多考虑。</p><p>X方向梯度图：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828164120408.jpeg" class=""><p>Y方向梯度图：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160828164226526.jpeg" class=""><p>X、Y方向梯度融合效果：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160822223435011.jpeg" class=""><p>Opencv Sobel函数效果：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/20160822223549372.jpeg" class=""><h2 id="对梯度幅值进行非极大值抑制"><a href="#对梯度幅值进行非极大值抑制" class="headerlink" title="对梯度幅值进行非极大值抑制"></a>对梯度幅值进行非极大值抑制</h2><p>非极大值抑制是一种边缘稀疏技术，非极大值抑制的作用在于“瘦”边。对图像进行梯度计算后，仅仅基于梯度值提取的边缘仍然很模糊。对于标准3，对边缘有且应当只有一个准确的响应。而非极大值抑制则可以帮助将局部最大值之外的所有梯度值抑制为0，对梯度图像中每个像素进行非极大值抑制的算法是：</p><p>1)        将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。</p><p>2)        如果当前像素的梯度强度与另外两个像素相比最大，则该像素点保留为边缘点，否则该像素点将被抑制。</p><p>通常为了更加精确的计算，在跨越梯度方向的两个相邻像素之间使用线性插值来得到要比较的像素梯度，现举例如下：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805215454240-1541841797.png" class=""><p>　　　　　　　　　　图3-2 梯度方向分割</p><p>如图3-2所示，将梯度分为8个方向，分别为E、NE、N、NW、W、SW、S、SE，其中0代表$0^\circ\sim45^\circ$,1代表$45^\circ\sim90^\circ$，2代表$-90^\circ\sim-45^\circ$，3代表$-45^\circ\sim0^\circ$。像素点P的梯度方向为$\theta$，则像素点P1和P2的梯度线性插值为： </p><script type="math/tex; mode=display">\begin{aligned}    \tan \theta = G_y ~/~G_x \\    G_{p1} = (1-\tan\theta)\times E + \tan\theta \times NE \\    G_{p2} = (1-\tan\theta)\times W + \tan\theta \times SW\end{aligned}</script><p>上面也只是图中的情况，具体情况如下：</p><script type="math/tex; mode=display">\begin{aligned}    \theta \in [0, \frac \pi 4]:     \begin {cases}     G_{p1} = (1-\tan\theta)\times E + \tan\theta \times NE \\    G_{p2} = (1-\tan\theta)\times W + \tan\theta \times SW    \end {cases}\\\theta \in [\frac \pi 4, \frac \pi 2]:     \begin {cases}     G_{p1} = (1-\tan\theta)\times N + \tan\theta \times NE \\    G_{p2} = (1-\tan\theta)\times S + \tan\theta \times SW    \end {cases}\\\theta \in [-\frac \pi 4, 0]:     \begin {cases}     G_{p1} = (1-\tan(-\theta))\times E + \tan(-\theta) \times SE \\    G_{p2} = (1-\tan(-\theta))\times W + \tan(-\theta) \times NW    \end {cases}\\\theta \in [-\frac \pi 2, -\frac \pi 4]:     \begin {cases}     G_{p1} = (1-\tan(-\theta))\times S + \tan(-\theta) \times SE \\    G_{p2} = (1-\tan(-\theta))\times N + \tan(-\theta) \times NW    \end {cases}\end{aligned}</script><p>因此非极大值抑制的伪代码描写如下：</p> <img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805223131928-334991801.png" class=""><p>需要注意的是，如何标志方向并不重要，重要的是梯度方向的计算要和梯度算子的选取保持一致。</p><p>Java实现：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> edu.sfls.Jeff.JavaDev.CVLib;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.opencv.core.CvType;</span><br><span class="line"><span class="keyword">import</span> org.opencv.core.Mat;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.concurrent.CountDownLatch;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">SmartNMS</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Mat <span class="title">NMS</span><span class="params">(Mat gradientImage, <span class="keyword">double</span>[][] pointDirection)</span> <span class="keyword">throws</span> InterruptedException </span>&#123;</span><br><span class="line">        Mat outputImage = gradientImage.clone();</span><br><span class="line">        <span class="keyword">final</span> CountDownLatch latch = <span class="keyword">new</span> CountDownLatch(gradientImage.rows() - <span class="number">2</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; gradientImage.rows() - <span class="number">1</span>; i ++) &#123;</span><br><span class="line">            <span class="keyword">int</span> finalI = i;</span><br><span class="line">            <span class="keyword">new</span> Thread(() -&gt; &#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt; gradientImage.cols() - <span class="number">1</span>; j ++) &#123;</span><br><span class="line">                    <span class="keyword">double</span> GP = gradientImage.get(finalI, j)[<span class="number">0</span>],</span><br><span class="line">                            E = gradientImage.get(finalI, j + <span class="number">1</span>)[<span class="number">0</span>],</span><br><span class="line">                            NE = gradientImage.get(finalI - <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>],</span><br><span class="line">                            N = gradientImage.get(finalI - <span class="number">1</span>, j)[<span class="number">0</span>],</span><br><span class="line">                            NW = gradientImage.get(finalI - <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>],</span><br><span class="line">                            W = gradientImage.get(finalI, j - <span class="number">1</span>)[<span class="number">0</span>],</span><br><span class="line">                            SW = gradientImage.get(finalI + <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>],</span><br><span class="line">                            S = gradientImage.get(finalI + <span class="number">1</span>, j)[<span class="number">0</span>],</span><br><span class="line">                            SE = gradientImage.get(finalI + <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>];</span><br><span class="line">                    <span class="keyword">double</span> GP1 = <span class="number">0</span>, GP2 = <span class="number">0</span>;</span><br><span class="line">                    <span class="keyword">double</span> theta = pointDirection[finalI][j];</span><br><span class="line">                    <span class="keyword">if</span> (theta &gt;= <span class="number">0</span> &amp;&amp; theta &lt;= Math.PI / <span class="number">4</span>) &#123;</span><br><span class="line">                        GP1 = E * (<span class="number">1</span> - Math.tan(theta)) + NE * Math.tan(theta);</span><br><span class="line">                        GP2 = W * (<span class="number">1</span> - Math.tan(theta)) + SW * Math.tan(theta);</span><br><span class="line">                    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (theta &gt; Math.PI / <span class="number">4</span>) &#123;</span><br><span class="line">                        GP1 = N * (<span class="number">1</span> - <span class="number">1</span> / Math.tan(theta)) + NE * <span class="number">1</span> / Math.tan(theta);</span><br><span class="line">                        GP2 = S * (<span class="number">1</span> - <span class="number">1</span> / Math.tan(theta)) + SW * <span class="number">1</span> / Math.tan(theta);</span><br><span class="line">                    &#125; <span class="keyword">else</span> <span class="keyword">if</span> (theta &lt; <span class="number">0</span> &amp;&amp; theta &gt;= -Math.PI / <span class="number">4</span>) &#123;</span><br><span class="line">                        GP1 = E * (<span class="number">1</span> - Math.tan(-theta)) + SE * Math.tan(-theta);</span><br><span class="line">                        GP2 = W * (<span class="number">1</span> - Math.tan(-theta)) + NW * Math.tan(-theta);</span><br><span class="line">                    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                        GP1 = S * (<span class="number">1</span> - <span class="number">1</span> / Math.tan(-theta)) + SE * <span class="number">1</span> / Math.tan(-theta);</span><br><span class="line">                        GP2 = N * (<span class="number">1</span> - <span class="number">1</span> / Math.tan(-theta)) + NW * <span class="number">1</span> / Math.tan(-theta);</span><br><span class="line">                    &#125;</span><br><span class="line">                    <span class="keyword">if</span> (GP &lt; GP1 || GP &lt; GP2) outputImage.put(finalI, j, <span class="number">0</span>);</span><br><span class="line">                &#125;</span><br><span class="line">                latch.countDown();</span><br><span class="line">            &#125;).start();</span><br><span class="line">        &#125;</span><br><span class="line">        latch.await();</span><br><span class="line">        <span class="keyword">return</span> outputImage;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="双阈值检测"><a href="#双阈值检测" class="headerlink" title="双阈值检测"></a>双阈值检测</h2><p>在施加非极大值抑制之后，剩余的像素可以更准确地表示图像中的实际边缘。然而，仍然存在由于噪声和颜色变化引起的一些边缘像素。为了解决这些杂散响应，必须用弱梯度值过滤边缘像素，并保留具有高梯度值的边缘像素，可以通过选择高低阈值来实现。如果边缘像素的梯度值高于高阈值，则将其标记为强边缘像素；如果边缘像素的梯度值小于高阈值并且大于低阈值，则将其标记为弱边缘像素；如果边缘像素的梯度值小于低阈值，则会被抑制。阈值的选择取决于给定输入图像的内容。</p><p>双阈值检测的伪代码描写如下：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805220153584-1855956900.png" class=""> <h2 id="抑制孤立低阈值点"><a href="#抑制孤立低阈值点" class="headerlink" title="抑制孤立低阈值点"></a>抑制孤立低阈值点</h2><p>到目前为止，被划分为强边缘的像素点已经被确定为边缘，因为它们是从图像中的真实边缘中提取出来的。然而，对于弱边缘像素，将会有一些争论，因为这些像素可以从真实边缘提取也可以是因噪声或颜色变化引起的。为了获得准确的结果，应该抑制由后者引起的弱边缘。通常，由真实边缘引起的弱边缘像素将连接到强边缘像素，而噪声响应未连接。为了跟踪边缘连接，通过查看弱边缘像素及其8个邻域像素，只要其中一个为强边缘像素，则该弱边缘点就可以保留为真实的边缘。</p><p>抑制孤立边缘点的伪代码描述如下：</p><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/1213858-20170805220246209-217860001.png" class=""><p>实现：（使用递归）</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> edu.sfls.Jeff.JavaDev.CVLib;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.opencv.core.Mat;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">SmartCanny</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">private</span> List&lt;Integer[]&gt; highPoints = <span class="keyword">new</span> ArrayList&lt;Integer[]&gt;();</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">DoubleThreshold</span><span class="params">(Mat image, <span class="keyword">double</span> lowThreshold, <span class="keyword">double</span> highThreshold)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; image.rows() - <span class="number">1</span>; i ++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt; image.cols() - <span class="number">1</span>; j ++)</span><br><span class="line">                <span class="keyword">if</span> (image.get(i, j)[<span class="number">0</span>] &gt;= highThreshold) &#123;</span><br><span class="line">                    image.put(i, j, <span class="number">255</span>);</span><br><span class="line">                    Integer[] p = <span class="keyword">new</span> Integer[<span class="number">2</span>];</span><br><span class="line">                    p[<span class="number">0</span>] = i; p[<span class="number">1</span>] = j;</span><br><span class="line">                    highPoints.add(p);</span><br><span class="line">                &#125; <span class="keyword">else</span> <span class="keyword">if</span> (image.get(i, j)[<span class="number">0</span>] &lt; lowThreshold)</span><br><span class="line">                    image.put(i, j, <span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">DoubleThresholdLink</span><span class="params">(Mat image, <span class="keyword">double</span> lowThreshold)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (Integer[] p : highPoints) &#123;</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, p[<span class="number">0</span>], p[<span class="number">1</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; image.rows() - <span class="number">1</span>; i ++)</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt; image.cols() - <span class="number">1</span>; j ++)</span><br><span class="line">                <span class="keyword">if</span> (image.get(i, j)[<span class="number">0</span>] &lt; <span class="number">255</span>)</span><br><span class="line">                    image.put(i, j, <span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">DoubleThresholdLinkRecurrent</span><span class="params">(Mat image, <span class="keyword">double</span> lowThreshold, <span class="keyword">int</span> i, <span class="keyword">int</span> j)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (i &lt;= <span class="number">0</span> || j &lt;= <span class="number">0</span> || i &gt;= image.rows() - <span class="number">1</span> || j &gt;= image.cols() - <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i - <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i - <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i - <span class="number">1</span>, j - <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i - <span class="number">1</span>, j - <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i - <span class="number">1</span>, j)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i - <span class="number">1</span>, j)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i - <span class="number">1</span>, j, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i - <span class="number">1</span>, j);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i - <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i - <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i - <span class="number">1</span>, j + <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i - <span class="number">1</span>, j + <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i, j - <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i, j - <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i, j - <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i, j - <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i, j + <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i, j + <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i, j + <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i, j + <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i + <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i + <span class="number">1</span>, j - <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i + <span class="number">1</span>, j - <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i + <span class="number">1</span>, j - <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i + <span class="number">1</span>, j)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i + <span class="number">1</span>, j)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i + <span class="number">1</span>, j, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i + <span class="number">1</span>, j);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (image.get(i + <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] &gt;= lowThreshold &amp;&amp; image.get(i + <span class="number">1</span>, j + <span class="number">1</span>)[<span class="number">0</span>] &lt; <span class="number">255</span>) &#123;</span><br><span class="line">            image.put(i + <span class="number">1</span>, j + <span class="number">1</span>, <span class="number">255</span>);</span><br><span class="line">            DoubleThresholdLinkRecurrent(image, lowThreshold, i + <span class="number">1</span>, j + <span class="number">1</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> Mat <span class="title">Canny</span><span class="params">(Mat image, <span class="keyword">int</span> size, <span class="keyword">double</span> sigma, <span class="keyword">double</span> lowThreshold, <span class="keyword">double</span> highThreshold)</span> <span class="keyword">throws</span> InterruptedException </span>&#123;</span><br><span class="line">        Mat tmp = SmartConverter.RGB2Gray((SmartGaussian.colorGaussianFilter(image, size, sigma)));</span><br><span class="line">        SmartSobel ss = <span class="keyword">new</span> SmartSobel();</span><br><span class="line">        ss.compute(tmp);</span><br><span class="line">        ss.convert();</span><br><span class="line">        Mat ret = SmartNMS.NMS(ss.getGradientXY(), ss.getPointDirection());</span><br><span class="line">        <span class="keyword">this</span>.DoubleThreshold(ret, lowThreshold, highThreshold);</span><br><span class="line">        <span class="keyword">this</span>.DoubleThresholdLink(ret, lowThreshold);</span><br><span class="line">        <span class="keyword">return</span> ret;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/image-20200113182624892.png" class=""><img src="/2020/03/05/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8Bjava%E5%AE%9E%E7%8E%B0/Xnip2020-01-13_18-24-55.jpg" class=""><h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><p>[1] 高斯滤波及高斯卷积核C++实现 <a href="https://blog.csdn.net/dcrmg/article/details/52304446">https://blog.csdn.net/dcrmg/article/details/52304446</a></p><p>[2] 边缘检测之Canny <a href="https://www.cnblogs.com/techyan1990/p/7291771.html">https://www.cnblogs.com/techyan1990/p/7291771.html</a></p><p>[3] Canny边缘检测及C++实现 <a href="https://blog.csdn.net/dcrmg/article/details/52344902">https://blog.csdn.net/dcrmg/article/details/52344902</a></p><p>[4] Canny边缘检测算法 <a href="https://zhuanlan.zhihu.com/p/42122107">https://zhuanlan.zhihu.com/p/42122107</a></p><p>[5] Sobel算子及C++实现 <a href="https://blog.csdn.net/dcrmg/article/details/52280768">https://blog.csdn.net/dcrmg/article/details/52280768</a></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;Canny边缘检测算法（基于OpenCV的Java实现）&quot;&gt;&lt;a href=&quot;#Canny边缘检测算法（基于OpenCV的Java实现）&quot; class=&quot;headerlink&quot; title=&quot;Canny边缘检测算法（基于OpenCV的Java实现）&quot;&gt;&lt;/a&gt;Canny边缘检测算法（基于OpenCV的Java实现）&lt;/h1&gt;&lt;h2 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h2&gt;&lt;p&gt;最近在学习ORB的过程中又仔细学习了Canny，故写下此篇笔记，以作总结。&lt;/p&gt;
&lt;h2 id=&quot;Canny边缘检测算法的发展历史&quot;&gt;&lt;a href=&quot;#Canny边缘检测算法的发展历史&quot; class=&quot;headerlink&quot; title=&quot;Canny边缘检测算法的发展历史&quot;&gt;&lt;/a&gt;Canny边缘检测算法的发展历史&lt;/h2&gt;&lt;p&gt;Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出，就此拉开了Canny边缘检测算法的序幕。&lt;/p&gt;
&lt;p&gt;Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术，目前已广泛应用于各种计算机视觉系统。Canny发现，在不同视觉系统上对边缘检测的要求较为类似，因此，可以实现一种具有广泛应用意义的边缘检测技术。边缘检测的一般标准包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以低的错误率检测边缘，也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。&lt;/li&gt;
&lt;li&gt;检测到的边缘应精确定位在真实边缘的中心。&lt;/li&gt;
&lt;li&gt;图像中给定的边缘应只被标记一次，并且在可能的情况下，图像的噪声不应产生假的边缘。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了满足这些要求，Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述，它可以由高斯函数的一阶导数来近似。&lt;/p&gt;
&lt;p&gt;在目前常用的边缘检测方法中，Canny边缘检测算法是具有严格定义的，可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势，成为边缘检测最流行的算法之一。&lt;/p&gt;</summary>
    
    
    
    <category term="CV" scheme="http://gyrojeff.moe/categories/CV/"/>
    
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="Java" scheme="http://gyrojeff.moe/tags/Java/"/>
    
    <category term="OpenCV" scheme="http://gyrojeff.moe/tags/OpenCV/"/>
    
  </entry>
  
  <entry>
    <title>Mac下pip速度太慢问题的解决办法</title>
    <link href="http://gyrojeff.moe/2020/03/04/Mac%E4%B8%8Bpip%E9%80%9F%E5%BA%A6%E5%A4%AA%E6%85%A2%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/"/>
    <id>http://gyrojeff.moe/2020/03/04/Mac%E4%B8%8Bpip%E9%80%9F%E5%BA%A6%E5%A4%AA%E6%85%A2%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/</id>
    <published>2020-03-04T13:53:08.000Z</published>
    <updated>2020-09-14T23:57:46.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="Mac下pip速度太慢问题的解决办法"><a href="#Mac下pip速度太慢问题的解决办法" class="headerlink" title="Mac下pip速度太慢问题的解决办法"></a>Mac下pip速度太慢问题的解决办法</h1><p>解决方法：配置阿里云镜像。</p><p>打开terminal，在用户路径下：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkdir .pip</span><br></pre></td></tr></table></figure><p>进入该目录<br><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim pip.conf</span><br></pre></td></tr></table></figure></p><p>输入<br><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[global]</span><br><span class="line">index-url = https://mirrors.aliyun.com/pypi/simple/</span><br><span class="line">[install]</span><br><span class="line">trusted-host = mirrors.aliyun.com</span><br></pre></td></tr></table></figure></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;Mac下pip速度太慢问题的解决办法&quot;&gt;&lt;a href=&quot;#Mac下pip速度太慢问题的解决办法&quot; class=&quot;headerlink&quot; title=&quot;Mac下pip速度太慢问题的解决办法&quot;&gt;&lt;/a&gt;Mac下pip速度太慢问题的解决办法&lt;/h1&gt;&lt;p&gt;解决方法：配</summary>
      
    
    
    
    <category term="Python" scheme="http://gyrojeff.moe/categories/Python/"/>
    
    
    <category term="Python" scheme="http://gyrojeff.moe/tags/Python/"/>
    
  </entry>
  
  <entry>
    <title>VSCode插件开发：LaTeX Snippets</title>
    <link href="http://gyrojeff.moe/2020/03/04/VSCode%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%EF%BC%9ALaTeX-Snippets/"/>
    <id>http://gyrojeff.moe/2020/03/04/VSCode%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%EF%BC%9ALaTeX-Snippets/</id>
    <published>2020-03-04T10:03:08.000Z</published>
    <updated>2020-09-14T23:58:11.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="除夕夜的静谧-VSCode插件开发：LaTeX-Snippets"><a href="#除夕夜的静谧-VSCode插件开发：LaTeX-Snippets" class="headerlink" title="除夕夜的静谧 - VSCode插件开发：LaTeX Snippets"></a>除夕夜的静谧 - VSCode插件开发：LaTeX Snippets</h1><h2 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h2><p>这个项目是在20年春节前夕想到的。那时候正在需要非常频繁地键入数学公式，一开始使用的编辑器是Typora，但是越到后面，基础功能已经不再能满足需求。我开发出了一套Keyboard Maestro的快捷键来加快写作速度，但是不同模式的频繁切换反而降低了效率，再加之markdown中LaTeX的限制，便转身投靠了MacTeX。本想要借助某位国外大神的LaTeX+Vim+Snippets的设计进行自动化写作，但是在Mac环境下的配置失败而引发的一系列惨剧让我终止了这个计划。于是我便使用了VSCode+LaTeX+Plugin的方案。但是很多我想要的Snippets都没有而且也不能做到个性化的自定义，我便尝试编写一个Plugin达到此功能。于是，我前前后后花了五六天的时间完成了这个项目，在大年初二发布了。P.S. 正巧在前些天看了mcy大佬的博客（关于Linux下Vim+LaTeX的配置），准备过两天拿手边的rPi去尝试一下。</p><p>在此，特别感谢对此项目提供帮助的yjc大佬（深夜帮忙查js的bug），wyy大佬（对图标设计提供的意见），以及wsj、wrl、jdh等GitHub的star。</p><p>整个项目的工程文件也在我的Github上：<a href="https://github.com/JeffersonQin/VSCode-LaTeX-Snippets">https://github.com/JeffersonQin/VSCode-LaTeX-Snippets</a></p><p>另外特别感谢一篇博客：<a href="https://www.cnblogs.com/liuxianan/p/vscode-plugin-overview.html">https://www.cnblogs.com/liuxianan/p/vscode-plugin-overview.html</a><br>，其给予了我巨大的帮助</p><a id="more"></a><h2 id="插件下载"><a href="#插件下载" class="headerlink" title="插件下载"></a>插件下载</h2><p>此项目已经发布在了marketplace上：<a href="https://marketplace.visualstudio.com/items?itemName=JeffersonQin.latex-snippets-jeff">https://marketplace.visualstudio.com/items?itemName=JeffersonQin.latex-snippets-jeff</a><br>，大家可以下载安装。</p><h2 id="项目概述"><a href="#项目概述" class="headerlink" title="项目概述"></a>项目概述</h2><p>此项目主要想要完成的功能是对tex文件编辑下的Snippets做一些扩展，即增加一些自动补全功能。同时，还提供了对函数作图的图形界面的功能。</p><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><p>首先是开发环境的安装。通过微软官方的<a href="https://github.com/Microsoft/vscode-generator-code">vscode-generator-code</a>来安装。</p><p>首先保证安装好了<code>npm</code>和<code>vscode</code>，打开终端，运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g yo generator-code</span><br></pre></td></tr></table></figure><p>以此来安装generator。</p><h2 id="生成项目"><a href="#生成项目" class="headerlink" title="生成项目"></a>生成项目</h2><p>打开terminal并定位到目标文件夹，运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">yo code</span><br></pre></td></tr></table></figure><p>虽然我们开发的是Snippets插件，但是还会需要用到别的功能，所以选择的时候选择开发完整的功能，语言我选了JavaScript（TypeScript也差不多）</p><h2 id="配置package-json"><a href="#配置package-json" class="headerlink" title="配置package.json"></a>配置package.json</h2><p>项目的大部分设置内容都在<code>package.json</code>当中，我们重点需要对以下内容进行配置：</p><ul><li><code>displayname</code>：插件在marketplace上显示的名称</li><li><code>description</code>：插件描述</li><li><code>publisher</code>：发布者</li><li><code>categories</code>：种类，这里选的是<code>Snippets</code></li><li><code>actionEvents</code>：哪些时间可以激活扩展，我这里是<code>[&quot;*&quot;]</code>，意思是全局激活</li><li><code>main</code>：插件的主入口（一般不需要修改）</li><li><code>contributes</code>：插件主要做的一些事，在稍后的部分我们会去修改</li><li><code>repository</code>：代码仓库，我的配置：<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&quot;repository&quot;: &#123;</span><br><span class="line"> &quot;type&quot;: &quot;git&quot;,</span><br><span class="line"> &quot;url&quot;: &quot;https://github.com/JeffersonQin/LaTeX-Snippets-Jeff&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><code>homepage</code>：主页（我是用的是GitHub主页）</li><li><code>icon</code>：图标路径（项目中的相对路径）</li></ul><h2 id="编写Snippets"><a href="#编写Snippets" class="headerlink" title="编写Snippets"></a>编写Snippets</h2><p>此项目的本意是要增加一些Snippets，所以我决定先把这个主要工作完成。在项目的根目录下新建文件夹<code>snippets</code>，并在当中新建文件：<code>latex.json</code>。</p><p>Snippets就编写在这个<code>json</code>文件当中，以下为文件的结构：</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;SNIPPET_NAME&quot;</span>: &#123;</span><br><span class="line">        <span class="attr">&quot;prefix&quot;</span>: [<span class="string">&quot;PREFIX_1&quot;</span>, <span class="string">&quot;PREFIX_2&quot;</span>, ... ],</span><br><span class="line">        <span class="attr">&quot;body&quot;</span>: [</span><br><span class="line">            <span class="string">&quot;LINE_1&quot;</span>, <span class="string">&quot;LINE_2&quot;</span>, ...</span><br><span class="line">        ], </span><br><span class="line">        <span class="attr">&quot;description&quot;</span>: <span class="string">&quot;DESCRIPTION&quot;</span></span><br><span class="line">    &#125;, ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>解释：</p><ul><li>在<code>SNIPPET_NAME</code>的部分填入Snippet的名称</li><li><code>prefix</code>就是输入什么才能触发Snippets的数组</li><li><code>body</code>就是代码片段内容的数组</li><li><code>description</code>就是Snippets的描述</li><li>在<code>PREFIX_1</code>等的部分填入各个不同的缩写</li><li>在<code>LINE_1</code>等部分填入各行内容，顺次排列</li></ul><h3 id="占位符"><a href="#占位符" class="headerlink" title="占位符"></a>占位符</h3><p>复杂的代码片段会使用到占位符，占位符形如：<code>$&#123;1:xxx&#125;</code>, <code>$&#123;2:xxx&#125;</code>, …, 顺序按照数字顺次排列，每个占位符中的<code>xxx</code>为占位符的实例内容，结束位置的占位符为<code>$0</code>。</p><p>比如我的LaTeX数学环境的Snippets就是：<br><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">&quot;Centered Math&quot;: &#123;</span><br><span class="line">    &quot;prefix&quot;: [&quot;mathcentered&quot;, &quot;\\mathcentered&quot;],</span><br><span class="line">    &quot;body&quot;: [</span><br><span class="line">        <span class="string">&quot;$$ $0 $$&quot;</span></span><br><span class="line">    ],</span><br><span class="line">    &quot;description&quot;: &quot;Insert centered Math Environment.&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>其中用到了结束占位符。</p><p>另外，我还是用到了一种较为特殊的占位符—选择占位符—顾名思义其可以让用户在几个选项中做出选择。下面就是我用到的一个Snippet：<br><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">&quot;Create 2D Plot environment&quot;: &#123;</span><br><span class="line">    &quot;prefix&quot;: [&quot;plotenvironment2d&quot;, &quot;\\plotenvironment2d&quot;],</span><br><span class="line">    &quot;body&quot;: [</span><br><span class="line">        &quot;\\begin&#123;tikzpicture&#125;&quot;,</span><br><span class="line">        &quot;\\begin&#123;axis&#125;[&quot;,</span><br><span class="line">        &quot;legend pos=outer north east,&quot;,</span><br><span class="line">        &quot;title=$&#123;1:Example&#125;,&quot;,</span><br><span class="line">        &quot;axis lines =$&#123;2| box, left, middle, center, right, none|&#125;,&quot;,</span><br><span class="line">        &quot;xlabel = \\$x\\$,&quot;,</span><br><span class="line">        &quot;ylabel = \\$y\\$,&quot;,</span><br><span class="line">        &quot;variable = t,&quot;,</span><br><span class="line">        &quot;trig format plots = rad,&quot;,</span><br><span class="line">        &quot;]&quot;,</span><br><span class="line">        &quot;$3&quot;,</span><br><span class="line">        &quot;\\end&#123;axis&#125;&quot;,</span><br><span class="line">        <span class="string">&quot;\\end&#123;tikzpicture&#125;$0&quot;</span></span><br><span class="line">    ],</span><br><span class="line">    &quot;description&quot;: &quot;Create a 2DPlot Environment of pgfplots. The style declarations are already included in the snippet.&quot;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>其中<code>$&#123;2| box, left, middle, center, right, none|&#125;</code>便是指用户可以在<code>box</code>, <code>left</code>, <code>middle</code>, <code>center</code>, <code>right</code>, <code>none</code>中做出选择。</p><p>还有一些其他的占位符，包括会用到系统的VARIABLE，正则表达式匹配，等。但是在我的项目中并没有使用到，这一也不再做介绍了。这个是官方的documentation：<a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets">https://code.visualstudio.com/docs/editor/userdefinedsnippets</a></p><p>接下来我们将要在package.json中做配置：找到之前提到的”contribute”，在”snippets”中（如果没有就创建）添加：<br><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;language&quot;</span>: <span class="string">&quot;latex&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;path&quot;</span>: <span class="string">&quot;./snippets/latex.json&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>在我这里长这样：<br><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&quot;contributes&quot;: &#123;</span><br><span class="line">    &quot;snippets&quot;: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;language&quot;</span>: <span class="string">&quot;latex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;path&quot;</span>: <span class="string">&quot;./snippets/latex.json&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    ],</span><br><span class="line">    ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><h2 id="Snippet功能的测试"><a href="#Snippet功能的测试" class="headerlink" title="Snippet功能的测试"></a>Snippet功能的测试</h2><p>点击页面左侧的测试按钮（形状像小虫子），点击运行就可以进行测试。测试会在一个行的VSCode页面进行，标题为<code>扩展开发宿主</code>。我们可以在tex文件中进行测试。</p><h2 id="编写函数绘图辅助工具"><a href="#编写函数绘图辅助工具" class="headerlink" title="编写函数绘图辅助工具"></a>编写函数绘图辅助工具</h2><p>因为学校上AP Calc时，老师经常会比较随性地画一些曲线来说明，这就给了我灵感来做一个函数绘图的辅助工具。过程是这样的：在平面上点击了一些点之后，选择次数，就可以进行多项式拟合。原理也比较简单，就是解高次方程组，或者可以将问题转化为Linear Regression。</p><p>这里使用VSCode的WebView来编写此功能(HTML5+CSS3+JS)。</p><p>因为代码量肯定不会小，加之第一次使用JS，生怕翻车，我就上GitHub上找到了一个库：<code>js-polynomial-regression</code> <a href="https://github.com/RobertMenke/JS-Polynomial-Regression">Github Link</a>.</p><p>本来我想按照常规的方法npm安装然后引用的，但是报错始终修不了，于是我就将其所有代码全部放在了js文件当中。</p><h3 id="DOM事件"><a href="#DOM事件" class="headerlink" title="DOM事件"></a>DOM事件</h3><p>在VSCode中，DOM事件入口：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">window</span>.addEventListener(<span class="string">&#x27;DOMContentLoaded&#x27;</span>, <span class="function">() =&gt;</span> &#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>和页面相关的内容全部写在这个接口内。</p><h4 id="VSCode与WebView的通讯"><a href="#VSCode与WebView的通讯" class="headerlink" title="VSCode与WebView的通讯"></a>VSCode与WebView的通讯</h4><p>这里我使用了封装好的接口</p><p>在网页的js文件当中：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> testMode = <span class="literal">false</span>; <span class="comment">// 为true时可以在浏览器打开不报错</span></span><br><span class="line"><span class="comment">// vscode webview 网页和普通网页的唯一区别：多了一个acquireVsCodeApi方法</span></span><br><span class="line"><span class="keyword">const</span> vscode = testMode ? &#123;&#125; : acquireVsCodeApi();</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 调用vscode原生api</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param </span>data 可以是类似 &#123;cmd: &#x27;xxx&#x27;, param1: &#x27;xxx&#x27;&#125;，也可以直接是 cmd 字符串</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param </span>cb 可选的回调函数</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">callVscode</span>(<span class="params">data, cb</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">typeof</span> data === <span class="string">&#x27;string&#x27;</span>) &#123;</span><br><span class="line">        data = &#123; <span class="attr">cmd</span>: data &#125;;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (cb) &#123;</span><br><span class="line">        <span class="comment">// 时间戳加上5位随机数</span></span><br><span class="line">        <span class="keyword">const</span> cbid = <span class="built_in">Date</span>.now() + <span class="string">&#x27;&#x27;</span> + <span class="built_in">Math</span>.round(<span class="built_in">Math</span>.random() * <span class="number">100000</span>);</span><br><span class="line">        callbacks[cbid] = cb;</span><br><span class="line">        data.cbid = cbid;</span><br><span class="line">    &#125;</span><br><span class="line">    vscode.postMessage(data);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><br>在extension.js当中：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// The module &#x27;vscode&#x27; contains the VS Code extensibility API</span></span><br><span class="line"><span class="comment">// Import the module and reference it with the alias vscode in your code below</span></span><br><span class="line"><span class="keyword">const</span> vscode = <span class="built_in">require</span>(<span class="string">&#x27;vscode&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">&#x27;fs&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> path = <span class="built_in">require</span>(<span class="string">&#x27;path&#x27;</span>);</span><br><span class="line"><span class="keyword">const</span> util = <span class="built_in">require</span>(<span class="string">&#x27;./util&#x27;</span>);</span><br><span class="line"><span class="comment">// this method is called when your extension is activated</span></span><br><span class="line"><span class="comment">// your extension is activated the very first time the command is executed</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 从某个HTML文件读取能被Webview加载的HTML内容</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;*&#125;</span> </span>context 上下文</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;*&#125;</span> </span>templatePath 相对于插件根目录的html文件相对路径</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">getWebViewContent</span>(<span class="params">context, templatePath</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">const</span> resourcePath = util.getExtensionFileAbsolutePath(context, templatePath);</span><br><span class="line">    <span class="keyword">const</span> dirPath = path.dirname(resourcePath);</span><br><span class="line">    <span class="keyword">let</span> html = fs.readFileSync(resourcePath, <span class="string">&#x27;utf-8&#x27;</span>);</span><br><span class="line">    <span class="comment">// vscode不支持直接加载本地资源，需要替换成其专有路径格式，这里只是简单的将样式和JS的路径替换</span></span><br><span class="line">    html = html.replace(<span class="regexp">/(&lt;link.+?href=&quot;|&lt;script.+?src=&quot;|&lt;img.+?src=&quot;)(.+?)&quot;/g</span>, <span class="function">(<span class="params">m, $<span class="number">1</span>, $<span class="number">2</span></span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> $<span class="number">1</span> + vscode.Uri.file(path.resolve(dirPath, $<span class="number">2</span>)).with(&#123; <span class="attr">scheme</span>: <span class="string">&#x27;vscode-resource&#x27;</span> &#125;).toString() + <span class="string">&#x27;&quot;&#x27;</span>;</span><br><span class="line">    &#125;);</span><br><span class="line">    <span class="keyword">return</span> html;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 执行回调函数</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;*&#125;</span> </span>panel </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;*&#125;</span> </span>message </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;*&#125;</span> </span>resp </span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">invokeCallback</span>(<span class="params">panel, message, resp</span>) </span>&#123;</span><br><span class="line">    <span class="built_in">console</span>.log(<span class="string">&#x27;Invoke call back: &#x27;</span>, resp);</span><br><span class="line">    <span class="comment">// 错误码在400-600之间的，默认弹出错误提示</span></span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">typeof</span> resp == <span class="string">&#x27;object&#x27;</span> &amp;&amp; resp.code &amp;&amp; resp.code &gt;= <span class="number">400</span> &amp;&amp; resp.code &lt; <span class="number">600</span>) &#123;</span><br><span class="line">        util.showError(resp.message || <span class="string">&#x27;Unknown error occurred!&#x27;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    panel.webview.postMessage(&#123;<span class="attr">cmd</span>: <span class="string">&#x27;vscodeCallback&#x27;</span>, <span class="attr">cbid</span>: message.cbid, <span class="attr">data</span>: resp&#125;);</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * 存放所有消息回调函数，根据 message.cmd 来决定调用哪个方法</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">const</span> messageHandler = &#123;</span><br><span class="line">    <span class="comment">// 弹出提示</span></span><br><span class="line">    alert(message) &#123;</span><br><span class="line">        util.showInfo(message.info);</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">// 显示错误提示</span></span><br><span class="line">    error(message) &#123;</span><br><span class="line">        util.showError(message.info);</span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="comment">// 获取工程名</span></span><br><span class="line">    getProjectName(<span class="built_in">global</span>, message) &#123;</span><br><span class="line">        invokeCallback(<span class="built_in">global</span>.panel, message, util.getProjectName(<span class="built_in">global</span>.projectPath));</span><br><span class="line">    &#125;,</span><br><span class="line">    openFileInFinder(<span class="built_in">global</span>, message) &#123;</span><br><span class="line">        util.openFileInFinder(<span class="string">`<span class="subst">$&#123;<span class="built_in">global</span>.projectPath&#125;</span>/<span class="subst">$&#123;message.path&#125;</span>`</span>);</span><br><span class="line">        <span class="comment">// 这里的回调其实是假的，并没有真正判断是否成功</span></span><br><span class="line">        invokeCallback(<span class="built_in">global</span>.panel, message, &#123;<span class="attr">code</span>: <span class="number">0</span>, <span class="attr">text</span>: <span class="string">&#x27;成功&#x27;</span>&#125;);</span><br><span class="line">    &#125;,</span><br><span class="line">    openFileInVscode(<span class="built_in">global</span>, message) &#123;</span><br><span class="line">        util.openFileInVscode(<span class="string">`<span class="subst">$&#123;<span class="built_in">global</span>.projectPath&#125;</span>/<span class="subst">$&#123;message.path&#125;</span>`</span>, message.text);</span><br><span class="line">        invokeCallback(<span class="built_in">global</span>.panel, message, &#123;<span class="attr">code</span>: <span class="number">0</span>, <span class="attr">text</span>: <span class="string">&#x27;成功&#x27;</span>&#125;);</span><br><span class="line">    &#125;,</span><br><span class="line">    openUrlInBrowser(<span class="built_in">global</span>, message) &#123;</span><br><span class="line">        util.openUrlInBrowser(message.url);</span><br><span class="line">        invokeCallback(<span class="built_in">global</span>.panel, message, &#123;<span class="attr">code</span>: <span class="number">0</span>, <span class="attr">text</span>: <span class="string">&#x27;成功&#x27;</span>&#125;);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;vscode.ExtensionContext&#125;</span> <span class="variable">context</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">activate</span>(<span class="params">context</span>) </span>&#123;</span><br><span class="line">    context.subscriptions.push(vscode.commands.registerCommand(<span class="string">&#x27;extension.openWebview&#x27;</span>, <span class="function"><span class="keyword">function</span> (<span class="params">uri</span>) </span>&#123;</span><br><span class="line">        <span class="keyword">const</span> panel = vscode.window.createWebviewPanel(</span><br><span class="line">            <span class="string">&#x27;testWebview&#x27;</span>, <span class="comment">// viewType</span></span><br><span class="line">            <span class="string">&quot;Plot&quot;</span>, <span class="comment">// 视图标题</span></span><br><span class="line">            vscode.ViewColumn.Beside, <span class="comment">// 显示在编辑器的哪个部位</span></span><br><span class="line">            &#123;</span><br><span class="line">                enableScripts: <span class="literal">true</span>, <span class="comment">// 启用JS，默认禁用</span></span><br><span class="line">                retainContextWhenHidden: <span class="literal">true</span>, <span class="comment">// webview被隐藏时保持状态，避免被重置</span></span><br><span class="line">            &#125;</span><br><span class="line">        );</span><br><span class="line">        <span class="comment">// let global = &#123; projectPath, panel&#125;;</span></span><br><span class="line">        panel.webview.html = getWebViewContent(context, <span class="string">&#x27;src/plotDots.html&#x27;</span>);</span><br><span class="line">        panel.webview.onDidReceiveMessage(<span class="function"><span class="params">message</span> =&gt;</span> &#123;</span><br><span class="line">            <span class="comment">// 通讯入口</span></span><br><span class="line">            <span class="keyword">if</span> (messageHandler[message.cmd]) &#123;</span><br><span class="line">                messageHandler[message.cmd](message);</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                util.showError(<span class="string">`Invoking method named <span class="subst">$&#123;message.cmd&#125;</span> not found!`</span>);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;, <span class="literal">undefined</span>, context.subscriptions);</span><br><span class="line">    &#125;));</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><p>这里还用到了辅助文件<code>util.js</code>来自文章开头所引用的博客，确实帮助我们减轻了很多工作量，具体代码在我的GitHub上可以看到。</p><h4 id="在package-json中完成注册"><a href="#在package-json中完成注册" class="headerlink" title="在package.json中完成注册"></a>在package.json中完成注册</h4><p>最终，<code>package.json</code>中<code>contributes</code>变成：<br><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&quot;contributes&quot;: &#123;</span><br><span class="line">    &quot;snippets&quot;: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;language&quot;</span>: <span class="string">&quot;latex&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;path&quot;</span>: <span class="string">&quot;./snippets/latex.json&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    ],</span><br><span class="line">    &quot;commands&quot;: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;title&quot;</span>: <span class="string">&quot;LaTeX Plotting Tool&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;command&quot;</span>: <span class="string">&quot;extension.openWebview&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    ]</span><br><span class="line">&#125;,</span><br></pre></td></tr></table></figure></p><h2 id="发布"><a href="#发布" class="headerlink" title="发布"></a>发布</h2><p>发布和打包需要用到<code>vsce</code></p><h3 id="安装工具"><a href="#安装工具" class="headerlink" title="安装工具"></a>安装工具</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i vsce -g</span><br></pre></td></tr></table></figure><h3 id="创建Azure账号"><a href="#创建Azure账号" class="headerlink" title="创建Azure账号"></a>创建Azure账号</h3><p>可以使用Microsoft账号或者GitHub账号登录：<a href="https://aka.ms/SignupAzureDevOps">https://aka.ms/SignupAzureDevOps</a></p><h3 id="创建Personal-Access-Token"><a href="#创建Personal-Access-Token" class="headerlink" title="创建Personal Access Token"></a>创建Personal Access Token</h3><p>点击页面上方的人形图标（右下角有齿轮形状），找到「Personal Access Tokens」并点击。创建Personal Access Tokens，注意：</p><ul><li>name：vsce</li><li>Organization：<code>All Accessible Organizations</code></li><li>Scopes: <code>Full Access</code><br>之后你需要把这个Token记下来，网站是不会保存的。</li></ul><h3 id="使用vsce创建新的发布者"><a href="#使用vsce创建新的发布者" class="headerlink" title="使用vsce创建新的发布者"></a>使用vsce创建新的发布者</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vsce create-publisher your-publisher-name</span><br></pre></td></tr></table></figure><p>其中，<code>your-publisher-name</code>是你要创建的发布者的名字。之后会要求填入：</p><ul><li>Publisher Human-friendly name: 发布者的显示名称</li><li>E-mail: 邮箱</li><li>Personal Access Token: 之前的Token</li></ul><h3 id="发布-1"><a href="#发布-1" class="headerlink" title="发布"></a>发布</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vsce publish</span><br></pre></td></tr></table></figure><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p>README.md文件默认会显示在插件主页；<br>README.md中的资源必须全部是HTTPS的，如果是HTTP会发布失败；<br>CHANGELOG.md会显示在变更选项卡；<br>如果代码是放在git仓库并且设置了repository字段，发布前必须先提交git，否则会提示Git working directory not clean；</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;除夕夜的静谧-VSCode插件开发：LaTeX-Snippets&quot;&gt;&lt;a href=&quot;#除夕夜的静谧-VSCode插件开发：LaTeX-Snippets&quot; class=&quot;headerlink&quot; title=&quot;除夕夜的静谧 - VSCode插件开发：LaTeX Snippets&quot;&gt;&lt;/a&gt;除夕夜的静谧 - VSCode插件开发：LaTeX Snippets&lt;/h1&gt;&lt;h2 id=&quot;写在前面&quot;&gt;&lt;a href=&quot;#写在前面&quot; class=&quot;headerlink&quot; title=&quot;写在前面&quot;&gt;&lt;/a&gt;写在前面&lt;/h2&gt;&lt;p&gt;这个项目是在20年春节前夕想到的。那时候正在需要非常频繁地键入数学公式，一开始使用的编辑器是Typora，但是越到后面，基础功能已经不再能满足需求。我开发出了一套Keyboard Maestro的快捷键来加快写作速度，但是不同模式的频繁切换反而降低了效率，再加之markdown中LaTeX的限制，便转身投靠了MacTeX。本想要借助某位国外大神的LaTeX+Vim+Snippets的设计进行自动化写作，但是在Mac环境下的配置失败而引发的一系列惨剧让我终止了这个计划。于是我便使用了VSCode+LaTeX+Plugin的方案。但是很多我想要的Snippets都没有而且也不能做到个性化的自定义，我便尝试编写一个Plugin达到此功能。于是，我前前后后花了五六天的时间完成了这个项目，在大年初二发布了。P.S. 正巧在前些天看了mcy大佬的博客（关于Linux下Vim+LaTeX的配置），准备过两天拿手边的rPi去尝试一下。&lt;/p&gt;
&lt;p&gt;在此，特别感谢对此项目提供帮助的yjc大佬（深夜帮忙查js的bug），wyy大佬（对图标设计提供的意见），以及wsj、wrl、jdh等GitHub的star。&lt;/p&gt;
&lt;p&gt;整个项目的工程文件也在我的Github上：&lt;a href=&quot;https://github.com/JeffersonQin/VSCode-LaTeX-Snippets&quot;&gt;https://github.com/JeffersonQin/VSCode-LaTeX-Snippets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;另外特别感谢一篇博客：&lt;a href=&quot;https://www.cnblogs.com/liuxianan/p/vscode-plugin-overview.html&quot;&gt;https://www.cnblogs.com/liuxianan/p/vscode-plugin-overview.html&lt;/a&gt;&lt;br&gt;，其给予了我巨大的帮助&lt;/p&gt;</summary>
    
    
    
    <category term="VSCode" scheme="http://gyrojeff.moe/categories/VSCode/"/>
    
    
    <category term="VSCode" scheme="http://gyrojeff.moe/tags/VSCode/"/>
    
    <category term="JS" scheme="http://gyrojeff.moe/tags/JS/"/>
    
    <category term="HTML" scheme="http://gyrojeff.moe/tags/HTML/"/>
    
    <category term="CSS" scheme="http://gyrojeff.moe/tags/CSS/"/>
    
  </entry>
  
  <entry>
    <title>200304-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/04/200304-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/04/200304-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-04T06:19:28.000Z</published>
    <updated>2020-03-12T05:29:13.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-4-物理课"><a href="#3-4-物理课" class="headerlink" title="3/4 物理课"></a>3/4 物理课</h1><ul><li><p>线速度 $v$：</p><ul><li><script type="math/tex; mode=display">v = \frac s t</script></li><li><p>矢量，方向：质点所在的切线方向</p></li><li><p>单位：$\text {m/s}$</p></li></ul></li><li><p>圆心角 $\varphi$：</p><ul><li>单位：弧度（$\text{rad}$）</li></ul></li><li><p>角速度 $\omega$：</p><ul><li><p>质点所在半径所转过的角度$\varphi$与所用时间$t$的比值</p></li><li><script type="math/tex; mode=display">\omega = \frac \varphi t</script></li><li><p>单位：弧度每秒（$\text{rad/s}$）</p></li></ul></li></ul><a id="more"></a><h2 id="关于弧度制"><a href="#关于弧度制" class="headerlink" title="关于弧度制"></a>关于弧度制</h2><script type="math/tex; mode=display">角度 \mapsto \mathbb R</script><script type="math/tex; mode=display">2\pi ~\text{rad} = 360^ \circ</script><script type="math/tex; mode=display">\theta = \frac {s } {r}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-4-物理课&quot;&gt;&lt;a href=&quot;#3-4-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/4 物理课&quot;&gt;&lt;/a&gt;3/4 物理课&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;线速度 $v$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
v = \frac s t&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;矢量，方向：质点所在的切线方向&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;单位：$\text {m/s}$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;圆心角 $\varphi$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单位：弧度（$\text{rad}$）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;角速度 $\omega$：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;质点所在半径所转过的角度$\varphi$与所用时间$t$的比值&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
\omega = \frac \varphi t&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;单位：弧度每秒（$\text{rad/s}$）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>200303-市信息课</title>
    <link href="http://gyrojeff.moe/2020/03/03/200303-%E5%B8%82%E4%BF%A1%E6%81%AF%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/03/200303-%E5%B8%82%E4%BF%A1%E6%81%AF%E8%AF%BE/</id>
    <published>2020-03-03T08:01:07.000Z</published>
    <updated>2020-03-12T05:29:51.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-3-信息科技"><a href="#3-3-信息科技" class="headerlink" title="3/3 信息科技"></a>3/3 信息科技</h1><h2 id="算法的概念"><a href="#算法的概念" class="headerlink" title="算法的概念"></a>算法的概念</h2><p><strong>算法</strong>是解决问题的具体<strong>方法</strong>和<strong>步骤</strong></p><h2 id="算法的特征"><a href="#算法的特征" class="headerlink" title="算法的特征"></a>算法的特征</h2><ul><li>有穷性</li><li>确定性</li><li>可行性</li><li>有零个或多个输入</li><li>有一个或多个输出</li></ul><a id="more"></a><h2 id="算法的描述"><a href="#算法的描述" class="headerlink" title="算法的描述"></a>算法的描述</h2><ul><li>自然语言</li><li>流程图<ul><li>圆角矩形：开始、结束符</li><li>平行四边形：输入输出框</li><li>直角矩形：处理框</li><li>菱形：判断框</li><li>箭头：流程线</li></ul></li><li>伪代码或程序设计语言</li></ul><h2 id="基本数据类型"><a href="#基本数据类型" class="headerlink" title="基本数据类型"></a>基本数据类型</h2><ul><li>数值型（包含整形、浮点型（包括单精度、双精度，等））</li><li>字符串型</li><li>逻辑性（布尔型）</li></ul><p>VB</p><ul><li>Integer：整形</li><li>Long：长整形</li><li>Single：单精度型实数</li><li>Double：双精度型实数</li><li>String：字符串型</li><li>Boolean：逻辑性</li></ul><h2 id="常量与变量"><a href="#常量与变量" class="headerlink" title="常量与变量"></a>常量与变量</h2><p>常量：程序运行过程中始终保持不变的量</p><p>变量：程序运行过程中值可以发生变化的量</p><ul><li>变量名</li><li>数据类型（变量申明时决定）</li></ul>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-3-信息科技&quot;&gt;&lt;a href=&quot;#3-3-信息科技&quot; class=&quot;headerlink&quot; title=&quot;3/3 信息科技&quot;&gt;&lt;/a&gt;3/3 信息科技&lt;/h1&gt;&lt;h2 id=&quot;算法的概念&quot;&gt;&lt;a href=&quot;#算法的概念&quot; class=&quot;headerlink&quot; title=&quot;算法的概念&quot;&gt;&lt;/a&gt;算法的概念&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;算法&lt;/strong&gt;是解决问题的具体&lt;strong&gt;方法&lt;/strong&gt;和&lt;strong&gt;步骤&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;算法的特征&quot;&gt;&lt;a href=&quot;#算法的特征&quot; class=&quot;headerlink&quot; title=&quot;算法的特征&quot;&gt;&lt;/a&gt;算法的特征&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;有穷性&lt;/li&gt;
&lt;li&gt;确定性&lt;/li&gt;
&lt;li&gt;可行性&lt;/li&gt;
&lt;li&gt;有零个或多个输入&lt;/li&gt;
&lt;li&gt;有一个或多个输出&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="信息科技" scheme="http://gyrojeff.moe/tags/%E4%BF%A1%E6%81%AF%E7%A7%91%E6%8A%80/"/>
    
  </entry>
  
  <entry>
    <title>200303-市化学课</title>
    <link href="http://gyrojeff.moe/2020/03/03/200303-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/03/200303-%E5%B8%82%E5%8C%96%E5%AD%A6%E8%AF%BE/</id>
    <published>2020-03-03T06:55:43.000Z</published>
    <updated>2020-09-22T12:59:11.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-3-化学"><a href="#3-3-化学" class="headerlink" title="3/3 化学"></a>3/3 化学</h1><h2 id="硫单质的物理性质"><a href="#硫单质的物理性质" class="headerlink" title="硫单质的物理性质"></a>硫单质的物理性质</h2><ol><li>淡黄色固体<br>单质：斜方硫、单斜硫</li><li>熔沸点低</li><li><p>不溶于水、微溶于酒精、易溶于二硫化碳 $\ce{CS2}$</p></li><li><p>农药、肥皂、肥料、等</p></li></ol><h2 id="硫单质的原子结构与常见化合价"><a href="#硫单质的原子结构与常见化合价" class="headerlink" title="硫单质的原子结构与常见化合价"></a>硫单质的原子结构与常见化合价</h2><p>常见化合价：$-2,0,+4,+6$</p><p>$\ce S$ 得 $\ce{2e}$ 变成 $\ce{S^{2-}}$<br><a id="more"></a></p><h2 id="硫单质的化学性质"><a href="#硫单质的化学性质" class="headerlink" title="硫单质的化学性质"></a>硫单质的化学性质</h2><ol><li><p>可燃性（还原性）<br>空气中燃烧：淡蓝色火焰；氧气中燃烧：明亮的蓝紫色火焰</p><script type="math/tex; mode=display">\ce {S + O2 ->[点燃] SO2}</script></li><li><p>氧化性（$\overset{0}{\ce S} \rightarrow \overset {-2}{\ce S}$）</p></li></ol><ul><li>$\ce{Fe}$ 与 $\ce S$ 反应，现象：混合物保持红热状态，最终生成黑色固体（放热反应）</li></ul><script type="math/tex; mode=display">\ce {Fe + S ->[\Delta] FeS}</script><ul><li><p>$\ce {Cu}$ 与 $\ce S$ 反应，现象：铜丝保持红热，生成黑色物质（放热反应）</p><script type="math/tex; mode=display">\ce {2Cu + S ->[\Delta] Cu2S}</script></li><li><p>$\ce {Hg}$ 与 $\ce S$ 反应：</p><script type="math/tex; mode=display">\ce {Hg + S -> HgS}</script></li><li><p>$\ce {H2}$ 与 $\ce S$反应：</p><script type="math/tex; mode=display">\ce {H2 + S ->[\Delta] H2S}</script></li><li><p>比较 $\ce {Cl}$ 与 $\ce S$ 氧化性的强弱：</p><script type="math/tex; mode=display">\ce {2Fe + 3Cl2 ->[\Delta]2FeCl3}</script><script type="math/tex; mode=display">\ce {Cu + Cl2 ->[\Delta] CuCl2}</script><p>得电子能力：$ \ce {Cl2} &gt; \ce S \Rightarrow $ 氧化性：$\ce {Cl2} &gt; \ce S$ .</p></li></ul><h2 id="硫化氢的物理性质"><a href="#硫化氢的物理性质" class="headerlink" title="硫化氢的物理性质"></a>硫化氢的物理性质</h2><ul><li><p>臭鸡蛋气味气体</p></li><li><p>密度比空气大</p></li><li><p>有毒</p></li><li><p>能溶于水</p></li></ul><h2 id="硫化氢的结构"><a href="#硫化氢的结构" class="headerlink" title="硫化氢的结构"></a>硫化氢的结构</h2><ul><li>分子结构与水类似<script type="math/tex; mode=display">\ce {H-S-H}</script></li></ul><h2 id="硫化氢的化学性质"><a href="#硫化氢的化学性质" class="headerlink" title="硫化氢的化学性质"></a>硫化氢的化学性质</h2><ol><li><p>不稳定性</p><script type="math/tex; mode=display">\ce {H2S ->[\Delta] S + H2 v}</script></li><li><p>还原性</p><script type="math/tex; mode=display">\ce {H2S + Cl2 -> 2HCl + S v}</script><script type="math/tex; mode=display">\ce {H2S + I2 -> 2HI + S v}</script><script type="math/tex; mode=display">\ce {2H2S + 3O2->[点燃] 2SO2 + 2H2O }~~~~~~~~~~氧气充足完全燃烧--可燃性</script><script type="math/tex; mode=display">\ce {2H2S + O2 ->[点燃] 2S v + 2H2O}~~~~~~~~~~氧气不足，不完全燃烧</script><script type="math/tex; mode=display">\ce {2H2S + O2 -> 2S v + 2H2O}~~~~~~~~~~氢硫酸在空气中变浑浊</script><script type="math/tex; mode=display">\ce {2H2S + SO2 -> 3S + 2H2O}~~~~~~~~~~和二氧化硫发生归中反应</script></li><li><p>$\ce{H2S}$ 具有酸的通性（二元弱酸）</p><script type="math/tex; mode=display">\ce {H2S <=> H+ + HS-}~~~~~~\ce {HS- <=> H+ + S^{2-}}</script></li></ol><h2 id="硫化氢气体的制备"><a href="#硫化氢气体的制备" class="headerlink" title="硫化氢气体的制备"></a>硫化氢气体的制备</h2><ol><li><p>制备原理：</p><script type="math/tex; mode=display">\ce{FeS + 2H+\color{red}{（非氧化性强酸，如稀H2SO4、盐酸）}-> H2S ^ + Fe^{2+}}</script><script type="math/tex; mode=display">\ce {FeS + 2HCl -> FeCl2 + H2S ^}</script><script type="math/tex; mode=display">\ce {FeS + H2SO4(稀)->FeSO4 + H2S}</script></li><li><p>气体发生装置：$\color{red}{固 + 液}$</p></li><li>气体收集方式：密闭的向上排空气法 + 尾气处理装置</li></ol><h2 id="硫化氢的尾气处理"><a href="#硫化氢的尾气处理" class="headerlink" title="硫化氢的尾气处理"></a>硫化氢的尾气处理</h2><script type="math/tex; mode=display">\ce {2NaOH + H2S -> Na2S + 2H2O}~~~~~~碱过量或恰好反应</script><h2 id="硫化氢与碱反应产生酸式盐"><a href="#硫化氢与碱反应产生酸式盐" class="headerlink" title="硫化氢与碱反应产生酸式盐"></a>硫化氢与碱反应产生酸式盐</h2><script type="math/tex; mode=display">\ce {NaOH + H2S -> NaHS + H2O}~~~~~~硫化氢过量</script><h2 id="硫化氢的检验"><a href="#硫化氢的检验" class="headerlink" title="硫化氢的检验"></a>硫化氢的检验</h2><script type="math/tex; mode=display">\ce {CuSO4 + H2S -> H2SO4 + CuS v (黑色)}</script><script type="math/tex; mode=display">\ce {Pb(Ac)2 + H2S -> 2HAc + PbS v (黑色)}</script><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>$\color {red} {\ce {H2S}是可燃性气体，点燃前要先验纯}$</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-3-化学&quot;&gt;&lt;a href=&quot;#3-3-化学&quot; class=&quot;headerlink&quot; title=&quot;3/3 化学&quot;&gt;&lt;/a&gt;3/3 化学&lt;/h1&gt;&lt;h2 id=&quot;硫单质的物理性质&quot;&gt;&lt;a href=&quot;#硫单质的物理性质&quot; class=&quot;headerlink&quot; title=&quot;硫单质的物理性质&quot;&gt;&lt;/a&gt;硫单质的物理性质&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;淡黄色固体&lt;br&gt;单质：斜方硫、单斜硫&lt;/li&gt;
&lt;li&gt;熔沸点低&lt;/li&gt;
&lt;li&gt;&lt;p&gt;不溶于水、微溶于酒精、易溶于二硫化碳 $\ce{CS2}$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;农药、肥皂、肥料、等&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;硫单质的原子结构与常见化合价&quot;&gt;&lt;a href=&quot;#硫单质的原子结构与常见化合价&quot; class=&quot;headerlink&quot; title=&quot;硫单质的原子结构与常见化合价&quot;&gt;&lt;/a&gt;硫单质的原子结构与常见化合价&lt;/h2&gt;&lt;p&gt;常见化合价：$-2,0,+4,+6$&lt;/p&gt;
&lt;p&gt;$\ce S$ 得 $\ce{2e}$ 变成 $\ce{S^{2-}}$&lt;br&gt;</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Chemistry" scheme="http://gyrojeff.moe/tags/Chemistry/"/>
    
  </entry>
  
  <entry>
    <title>[转载][汉化]吹响吧!上低音号 环印来到北宇治高中吹奏社</title>
    <link href="http://gyrojeff.moe/2020/03/03/%E8%BD%AC%E8%BD%BD-%E6%B1%89%E5%8C%96-%E5%90%B9%E5%93%8D%E5%90%A7-%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7-%E7%8E%AF%E5%8D%B0%E6%9D%A5%E5%88%B0%E5%8C%97%E5%AE%87%E6%B2%BB%E9%AB%98%E4%B8%AD%E5%90%B9%E5%A5%8F%E7%A4%BE/"/>
    <id>http://gyrojeff.moe/2020/03/03/%E8%BD%AC%E8%BD%BD-%E6%B1%89%E5%8C%96-%E5%90%B9%E5%93%8D%E5%90%A7-%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7-%E7%8E%AF%E5%8D%B0%E6%9D%A5%E5%88%B0%E5%8C%97%E5%AE%87%E6%B2%BB%E9%AB%98%E4%B8%AD%E5%90%B9%E5%A5%8F%E7%A4%BE/</id>
    <published>2020-03-03T05:13:58.000Z</published>
    <updated>2020-03-09T12:11:52.000Z</updated>
    
    <content type="html"><![CDATA[<p>吹響吧！上低音號<br>Sound! Euphonium<br>歡迎加入北宇治高中管樂社</p><p>作者<br>武田綾乃<br>译者<br>緋華璃</p><a id="more"></a><h1 id="吹响吧！上低音号-Sound-Euphonium-欢迎加入北宇治高中管乐社"><a href="#吹响吧！上低音号-Sound-Euphonium-欢迎加入北宇治高中管乐社" class="headerlink" title="吹响吧！上低音号 Sound!Euphonium 欢迎加入北宇治高中管乐社"></a>吹响吧！上低音号 Sound!Euphonium 欢迎加入北宇治高中管乐社</h1><p>武田绫乃</p><p>图源：江火如画<br>制作：江火如画<br>校对：江火如画<br>仅供个人学习交流使用， 禁作商业用途。<br>不可修改文本档， 转载请务必保留资讯。</p><hr><img src="/2020/03/03/%E8%BD%AC%E8%BD%BD-%E6%B1%89%E5%8C%96-%E5%90%B9%E5%93%8D%E5%90%A7-%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7-%E7%8E%AF%E5%8D%B0%E6%9D%A5%E5%88%B0%E5%8C%97%E5%AE%87%E6%B2%BB%E9%AB%98%E4%B8%AD%E5%90%B9%E5%A5%8F%E7%A4%BE/cover.png" class=""><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>管乐大赛结束，久美子与队友都为金牌开心不已时，只有首席小号手丽奈万分不甘心的说出这句话。久美子一直在意丽奈的话，因此刻意选了北宇治高中就读。却在开学第一天，命运般地在管乐社再次遇见丽奈。<br>在京阪宇治站不远处有座宇治桥，过桥后往左转，便可通到平等院。久美子很喜欢这条林立历史悠久的茶坊及日式点心店的街道，光是烘焙茶的香气乘着风飘来，就足以让久美子的心里舒坦。她也喜欢坐在宇治神社附近的堤防上，望着闪闪发光的正红色朝雾桥，感觉好极了。这片风景如同北宇治高中管乐社过去的光辉灿烂战绩，但，那已经是以前的事了。在新任老师的严厉指导下，大家再次专注于演奏上，而管乐社的问题也渐渐浮现……主动求辞的社员、一触即发的独奏争夺战、二年级与三年级间不可说出的往事，以及，久美子当时回答丽奈的那句话……<br>在管乐社进军全国大赛之前，要先团结所有人的心！洋溢着华丽乐章、酸甜青春、波涛汹涌的高中生活即将迈开序章！</p><h2 id="序章"><a href="#序章" class="headerlink" title="序章"></a>序章</h2><p>几百张脸全都凝望着同一个方向，充满热度的空气席卷了整个会场，将少女们的脸颊染得红通通的。久美子为了压抑不听使唤的急切心情，慢慢地深呼吸。心脏扑通扑通地狂跳，握得死紧的掌心捏着汗水，指甲深深陷进皮肤里，刻画出弦月般的痕迹。<br>「我可能会紧张到死掉。」旁边的梓以快要崩溃的表情喃喃自语。<br>「我也是。」久美子回答，用力地睁大双眼。<br>京都府管乐大赛。<br>直立式看板上罗列着简单的文字。这是她上了国中以后，第三次来到这个音乐厅。她以关西大赛为目标，努力至今。久美子的拳头不知不觉地越握越用力。<br>「来了！」<br>所有人异口同声地发出惊呼。几个抱着巨大纸张的男子慢条斯理地往前走，众人的视线全都集中在他们身上。心脏几乎要从胸腔跳出来，脑袋也热得快要昏倒了。久美子用手捂住满是红晕的双颊，也紧盯着那张纸看。<br>纸张缓缓地在几名男子的手中摊开，上头写着国中校名，旁边有金、银、铜等文字。自己的学校是……还来不及思考，就先听到梓的欢呼声。<br>「是金奖！」<br>仿佛受到传染，尖叫声此起彼落地响起。欢呼着：「太好了！是金奖！」的学校、沉默不语的学校。以结果为名的残酷现实，硬生生地呈现在眼前。看到隔壁学校的学生宛如送葬般的气氛，久美子一瞬间不晓得是不是该坦率地高兴。<br>「久美子！你在发什么呆啊！是金奖喔！金奖！」<br>久美子突然被梓一把抱住，终于露出笑容。<br>「……嗯，太好了。」<br>「我去告诉麻美。那家伙太紧张了，躲在洗手间里不肯出来。」<br>「好。待会儿还要收拾，别太晚回来喔！」<br>「收到！」<br>梓精神抖擞地回答完，冲进音乐厅，扎成马尾的黑发随着动作摇曳。久美子轻轻打开紧握的拳头，又看了公布结果的纸一眼，自己就读的国中校名旁边的确写着金奖二字。<br>虽然是金奖，却是没办法参加关西大赛的无用金奖，但金奖也算是及格了。久美子悄悄地瞥了一眼顾问的表情，只见顾问颇为满意地拍着手。太好了，是金奖！久美子心中终于开始慢慢地涌出真实感。松了一口气后，膝盖突然失去力气。她这才发现自己真的很紧张。<br>太好了。久美子正想这么对演奏相同乐器的伙伴说时，冷不防，视线范围的一隅有种不太对劲的感觉。她四下张望、寻找不对劲的原因时，不经意地与丽奈四目相交。丽奈紧紧地握着小号，脸上一丝笑容也没有，只是一动也不动地站在原地。<br>「你该不会是喜极而泣吧？」<br>久美子小心翼翼地问道，丽奈默不作声地摇头。她的大眼睛让人感受到坚强的意志，表面蒙着一层薄薄的泪雾。<br>「……心。」<br>「什么？」<br>久美子反问，于是丽奈这次口齿清晰地说了：<br>「不甘心。不甘心得快要死掉了。大家怎么会只拿到金奖就高兴成这样呢？我们的目标明明是要进军全国啊！」<br>泪水有如断了线的珍珠，从她的眼眶里滑落。为了逃离她的眼泪，久美子迅速瞥开目光，脸颊燥热得几乎要燃烧起来。只得到金奖就满足的自己，实在太丢脸了。<br>「……你真的以为我们能参加全国大赛吗？」<br>丽奈粗鲁地用手抹了抹眼角，从鼻子里冷哼一声。粉红色的唇瓣心浮气躁地上下颤抖，简直像是在责备她似地说：<br>「你不会不甘心吗？」<br>丽奈咬牙切齿的声音，不偏不倚地一箭射穿久美子的心脏。<br>「我很不甘心，超级不甘心的。」<br>宛如从肺腑里挤出来的声音，深深地烙印在久美子的脑里。<br>国中最后一次比赛。<br>每次想到当时的事，久美子都会忆起她的眼神。每当回想起她的眼神，久美子都会下意识地想要逃离那年夏天。</p><h2 id="第一章-上低音号，请多关照"><a href="#第一章-上低音号，请多关照" class="headerlink" title="第一章 上低音号，请多关照"></a>第一章 上低音号，请多关照</h2><p>藏青色的裙子长度及膝，白晰的腿从裙子底下探出来，在体育馆里列队而坐。纤细的腿、粗壮的腿。穿着立领制服的少年们没一刻安静，热切地四下张望。少女们不以为意地大方露出年轻娇嫩的肌肤。久美子漫不经心地看着眼前的景象，低头审视自己的模样─穿着藏青色的水手服，身材平板的少女。自己怎么会相信上了高中胸部就会变大这种鬼话呢？她再看一眼站在旁边的少女隔着衣服都能一目了然的丰满曲线，久美子静静地叹了一口气。<br>京都府立北宇治高中向来以制服可爱著称，是宇治市内唯一穿水手服的学校，也因此广受其他学校好评。学校成绩中上，升学率也没特别好。久美子之所以选择这样的高中，就是这身制服。如果要就读的高中条件都大同小异，当然还是制服可爱的学校比较好。明明是以这么不纯正的动机决定学校，一旦自己真的穿上那身制服，看起来却又不怎么可爱，真是奇妙。要是父母能把自己生得漂亮一点就好了，这是久美子最近的烦恼。<br>「接下来是校歌合唱，请大家站起来。」<br>训导主任的话令四周同时一阵骚动。久美子深怕自己跟不上大家的动作，也站起来。讲台上贴着为新生所写的校歌歌词大字报。国中时代，几乎没有学生会唱校歌，高中又如何呢？为了不让自己跟别人不一样，久美子悄悄巡视了周围一圈。只见四周的新生全都露出不安的表情，互相观察着彼此的模样。<br>管乐社的成员一脸认真地抱着乐器站在讲台下，负责指挥的是一脸凶恶的女学生。金色的粗管上低音号在日光灯下闪闪发光。此情此景令久美子瞬间倒抽了一口气。指挥抬起手来的那一瞬间，所有乐器同时举起来，擦得晶亮的小号一齐直挺挺地朝着久美子的方向。社员们吸气的声音清楚地传进耳中。指挥棒瞬间笔直地向上指，随即又往下挥。<br>「……这真是太糟糕了。」<br>久美子无意识地脱口而出。撞进耳膜里的是不协调到令人听不下去的音乐。节奏不整齐、拍子乱七八糟，指挥棒的动作与乐器声音完全搭不起来。原本上了高中也想继续参加管乐社，但如果是这种水准，还是算了。别说是关西大赛，连京都大赛都别指望能拿下金奖。<br>无视于久美子内心的想法，音乐还在继续演奏着。但是没有任何学生开口唱歌，只能听见从靠墙的位置传来老师们的歌声。没多久，演奏告一段落，学生全部就座。开学典礼继续顺利地进行下去，但是久美子的脑海中，充满了对接下来学校生活的不安与期待。要加入哪个社团？交得到朋友吗？级任老师又是什么样的人呢？<br>「接下来是新生致辞。新生代表高坂丽奈。」<br>耳边传来熟悉的名字，久美子蓦地抬起头来。「有！」凛然的声音在体育馆响起，穿着水手服的美少女站了起来。乌黑柔亮的黑色长发、大得不成比例的双眼，伸得直挺挺的背影充分显露出她的自信。<br>高坂丽奈。<br>久美子和她就读同一所国中，而且同样加入了管乐社。如果是成绩优秀、教师间风评也很好的她，的确足以担当新生代表的重责大任。问题是，像丽奈这么聪明的人肯定可以考上更理想的高中，为什么她会选择这所学校？她总不可能跟自己一样，是用制服来决定要念的高中。正当久美子侧着头百思不解时，丽奈冷不防地突然转向这边，黑曜石般的双眸直勾勾地盯着她。她该不会是在看自己吧？两人的视线确实交会了。虽然只是一瞬间的事，对久美子而言，感觉却是一段好长的时间。丽奈松开嘴角，仿佛什么事也没发生过地将视线转向正前方。她的唇瓣微张，倾泻出流畅的台词。新生代表。这个响亮的称号在脑海中来了又去，久美子又轻轻地叹了一口气。<br>「喂！你叫什么名字？」<br>久美子走进一年三班的教室，才刚坐下来就有人向她搭话。她往旁边一看，有个短发的少女对着她微笑。薄薄的唇瓣间隐约可见洁白的牙齿。从晒成古铜色的肌肤不难猜测她以前参过运动社团，是自己至今不太想扯上关系的人种。久美子为了掩饰慌张，无可无不可地微微一笑。<br>「我叫黄前久美子。」<br>「久美子吗？我是加藤叶月。看是要叫加藤还是叶月，随你高兴就好。」<br>叶月说道，从桌上探出身体。久美子心想这女生真是装熟啊，但还是重新转身面向她。<br>「对了，久美子是哪个国中毕业的？不是东中吧？」<br>「我是北中的。」<br>「北中？好特别啊！」<br>叶月大吃一惊地张大了眼睛。<br>「不晓得为什么，北宇治都是东中的人。我也是东中的，感觉就像是来到有很多熟人的高中。」<br>「那不是有很多朋友吗。好好噢，真羡慕你。」<br>「不不不，一点也不好。也再没有比让人知道国中的自己更惨的事了。就算想在高中重新来过，肯定也会被他们当成笑话来说。」<br>「没有这种事啦。」<br>「就是有这种事，所以我才忍住不染头发的。」<br>「其实我想染成红色的。」叶月说着，手指绕着自己的头发。那已经不只是在高中重新来过了吧……久美子心想，但是没有说出口。<br>「话说回来，我从刚才就很好奇，你为什么讲标准语？」<br>注：标准语：一般指某种语言的正规语法、发音和腔调。此处指东京话。<br>「嗯，我以前在东京住过，大概是因为这样吧？」<br>「是噢，都没有受到关西腔的影响吗？」<br>「家人也都讲标准语，所以才没怎么受到影响吧。啊，但是身边的朋友都说反而被我的标准语影响了。」<br>「嗯哼，我也得小心别被你影响了。」<br>叶月依旧用手撑着下巴，不当一回事地说。她的右边脸颊往上一勾，浮现出充满笑意的表情。久美子张嘴，想说些什么，不巧老师刚好走进教室。老师看来已经五十好几，环视教室一遍，清了清喉咙。<br>「坐下。」<br>宁静但充满气魄的声音，使得乱成一团的教室瞬间归于寂静。直到刚才还吵吵闹闹的学生，全都照着点名表分配的座位回到自己的位置。「哇！好可怕。」叶月小声地嘟哝。<br>「都已经是高中生了，还在教室里大声喧哗，实在不是什么值得赞许的事。高中不是义务教育，要有身为高中生的自觉。」<br>原本还带着热度的气氛，一下子冷却下来。老师愣住似地叹了一口气，瘦骨嶙峋的手拿起粉笔，在绿色的黑板上写下白色的文字。<br>「我是一年三班的级任老师松本美知惠，也教音乐，是管乐社的副顾问。」<br>管乐社。这个字眼让邻座的叶月立刻有了反应。<br>「别怪我没有事先告诉你们，我自认是学校最严格的老师，完全不打算纵容你们，请做好心理准备。」<br>美知惠丢下这句话，慢条斯理地拿出黑色的档案夹。<br>「首先确认各位的名字，叫到的人请大声地回答……麻井雄大。」<br>「有！」<br>「石川有纪。」<br>「有！」<br>国中的时候就算在点名的时候被叫到名字，大家也只是敷衍了事地举个手。可是一旦上了高中，似乎就得好好地回答。是人年纪越大，就会越顺从规定，还是因为这个老师很可怕呢？<br>「……黄前久美子。」<br>「……啊，有！」<br>久美子陷入沉思，差点错过自己的名字。她慌张的回答令教室里的气氛变得轻松了点。叶月似笑非笑地瞅着她。太丢脸了，久美子不由自主地低下头。<br>「……加藤叶月。」<br>「有！」<br>「川岛……绿辉（Ryokuki）？」<br>至此，美知惠的脸上第一次浮现出困惑的表情。头发膨松得有如猫毛的少女，提心吊胆地在点名停滞住的她面前举起手来。<br>「不、不好意思。是念作『萨菲尔』。虽然写成绿色的光辉，但是念成『萨菲尔』。」<br>萨菲尔？教室里开始窃窃私语。她似乎觉得自己的名字很丢脸，变得越来越畏缩，纤瘦的背影缩得小小的。<br>「抱歉，川岛萨菲尔同学。我不会再念错了。」<br>美知惠说道，随即开始点名下一个人。教室里的窃窃私语也随即恢复安静。尽管如此……她叫「萨菲尔」（Sapphire）吗？这可是只有美少女才能取的名字呢。久美子心里想着这件事，再次将视线投向正前方的少女，只可惜从后面看不到她的长相。<br>叶月有些讶异地喃咕：<br>「萨菲尔啊……好酷的名字噢。」<br>这个人的美感有些与众不同呢……久美子心想。<br>「今天就到这里为止，明天要实力测验，请各位多加努力。」<br>高中生活的第一天，就由级任老师的这句话画下了句点。怎么办？自从入学考结束后就再也没有念过书了！久美子忍不住叹息。<br>「久美子，你住哪边？一起回去吧。」<br>久美子才刚把教科书塞进书包里，早就准备好的叶月已经站在她面前。黑色皮制书包上挂着小号的钥匙圈。<br>「我住在平等院附近，方向一样吗？」<br>「一样。我搭京阪线，在黄檗站下车。」<br>「这样啊，那我们住得很近呢。」<br>久美子边回答边站起来。久美子的书包上没有任何装饰品。她不太喜欢那种杂乱的感觉。<br>「叶月，你国中是管乐社的吗？看你挂着小号的吊饰。」<br>久美子指着她的钥匙圈问道。叶月笑着摇头。<br>「不是。我是如假包换的网球少女。」<br>「你确实很有运动社团的气质呢。」<br>「因为我的皮肤很黑，才让你这么觉得吧。这是在练习的时候晒的，本来其实是很白的。」<br>叶月笑着卷起袖子来，古铜色的肌肤从某一节变得白晰。这大概就是所谓的制服晒痕吧。<br>「啊，可是上了高中以后，我打算加入管乐社，因为好像很好玩的样子。」<br>「是吗？我国中的时候就是管乐社。」<br>「真的吗？高中也要继续吗？」<br>还没决定喔……正当久美子想开口回答的时候，有人打断了她的话。<br>「不好意思，两位都打算加入管乐社吗？」<br>叶月和久美子不约而同地望向声音的来处，站在眼前的是刚才一头猫毛的少女。她的名字只要听过一次就绝对忘不了吧。川岛绿辉。拥有这个与众不同的名字的少女，五官长得十分柔和、精致。<br>「啊，萨菲尔！」<br>叶月没有恶意地喊出她的名字。一瞬间，少女的脸就像煮熟的章鱼一样，变得红通通的。<br>「那、那个，不好意思，可以请你们不要喊我的名字吗……」<br>「咦，为什么？」<br>「因为我讨厌自己的名字，太丢脸了。」<br>「萨菲尔不是很酷吗！我倒是很喜欢。」<br>「或许有人觉得很酷，但一般人都不会念，实在太丢脸了。」<br>绿辉说着，垂下眼帘。久美子在内心深处也同意她的想法。万一这是自己的名字，她肯定负担不起。<br>「所以，希望你们能叫我小绿就好。」<br>「小绿吗？没问题，我记住了！」<br>叶月用力点头，使劲地一掌拍在绿辉背上。这是她个人惯有的肢体接触吧，只见绿辉纤瘦的身体摇摇欲坠，差点跌倒。<br>「小绿是哪个国中毕业的？一起回家吧。」<br>「可以吗？」<br>绿辉小心翼翼地窥探着他们的脸色。久美子展颜一笑，用力地点头：「当然可以。」<br>走出校门，四周充满微凉的寒意，围绕校园种植的樱花树已经散落起花瓣，青绿嫩芽从细细的枝桠肆无忌惮地探出头来。路过的学生都对散落的樱花毫无兴趣，没半个人把目光停留在上头。大家穿着同样的制服，看在久美子眼中全都是同一张脸。<br>「小绿以前是圣女的学生，国小、国中都念私立学校。」<br>绿辉将书包挂在肩膀上，微微一笑。圣女中等学园。久美子下意识地对这个似曾相识的名字做出反应。<br>「圣女不是那所管乐超强的学校吗？」<br>久美子的反应令叶月露出惊讶的表情。<br>「真的吗？」<br>「真的是很厉害的学校喔，也是全国大赛的常胜军。」<br>「哇！那真的很厉害耶。」<br>这句话让绿辉有些害臊地搔搔头。蓬松柔软的头发在日光照射下，变成了咖啡色。<br>「不是小绿很厉害，是顾问很厉害。」<br>「演奏跟顾问有什么关系？大家看起来都随便吹啊。」<br>「才不是随便吹呢。就像运动社团强不强会受到教练的影响那样，只要有个优秀的教练，管乐社就会变强。」<br>「哦，这样啊。」<br>叶月对久美子的说明状甚佩服地点点头。鞋底踢到小石头，发出「叩」的一声。铺着柏油的路面平滑工整，连一根草都看不见。<br>「小绿负责哪种乐器？」<br>「小绿一直都是拉低音大提琴。」<br>「低音大提琴？那是什么？」<br>绿辉听到叶月的问题，闹起别扭似地鼓着脸。<br>「长得很像特大号的小提琴！非常帅气！」<br>「啊，这、这样啊。」<br>仿佛被绿辉的气魄压制住了，叶月点头如捣蒜。久美子在一旁看着他们你来我往的对话，口中念念有词：「低音大提琴啊……」绿辉的身高比久美子还要矮个十公分，顶多只有一百五十公分左右，实在无法想象她演奏高度将近两公尺的低音大提琴。<br>「久美子呢？」<br>「咦？」<br>「久美子负责什么乐器？你国中也参加过管乐社吧？」<br>在她陷入沉思的同时，绿辉曾几何时已经跑到她身边。窥伺着久美子表情的模样让人联想到小动物，可爱极了。<br>「我是上低音号。」<br>「哦！上低音号！」<br>「什么是UFO？」<br>注：上低音号的发音euphonium，听起来很像UFO。<br>绿辉的眼神因久美子的回答而熠熠生辉，叶月则露出不解的表情。看来她连上低音号是什么乐器都不知道。久美子已经对叶月这种反应习以为常了。<br>「不是UFO，是euphonium，是一种名为粗管上低音号的低音乐器喔……不过是非常没有知名度的乐器就是了。」<br>「嗯哼，我想玩比较称头的乐器呢。像是小号或萨克斯风。」<br>「会这样想也无可厚非啦，因为低音的乐器多半都很不起眼。就连小绿加入管乐社以前也想吹长笛呢！」<br>绿辉苦笑着说。这样说来，和低音大提琴比起来，长笛确实比较适合她。<br>「小绿高中也打算参加管乐社吗？」<br>「嗯，对呀。」<br>她的回答得理所当然，反而令久美子有些不知所措。叶月则兴匆匆地双眼发亮。<br>「这样啊！那么接下来又可以一起参加社团活动了。」<br>「问题是，这所学校的管乐社……该怎么说呢……」<br>绿辉似乎察觉到久美子含糊其词的言下之意，替她继续说下去：<br>「演奏得太烂了。」<br>「会吗？我听起来倒是挺好的。」<br>叶月依然在状况外。<br>高中管乐社的演奏水准正逐年提升，即使是相同的演奏，听在有演奏经验的久美子她们耳中与没有演奏经验的叶月耳中，感觉或许也不一样。<br>她的反应令绿辉莞尔一笑。<br>「那种水准的话，连能不能在京都府大赛拿下银奖都还很难说。别说关西大赛了，就算是无用金奖可能也拿不到。」<br>「无用金奖？什么意思？」<br>「可以去参加关西大赛的高中是从夺得金奖的学校里选出来的，只拿到金奖却不能参加接下来的比赛，就称为无用金奖。」<br>光是听到无用金奖这几个字，就足以让心情跌落谷底。为了扯开话题，久美子问绿辉：<br>「小绿以前是圣女的学生吧？能忍受那种水准的社团活动吗？」<br>「这个嘛……」眼前的少女伤脑筋地抓抓脸颊，陷入沉思地自言自语起来。<br>「反正小绿只要能玩乐器就好了，即使是那种水准也不在意喔，只要能玩得开心就好了。」<br>「这样啊……」<br>「久美子也要加入管乐社吗？」<br>「咦？」<br>久美子被这么理所当然似地一问，一下子答不上来。她还没决定要加入哪个社团，可是又不觉得有必要告诉她们。微妙的沉默顿时横亘在三个人之间，叶月或许是为了打破僵局，手臂搭在久美子的肩膀上。<br>「久美子也加入管乐社，好吗？」<br>叶月天真地问她。被她用那种表情一问，任何人都无法拒绝吧。久美子挤出不自在的笑容，半放弃地点头。<br>「嗯、嗯……是有加入的打算喔。」<br>仿佛很满意她的回答，绿辉嫣然一笑。<br>「太好了！小绿一直很担心能不能在社团里交到朋友……」<br>「三个人一起好好相处吧！」<br>叶月活力十足地宣布。看着她们相视而笑的模样，久美子认为自己的判断并没有错。有时候随波逐流也不是一件坏事。她心里这么盘算，但是一想起管乐社在开学典礼上的演奏，不免又悄悄地叹了一口气。<br>走出京阪宇治站，不远的地方有一座桥，那就是宇治桥。从桥上可以看到通往塔之岛的红色大桥，若是在清晨散步过去，还可以享受到不逊于观光景点的明媚风光。从那里过桥再往左转，便可通到平等院。久美子很喜欢这条两旁林立着历史悠久的茶坊及日式点心店的街道，光是烘焙茶的香气乘风飘来，就足以让久美子的心里万分满足。顺着石板路前进，会看见平等院的入口。要付入场费才能进去，所以看不到本殿。<br>「你也念北宇治啊。」<br>久美子原本心情愉悦地走在路上，突如其来的这句话伴随着冲击撞上她的背脊，仿佛被人背后推了一把。久美子勉为其难地撑住险些就要往前跌倒的姿势，立刻回头。<br>「你干么突然吓人！」<br>「哪有，我只是刚好看到你。」<br>久美子的青梅竹马冢本秀一以云淡风轻的表情回答。冢本秀一是个身高一百八十公分、高高瘦瘦的男生。他从国中就和久美子一起加入管乐社，而且不晓得是什么孽缘，居然三年都在同一个班级。还好高中的理科和文科采分班制，才没继续编在同一班。<br>「你可没说你要去北宇治。」<br>「那又怎样。」<br>「通常都会说吧？好不容易考上同一所高中。」<br>「哼……通常都会说吗？」<br>久美子意在言外地提起嘴角，然后直接转过身去。从平等院延伸出的网代木小路沿着宇治川铺建，只要顺着这条路，就能走到久美子住的地方。<br>「等一下啦。」<br>秀一有些慌张的样子，加快脚步，走在久美子身边。久美子和他住在同一栋公寓里。<br>「你在生什么气？」<br>「还敢问我生什么气？你是认真的吗？」<br>久美子看也不看秀一一眼，直接反问他。秀一大惑不解地抱着胳膊，念念有词。<br>「我是真的不知道嘛！」<br>「是噢，这样啊。再见。」<br>久美子迈步就要走，秀一连忙抓住她的手臂。<br>「等等、等等、等等！不要当我不存在嘛。」<br>「在这么说以前，请先为过去的事道歉。」<br>「哇！现在是怎样，这种疏远的态度！」<br>「我并没有要跟你疏远又客套的意思。」<br>「少骗人了。」<br>秀一呆愣地叹气。穿着黑色立领制服的他比国中的时候更高大了。明明以前比久美子还要矮小，如今必须仰着头才能看到他的脸，令她怒火中烧，忍不住用力地一拳捶在他背上。「好痛！」秀一装模作样地呻吟。<br>「你国三的时候对我说过吧？『丑八怪！不要跟我说话。』这种话！」<br>「那、那个是……那个是那个啦。」<br>久美子的控诉令秀一明显地慌张起来，大概是想起自己说过的话吧。<br>「什么？」久美子又往他的背上捶了一拳，「那个是哪个？」<br>「那个就是你突然当着其他男生的面，问我今天要不要去你家吃饭。那个，正值青春期的我为了掩饰害羞……」<br>「这是什么烂借口。和我吃饭被别人知道会造成你的困扰吗？」<br>「不是，当然不会造成我的困扰……只是有点不好意思。」<br>「噢是这样的吗我知道了我不会再害你不好意思所以也请你不要再靠近我。」<br>「犯不着这样连口气都不喘地说完吧！搞什么嘛，都已经一年了，你也该原谅我了吧。我妈也很难过喔，说久美子最近都不来我们家了。」<br>「如果你肯向我道歉的话，我可以考虑一下。」<br>「好啦，道歉就道歉嘛。抱歉、抱歉。」<br>「哇！超令人火大的。」<br>久美子完全不掩饰自己的怒气，眉间打了个死结。秀一双手合十，重复说着抱歉、抱歉。一个大男人鞠躬哈腰、不断道歉的样子实在太滑稽了，所以久美子也不再跟他计较地叹了一口气。<br>「算了，有够麻烦的。」<br>「喔！你愿意原谅我了吗？」<br>「我又没说不原谅你。」<br>「啊，这样啊。不好意思。」<br>久美子瞥了沾沾自喜的秀一一眼，从鼻子里冷哼了一声。将装有教科书的书包换成左肩背，放慢原本急急忙忙的脚步，稍微缩了一下肩膀。<br>「……你高中打算参加什么社团？」久美子问道。<br>或许是改变话题令秀一放下心中大石，只见他的表情明显地舒缓下来。他脚上那双品味奇差的球鞋大概是伯母买给他的吧，如今正踢着石板路，发出清脆的声响。<br>「关于这点，我还在伤脑筋。」<br>「反正还是管乐社吧？」<br>「什么还是，别这么说嘛！话说回来，你又打算参加什么社团？」<br>「我？我嘛……大概也是管乐社吧。」<br>「又是管乐社啊，你也没资格说别人嘛。」<br>「我本来其实不打算参加的。」<br>久美子嘟着嘴说。<br>「那为什么又要参加了？」<br>秀一观察她的反应。久美子下意识地避开他的视线，模棱两可地用笑容代替回答。然而光是这样，青梅竹马就足以看穿一切了。<br>「难不成又是那个？让周围的人帮你做决定吗？」<br>「……嗯，就是这么回事。」<br>「你那种性格也差不多该改一改了吧？不敢说出自己的想法，到头来伤脑筋的是你自己。」<br>「我知道啦。」<br>感觉像是被秀一说教了，久美子嘴唇抿成一条线，总觉得不太痛快。<br>「啊，不过，如果你要加入管乐社的话，我也要加入。你打算选什么乐器？」<br>秀一直截了当地说，伸了个懒腰。从袖口隐约可以看到他白晰的手背。好像猫一样，久美子忍不住这样想。<br>「社团活动这么随便决定好吗？」<br>「有什么关系。我又没有运动细胞，几乎没什么选择。」<br>「……说的也是。」<br>久美子尽可能装成若无其事地喃喃自语。刚买的深棕色懒人鞋沐浴在夕阳下，微微反光。眼前的少年有些害臊地笑了，然后硬生生地转移话题。「对了，我们班上有个超漂亮的女生……」这句话让久美子毫不留情地踹了他一脚。<br>社团活动是在开学典礼后大约两周、接近四月尾声时才正式开始。希望加入管乐社的学生聚集在音乐教室里，大家都露出不安的表情，端坐在位子上。看似学长姐的社员则是在四周围成一圈。开学典礼上负责指挥、看起来很可怕的女学生也混在人群之中。<br>「社长，大概不会再有人来了。」<br>抱着单簧管的学生附在社长耳边说道。久美子转头环顾四周。就座的学生还不到三十人，其中穿插着几张久美子也认识的熟面孔。<br>「这样啊，也差不多就是这样吧！」<br>被称为社长的少女摩挲着下巴，似乎在想些什么。她的脖子上挂着一把很大的萨克斯风，是上低音萨克斯风。只见她走向教室前方，深深地吸了一口气。<br>「呃……大家好，我叫小笠原晴香，是管乐社的社长。负责的乐器是上低音萨克斯风，未来跟希望加入萨克斯风组的人会有很多接触的机会。」<br>小笠原说完，微微一笑。她的嗓音清澈透亮，很有社长的风范。<br>「本校的管乐社是个历史悠久的社团，一直到大概十年前都还是非常有名的强校，也参加过全国比赛……虽然现在已经连影子都看不到了。」<br>音乐教室的墙壁上挂满了管乐社光荣的过去：连续参加关西大赛、全国大赛的金牌……裱框的照片全都泛黄褪色，布满尘埃的过去令人看了为之鼻酸。<br>「呃，其实从今年起，顾问也换人了。去年的顾问是梨香子老师，今年因为她要休产假，会由一位新老师来当顾问，我对新老师也还一无所知。就是在开学典礼那天向大家打过招呼的泷老师，听说他今天晚一点也会过来。还有，副顾问美知惠老师因为要参加家长说明会，今天不会来了。先警告一年级的新生，美知惠老师非常恐怖，请千万不要惹她生气。」<br>她口中的美知惠老师就是久美子的级任导师，看样子果然是个可怕的人。<br>「今天要做的事是分配乐器。从刚才就站在这间教室里的学长姐，便是各种乐器的代表。现在就请他们为大家介绍乐器，从高中才开始接触管乐的同学请参考他们的介绍，决定自己要吹奏的乐器。还有，有经验的人要先说。乐器有各自的属性，我们也会考虑各位的个性来分配乐器，所以就算不是分到自己期待的乐器，也请不要抱怨。」<br>小笠原才刚说完，就将站在周围的学生叫过去。最先站在众人面前的，是拿着小号的美少女。轻柔飘逸的黑发与丽奈无异，但是五官给人的印象则迥然不同。她的模样极为梦幻，很容易引起男生的保护欲。只见她端正地鞠了个躬，迅速地瞥往小笠原的方向，又瞬间转回视线。大概是紧张的缘故吧，她的双颊染着淡淡的红晕。<br>「我是小号组的组长中世古香织。小号在铜管乐器中也算是代表性的乐器，所以我想不用多说明，各位也都知道了。小号组现在有六个人，大家的感情都很好，也有很多独秀或主旋律的部分，我想一定会很开心的。有经验或没经验的同学都欢迎，请大家务必过来小号这边。」<br>她的话引起一阵掌声。接在香织之后，乐器的介绍一路顺畅地持续进行着。长号、法国号、长笛、萨克斯风、单簧管、双簧管、打击乐器……长笛或萨克斯风这种主流的乐器不管由谁来如何说明，都很受欢迎，而越是非主流的乐器，竞争率越低。国中的时候虽然是吹粗管上低音号，但是上了高中以后，挑战看看别的乐器或许也不错。久美子想着这件事，视线飘向窗外。从位在北校舍三楼最边间音乐教室，可以清楚地看见操场上的样子。棒球社及足球社正发出意味不明的吆喝声，绕着操场奔跑。久美子很不擅长应付体育社团的人，因为不晓得他们在想些什么。<br>「那么，接下来是上低音号的介绍。」<br>小笠原的声音让久美子猛然回过神。抱着银色上低音号上台的是身材颀长的美女，脸上的红框眼镜令人印象深刻。她就是在开学典礼演奏上负责指挥的女学生。或许是因为细长的丹凤眼，她予人一种知性的感觉。她用食指推了推眼镜，微微地扬起嘴角说：<br>「我是低音组的组长田中明日香。负责的乐器就如各位所看到的，是粗管上低音号。」<br>上低音号？没有演奏经验的学生都满头问号。明日香大概早就料到会有这种反应，她用力地点头。<br>「没错！所谓粗管上低音号，指的是装上活塞阀的降B大调低音号。这种乐器的历史至今还众说纷纭，没有定案。有一说是针对由曾为韦玛乐团首席的费迪南·梭莫发明的上低音号（Sommerophone）加以改良，成为一般人使用的粗管上低音号；另一种说法是由比利时人阿道夫·萨克斯制作的萨氏号中的活塞式低音号发展而来，在英国继续开发，最后变成现在的粗管上低音号。粗管上低音号原本称为Euphonion，名称源自于希腊文的『euphonos』，意思是指『悦耳的声音』。声如其名，粗管上低音号可以让低音组发出悠扬又柔和的声音，是非常优秀的乐器！粗管上低音号在日本的历史虽然尚无定论，但是明治三年从英国传进来的。军乐队的实习生当初受英国教育，而在明治三年陆海军分离以后，海军军乐队先是接受英国教育，后来导入德国教育，陆军军乐队则是导入法国教育。因此，对于负责粗管上低音号的声部，海军称为euphonium、baritone，陆军则称为petit bass或小低音号等各式各样的名称。根据许多流传至今的画像，可以得知主要都是使用法式乐器的低音萨氏号，但是在某个时期的海军、音乐学校、各种乐队和学校教育体系的管乐社里，也会依照指导方针采用德国式上低音号。第二次世界大战战败后，随着引进自美国的校园乐团普及，将其目前在日本的名称正式定名为粗管上低音号，乐器也以在英国发扬光大的活塞式粗管上低音号最为常见。再加上……」<br>「够了够了，到此为止！明日香，你要在这里发表从维基百科搜集到的知识也不是不行，至少要整理得简洁一点嘛。」<br>社长只用一句话就打断了田中明日香仿佛要讲到地老天荒的长篇大论。从学长姐没什么太大反应的表情来看，似乎已经习惯她这个样子了。唯有话被打断的明日香不满地气鼓了脸。<br>「咦……根本都还没有说到上低音号的魅力！」<br>「不，你已经表达得很清楚了。好，下一个，麻烦低音号的人上台。」<br>「人家的话还没说完……」<br>明日香不满归不满，但还是不甘愿地退到一边。这个人怎么会成为组长呢？久美子心中浮现出这个再自然不过的疑问。<br>「……我是负责低音号的后藤卓也。」<br>紧接在明日香之后上台的，是个无论身高体重都相当巨大的男生。与口若悬河的明日香比起来，只能说他是个阴沉的人。他戴着黑框眼镜，抱着比刚才的粗管上低音号还要大上好几倍的乐器。那是铜管乐器里体积最庞大的低音号。<br>「低音号主要负责低音，没什么旋律可言……很不起眼，而且很重，大概有十公斤……管长将近六公尺。队伍行进的时候会用到白色的苏沙号……那东西也很重……」<br>「……」<br>「……」<br>「咦，说完了？」<br>小笠原目瞪口呆地睁大双眼。卓也一脸为难地搔头。<br>「嗯，讲完了……」<br>「后藤！你完全没有表达出低音号的魅力嘛！不如由我田中明日香来为大家介绍低音号……」<br>「停，你给我闭嘴。」<br>小笠原不假思索地驳回明日香精神抖擞的毛遂自荐。<br>「其实低音组还有一样叫做低音大提琴的乐器，但是自从去年的三年级毕业以后就没有人负责了。如果有人拉过低音大提琴，请务必挺身而出，否则再这样下去真的不太妙。」<br>「顺带一提，这就是低音大提琴！」明日香搬来乐器。没有经验的新生看到比她身体还要高大的弦乐器，发出「哇！」的感叹声。<br>「都没有人拉过低音大提琴吗？」<br>小笠原看了一遍教室里的人。一只手戒慎恐惧地从教室的正中央举起来，回答社长的问题。是绿辉。<br>「那、那个，我念国中的时候拉过低音大提琴。」<br>看见绿辉举手的瞬间，明日香的双眼闪闪发光，将乐器塞给社长，大步地走向绿辉。或许是被她的气势震慑住，绿辉瞪大着眼愣在原地。只见明日香粗鲁地拉起绿辉的手，再用力握紧，秀丽的侧脸挨近绿辉。披散在肩膀上的黑发遮住了明日香的表情。<br>「你愿意拉低音大提琴吗？」<br>明日香刻意压低的声线带着一丝妩媚，就连久美子也觉得心头一震。绿辉目瞪口呆地凝视着眼前的学姐，过了好一会儿才终于回过神来的样子，脸颊也染上了枫叶的朱红色。<br>「好、好的。那个，如果不嫌弃的话，小绿愿意尽力而为。」<br>「真的吗？太好了！真是得救了。」<br>刚才那副认真的表情消失到哪里去了？明日香露出纯真的笑容。原来如此，这就是她掌握人心的方法啊！久美子偷偷地在心里分析。<br>「就是这样，晴香，这孩子归我了！」<br>「啊，好好好，我了解、我了解。」<br>社长将乐器放在地板上，挥挥手，拿起放在钢琴上的笔记本。写着社员名单的单薄小册子看样子已经用了很久，破破烂烂的。<br>「那来决定其他的声部吧！要一一问每个人想吹什么乐器太麻烦了，请各自去找自己想演奏乐器的代表。落选的再去第二志愿那边排队。就这么决定，麻烦各位了。」<br>一年级生在小笠原相当随便的指示下开始移动。<br>「久美子，你要选什么乐器？」<br>坐在后面的叶月凑上脸来问道。<br>「嗯……要选什么呢？」<br>久美子含糊其词地回答，望着明日香的方向。决定要拉低音大提琴的绿辉俨然已经变成明日香的玩具，被她捏着脸颊。站在一旁的卓也惊愕地阻止明日香。<br>「那个学姐好有趣喔。」<br>叶月兴灾乐祸地喃喃自语。<br>「低音组感觉很有个性呢。」<br>「是吗？或许性格会表现在对乐器的喜好上吧。」<br>「有这回事吗？」<br>「比起默默地支持别人，我比较想自己出锋头。所以我会选小号那种很酷的乐器。」<br>叶月说完，指着香织的方向。聚集在小号组的女生们好像多半都是光鲜亮丽的女生。<br>「那我去排队啦。」<br>只见她露出讨人喜欢的笑容，走进希望演奏小号的队伍里。几乎所有人都已经走向自己想参加的声部，还在教室中央举棋不定地大概只剩下久美子。怎么办？久美子轻轻地吐出一口气。她并没有想吹奏这种乐器、那个乐器比较好这种强烈的欲求。明明只要随便分配一下还剩什么乐器就好了，不是吗？这么一来，她就不用这么烦恼了。久美子像是为了找出目的地，视线落在自己的掌心。细细的掌纹，有如无名小镇的地图。<br>「你在烦恼要选什么乐器吗？」<br>突然有人问她，猛然抬起头来，这才发现明日香的脸近在眼前，久美子吓得差点跳起来。<br>明日香用手指推了推眼镜，不客气地直盯着她看。怎、怎么了？久美子不由自主地后退一步。<br>「我们低音组，除了刚才的女生以外，还没有半个人要选。」<br>「啊，这样啊。」<br>久美子老实地附和，不知何故却让明日香在眉头挤出皱纹。只见眼前的学姐抱着自己的胳膊，「呼……」装模作样地叹了一口气。<br>「我们低音组，除了刚才的女生以外，还没有半个人要选。」<br>「啊，我知道。你刚才已经说过了。」<br>「我们低音组，除了刚才的女生以外，还没有……」<br>「那个，请问你同一件事为什么要重复说三遍？」<br>久美子忍无可忍，终于打断她的话。明日香眯着眼睛，撩起自己的头发。<br>「你真是迟钝！我是在邀请你耶！」<br>「这、这是在邀请我吗？」<br>「是的，是在邀请你。」<br>「你对粗管上低音号有没有兴趣？」她的唇瓣勾勒出平滑的曲线。<br>「我们低音组目前只剩下上低音号和低音号。每年都很不受欢迎，真是伤脑筋……如何？如果你没有特别想演奏的乐器，要不要试试看？」<br>「上低音号吗？」<br>「没错，上低音号。」<br>久美子迟迟未能给出答案，这时绿辉蹦蹦跳跳地走过来，胸前的白色蝴蝶结跟着轻轻摇晃。<br>「久美子也要来低音组吗？」<br>「咦？」<br>「小绿好高兴！都没有认识的人，小绿会很孤单的。」<br>对吧？绿辉微侧着头。看样子在她心里，久美子已经确定要加入低音组了。<br>「……好吧，那我就选上低音号吧。」<br>「太好了！找到社员了！」<br>明日香用手指敲响了脸颊。<br>「久美子，我们都在低音组了呢，请多多指教！」<br>绿辉露出天真无邪的表情微笑着说。明日香在她背后小小声地喃喃自语。<br>「……这孩子，挺好用的呢。」<br>「学姐，你有什么企图？」<br>久美子忍不住问她。明日香回过头来，堆着满脸的笑容回答：「嗯？什么也没有喔！」<br>「……是吗。」<br>看样子，这位学姐似乎不是个简单的人物。<br>「我瞧瞧，其他的新生都去各自想演奏的乐器那里排队，我们只能等待备选了。」<br>「要让第一志愿落选的人来吹低音号吗？」<br>「有什么办法，因为没有人要主动加入嘛。低音号和上低音号每年都会变成这样……到底是为什么呢？明明是这么帅气的乐器。」<br>国中时，低音乐器也同样乏人问津。想加入管乐社的人果然还是比较喜欢帅气又引人注目的乐器。这么说来，久美子小学决定加入铜管乐队时，也是因为想吹长号的缘故。她对于滑管会随着爵士音乐伸缩的模样很着迷。但不知为何，最后被分配到负责演奏粗管上低音号就是了。<br>久美子望着叶月的方向，她正在接受测验。铜管乐器有一种零件称作吹嘴，让空气得以进入乐器。小型乐器的吹嘴体积较小，越大型的乐器，吹嘴就越大。要是拿低音号和小号的吹嘴来比较，差别就像大人与小孩一样。不同于木管乐器，铜管乐器是在接触吹嘴的状态下振动嘴唇，借由演奏者嘴唇的振动来发出声音。<br>然而，吹的动作可以说是铜管乐器初学者的第一道难关。要吹出声音是需要技巧的，但是习惯以后就很简单了。这不像直笛，光吹气就能发出声音。吹奏乐器却发不出声音会带给吹奏者不小的压力，由于怀疑自己能否真的吹出声音来，因此半途而废的人也不少。<br>「啊！吹不出声音来！」<br>拿着乐器的叶月不服气地鼓起脸颊。小号组的组长香织正站在她旁边，拼命地鼓励她再多加把劲。但是从号口只能听见「呼！」或「嘶！」等叶月吹气的声音。看样子得花上一整天才能练到发出声音的程度。<br>「香织学姐好温柔啊！」<br>绿辉似乎很佩服地猛点头。<br>「这还用说吗。」明日香引以为傲地说：「她可是我们管乐社的万人迷呢！超受欢迎的。」<br>「超受欢迎……不好意思请问一下，是受谁欢迎？」<br>不用问也大致想象得到，但久美子还是战战兢兢地问了。<br>「你这是什么笨问题，当然是受女生欢迎啊。」<br>明日香哈哈大笑着回答。这样啊……久美子不置可否地微笑点头。<br>管乐社是一种特殊的空间。基本上，男女比例是一比九，严格来说，女生的比例通常还会更高一点。将同性视为偶像，在这样的空间里是很容易发生的事。像这种时候，会受到名为崇拜、实为令人如坐针毡的视线攻击的，多半是集女人味于一身，看起来很可爱的女生，再不然就是充满男子气概的帅气女生。管乐社的男生很少会被当成男生看待，很遗憾地无法成为众人崇拜的对象。明明身边有很多女生，但管乐社的男生通常都交不到女朋友就是这个原因……这是久美子个人的见解。<br>「……田中学姐也很受欢迎喔。」<br>冷不防从背后响起声音，害久美子不禁「哇！」地整个人往后仰。回头一看，卓也正面无表情地站在她旁边。<br>「田中学姐……这位同学确定加入低音部了吗？」卓也无视久美子的反应，向明日香问道。<br>「没错！」明日香点头回答。<br>「田中学姐……这么说来，后藤学长是田中学姐的学弟喽？」<br>绿辉转头问他。<br>「没错，这家伙才二年级，你们要好好相处喔。」<br>这句话让久美子赶紧低下头去。<br>「啊，我是黄前久美子。请多多指教。」<br>「……我是后藤。」<br>他只说了这句话，随即又陷入沉默。明日香笑得相当开怀。<br>「后藤很怕生，所以不太爱说话。请你们不要放在心上。」<br>「啊，好的。」<br>就在久美子如此回应的瞬间，教室里响起了小号的声音。优美嘹亮的高音，结束后仍在心里留下柔和余韵。与其他的声音明显不同，具有压倒性的张力。教室里的视线一齐望向声音的来处。<br>受到注视的人物依旧保持着同样表情，以行云流水的动作将小号移开唇畔。<br>「……这样可以吗？」<br>高坂丽奈说道，看样子她也参与了吹出声音的测验。「啊，嗯。」香织有些被她压制住地点头。<br>「高坂同学，你吹得这么好，来我们学校几乎是大材小用了。你是哪个国中毕业的？」<br>小笠原感动万分地问她。<br>「北中。」丽奈面无表情地回答：「除了社团活动，我也会去音乐教室上课。」<br>「哦，难怪吹得这么好，我都有点吓到了。」<br>「谢谢你的赞美，我很高兴。」<br>丽奈微微地点头道谢，虽然表情看起来一点都不高兴的样子。她的礼数总是这么周到，都是表情害了她。<br>「总之大家都吹过一遍了，现在来决定小号组的成员吧！呃，因为只有三个名额……就决定是高坂、吉泽、糸田这三个人。落选的人请去第二志愿的声部。好了，赶快移动。」<br>组长的话让没有被选中的人茫然失措地在教室里走来走去。叶月的身影当然也在里头。绿辉心不在焉地看着她的模样，嘀咕着说：<br>「叶月没被小号组选上呢！」<br>「真可惜啊。」<br>「怎么？小绿，那女生是你的朋友吗？」<br>明日香听见两人的对话，蹑手蹑脚地靠过来。她那仿佛贴在脸上的笑容，让久美子有股不祥的预感。然而绿辉并未察觉到有什么不妥，老实地点头：「对呀！」<br>「原来如此，原来如此……」<br>明日香摩挲着下巴，朝久美子投以意味深长的一瞥。<br>「她国中不是管乐社的吧？刚才完全吹不出声音来。」<br>「她说她是网球社的。」<br>「是吗？那肺活量就没有问题了。」<br>语声未落，明日香的手已经搭在绿辉肩膀上了。光是这样的行为就足以让绿辉的脸颊染上淡淡红晕。<br>「我说小绿，如果能和她在同一个声部里，你是不是会觉得很开心？」<br>「那当然！」<br>「还没有人报名低音号，如果都没有人来会很伤脑筋的……你不觉得她很适合吹低音号吗？看起来也很有体力。」<br>「叶月的确很适合低音号也说不定呢。」<br>「那你能去邀请她吗？如果由我这个学姐问她，感觉好像是在强迫她加入，如果是身为朋友的小绿出马，对方也比较容易答应吧。」<br>「好的！小绿这就去拜托叶月加入！」<br>绿辉活力十足地回答，头也不回地冲向叶月身边，一把抱住垂头丧气的叶月。不难看出叶月对小号还没死心，但是要不了几分钟，她大概就会投降吧。<br>「……学姐，你完全把小绿玩弄于股掌之间呢。」<br>久美子的话让明日香发出「呵呵呵」的笑声。<br>「今年有这么多老实又可爱的学妹入社，真是太令人欣慰了。」<br>「这么多……你该不会把我也算进去了吧？」<br>「当然。」<br>明日香用指尖推着眼镜说道。看不出情绪的黑眼珠隔着薄薄的镜片，眨也不眨地直盯着自己瞧。<br>「久美子，我很期待你的表现喔。」<br>又过了一小时左右，所有人的乐器终于都决定好。低音组由久美子、叶月、绿辉组成一年三班的三重奏。丽奈属于小号组，秀一则去了长号组，明明他国中演奏的是法国号。<br>「乐器也顺利决定好了，接下来，我想决定今后社团活动的方针。」<br>小笠原的视线在音乐教室里转了一圈。今天好像是所有人到齐的的一场集会，教室里早已人满为患。二年级和三年级的学生正一脸提不起劲地聊天。交头接耳的八卦话题在大概挤进了八十个人的空间里形成具有实体的噪音，挑动了原本寂静的空气。<br>「安静一下，现在还在开会喔！」<br>门推开的声响打断了小笠原说的话。<br>「哎呀，大家都到齐啦。」<br>「泷老师！」<br>社长发出惊喜的叫声。<br>修长身形、隔着衬衫也能看得出他匀称的身材，孩子气的长相给人柔和的印象，瞬间就牢牢抓住女学生的心。剪得很整齐的短发，在灯光的反射下灿亮生辉。从唇缝间隐约可见雪白的牙齿，更让他多了几分清爽的感觉。泷升，年龄为三十四岁，是二年五班的班导师，教的是音乐。<br>「哦，今年有好多新生加入呢，大概有三十个人吧？」<br>「是二十八个人。」<br>「以前没有人演奏的乐器也可以凑齐，真是太好了。」<br>泷眯着眼睛说。<br>「我先自我介绍一下。我在开学典礼也向大家打过招呼，所以应该已经有很多人认识我了。我是泷升，是今年才来学校任教的音乐老师。本来应该由已经在管乐社长年担任副顾问的松本老师来当顾问，但她本人却希望由我接下顾问。今后请多指教。」<br>泷说到这里，以真挚的态度鞠了个躬。久美子还没见过会向学生行这种大礼的成人。来自学生们的掌声在音乐教室里回荡。泷抬起头来，微微地放松了嘴角。<br>「每年的这个时期，都有一件事要拜托各位同学。」<br>他边说边在黑板上写字。白色文字浮现在深绿色的空间里，仿佛是用电脑打出来、字体工整得不自然。<br>「尊重学生的自主性是我的教学方针。既然今年一整年要由我负责指导大家，我想请大家先决定今年的目标。」<br>泷用食指指着写在黑板上的文字：参加全国大赛。<br>「这是各位去年的目标对吧？」<br>「……呃，那个，老师，」<br>泷的问话让小笠原羞赧地猛搔头。<br>「该说是目标还是什么呢？比较像是单纯的口号……因为大家都不是真的以为自己能打进全国大赛……」<br>「哦，原来如此。那就当我没说过。」<br>泷轻描淡写地说道，在黑板上打了一个大大的叉。不偏不倚的直线，仿佛要将文字就此抹去。看着那个大叉，不晓得为什么，竟让人感觉喘不过气来。久美子悄悄地呼出一口气。太不甘心了。感觉就像自己的梦想遭到否定。冷不防，久美子的脑海浮现出国中时代的自己。真像个傻瓜。根本不是真心想进全国大赛。久美子在内心里自嘲。<br>「可是啊，这样也很伤脑筋。再也没有比无心达成的目标更浪费生命的了。」<br>泷有些头疼似地抱着胳膊。<br>「一旦决定好目标，我就会朝目标采取行动。要是各位真的想进军全国，练习当然也会变得比较严格，相反地，如果觉得只要能出场比赛、留下快乐回忆就好的话，就不需要辛苦练习。我本身是两者都可以，请各位以自己的意愿决定。」<br>「由我们决定吗？」<br>社长似乎有些困惑。泷微笑颔首。这个大人很清楚「由自己决定」这种好听的话，其实多么棘手吧。久美子又吐出一口气，为了不暴露出自己的想法，悄悄观察周围的样子。<br>小笠原的视线游移不定，接着才注意到某个人的存在似地，凝视着明日香的方向。只见低音组的组长一副胸有成竹的模样，露出令人头皮发麻的笑容。<br>「真拿你没办法，我来记录吧。」<br>她如此说道，站了起来。「真不愧是副社长。」教室后方传来看好戏的叫声。<br>「明日香学姐是副社长吗？」坐在旁边的叶月附在久美子耳边说。<br>「好像是。」久美子应声，看了明日香一眼。<br>「可是要怎么决定目标呢？」<br>「采表决不就好了吗？」<br>「表决……吗？」<br>明日香的建议让小笠原微微倾斜脖子。看在久美子眼中，她似乎在担心什么。<br>表决是民主社会的构成原理，也是集团中决定事情时最常见的方法。久美子非常讨厌表决。从呱呱坠地的那一刻开始，她就被这个表决推着走。多数派比较强，少数派比较弱。当数量变成力量，久美子微弱的声音转眼间就遭吞没了。久美子怕被排挤，不敢对别人说出讨厌这两个字。只好让自己的脑袋一片空白，佯装成多数派。久美子最讨厌这么狡猾的自己了。<br>「可是也只有这样才能决定吧。」明日香说道。<br>「这倒是。」小笠原回答。<br>「那就这么办。赶快『啪啪！』地决定吧。」<br>绿辉在久美子背后，她似乎很喜欢「啪啪！」这个词似地小声复述着。<br>小笠原默不作声地沉吟半晌，过了好一会儿才喃喃低语：「这也没办法。」环顾教室了一遍。<br>「那么，现在开始表决。」<br>「计票就交给我吧！」<br>明日香抬头挺胸地说。<br>「是要参加全国大赛，还是只要能快快乐乐地出赛就满足了，要以哪个做为今年的目标，请依照自己的希望举手。」<br>久美子撑着下巴听小笠原说话。像这种时候，应该要选哪个，其实早就已经注定好了。在大人在场的情况下提出的选项，小孩只能从中选出最正确的，世人眼中正确的，社会来看正确的，然后经过自然的淘汰，各自心里就会只剩下应该选择的正确答案。<br>「那么，首先是希望以全国大赛为目标的人，请举手。」<br>这句话让学生们一同举起手来。涂着指甲油的指尖，在日光灯的反射下闪闪发光。指甲留得那么长，很不容易吹奏乐器吧。久美子在心里这样想，也举起手来。看到几乎所有人都举手，明日香也懒得计算人数写在黑板上，因为结果已经很明显了。<br>「那么，接下来是只要能参加京都大赛就满足的人。」<br>有只手在教室正中央孤零零地举起来。白晰的手从藏青色的袖口直笔地伸向天花板。小笠原看向举手的人，倒抽了口气。<br>「葵……」<br>她似乎很惊讶，双眼瞪得有如牛铃大。在她对面的久美子也倒抽了一口凉气。<br>斋藤葵。<br>映入眼帘的人物，是久美子再熟悉不过的人。<br>「呃，选后者的只有葵吗？」<br>明日香说道，在黑板上拉出一条无法构成正字、歪歪斜斜的线。小笠原苦闷地皱起了眉头，但只有一瞬间。只见她撩起刘海，以与平常无异的表情瞥了黑板一眼。明日香似乎也明白了什么，微微地眯起眼睛。<br>「表决的结果是要以全国大赛为目标，努力练习。」<br>社长的这句话引来学生稀稀落落的掌声。或许是对结果感到满意，泷也以平静的表情鼓掌。他默默地站了起来，用手势制止正要开口的明日香，轮番看了教室里的人。<br>「现在决定的目标，是各位自己举手表决的。有人反对，或许也有人是在内心反对。不过，这是大家决定的事。我会尽全力让各位达成这个目标，但我能做的也只有指导你们。请别忘了这一点。各位如果自己不努力，梦想是绝对无法实现的。」<br>明白了吗？<br>这句话让教室陷入了沉默。为什么都没有人要说点什么呢？久美子坐立难安地动来动去，于是泷拍了一下手说：<br>「你们在发什么呆？回答呢？」<br>隔了一拍后，顾问尖锐的质问才换来起此彼落、稀稀落落的回答。难不成……久美子皱眉。<br>难不成，这个社团就连应声的习惯都没有吗？<br>「回答得太慢了，我再问一次……各位，明白了吗？」<br>这次终于换来整齐的回答。<br>「今天到这里结束。辛苦各位了。」<br>在社长的一声令下，这天的社团活动告一段落。「辛苦了！」「辛苦了！」耳边传来此起彼落的招呼声，久美子连忙搜寻那人的背影。焦躁支配了肺部，就连喉咙都疼痛欲裂。当久美子发现熟悉的背影时，她忍不住伸出手。<br>「等一下！小……斋藤学姐。」<br>她的呼唤让葵慢慢地转过身来。披在肩膀上的黑发勾勒出一道平滑的弧线。葵看了久美子一眼，有些失措地瞪大双眼。<br>「……久美子？」<br>「好久不见……」<br>三年级生对讲着蹩脚敬语的一年级生噗哧一笑，轻轻地将久美子的手从自己肩膀上移开，望向窗外。<br>「……要一起回家吗？」<br>久美子对这个提议猛点头。<br>「小葵原来在北宇治念书啊。」<br>久美子这句话令葵微微一笑。她就住在久美子家附近，是比久美子大两岁的邻居姐姐。小学的时候因为家住得近，经常一起玩，但是自从葵上国中以后就不怎么来往了。以前久美子都要抬头看她，如今她们的身高也差不了多少。不，说不定反而是久美子比较高。葵用指尖拨了拨从小就引以为傲的乌亮长发，以非常成熟的角度侧着头说：<br>「我其实想念堀山高中，但没考上。」<br>「啊，原来是这样。」<br>堀山高中是京都府数一数二的升学名校。葵从小就是个优秀的孩子，现在也好像还是老样子。<br>「对了，我对学姐说话可以不用说敬语吗？」<br>久美子的问题令葵不以为意地摇摇手。<br>「可以、可以。要是你用敬语的话，我反而会觉得浑身不对劲。啊，不过大家都在的时候还是用敬语比较好。」<br>「嗯，我明白了。」<br>久美子乖巧地听从学姐的指示。葵用手遮住嘴巴，发出「呵呵」的优雅笑声。挂在她肩膀上的书包看起来仿佛有千金重。<br>「小葵，你刚才为什么要举手？」<br>「刚才？」<br>「问到要不要参加全国大赛的时候。」<br>反正也没有人会认真回答，又何必特地举手？<br>久美子的问题令葵安静地垂下眼帘。两人份的影子落在黝黑的柏油路上。带着些许寒意的春风吹过两人之间。久美子下意识地用手指轻抚着裙摆，才刚买回来的制服上还没有一丝绉褶。<br>「大概是为了制造不在场证明吧。」葵说道。<br>「不在场证明？」久美子反问。<br>于是葵眉开眼笑地点了点头，重复着同一句话。<br>「没错，不在场证明。」<br>葵的书包吊着不知道该说是可爱还是不可爱的钥匙圈。长歪了的兔子脸上，看起来相当廉价的双眸正直勾勾地盯着久美子。<br>「这样子以后要辞掉社团活动的时候，就可以推说以前已经表达过意见了。」<br>「小葵，你打算辞掉社团活动吗？」<br>久美子的声音不由得有些颤抖。葵对瞠目结舌的久美子报以苦笑。<br>「天晓得呢。现在还不确定。」<br>「为什么？好不容易持续到现在。」<br>「因为啊……」葵停顿了半晌，「光靠社团活动是考不上大学的。」<br>从她用若无其事的态度层层包裹的语气里，隐约可以听出些许的焦躁与自嘲。喀啦喀啦喀啦。全新的参考书在书包里撞击作响。<br>「小葵打算念哪所大学？」<br>「天晓得呢。还没决定。」<br>久美子直觉地认为小葵说谎。「考试准备了吗？」「完全没读书喔！」就像这种肤浅的对话一样，她的话毫无可信度。那是学生所特有用来保护自尊心的脆弱防线。久美子假装没察觉到这件事，露出模棱两可的笑容。<br>「这样啊。」<br>「久美子最好也多留意一点喔。三年的时间一下子就过去了。」<br>从小葵口中说出的这句话紧贴着久美子的耳膜，发出刺耳的噪音。</p><h2 id="第二章-音乐祭，我回来了"><a href="#第二章-音乐祭，我回来了" class="headerlink" title="第二章 音乐祭，我回来了"></a>第二章 音乐祭，我回来了</h2><p>低音组的练习场所是音乐教室隔壁的教室，写着三年三班的白色塑胶门牌上布满了尘埃。<br>「低音组的乐器太大了，这是为了减轻负担。」<br>明日香说道，用手指抚摸自己的乐器。银白色的粗管上低音号好像是明日香自己的。体积庞大的低音乐器，价钱也不便宜。<br>「练习从六月开始，平日到晚上七点，十月以后到晚上六点半，大致上这样。听到钟响再开始收拾就行了。」<br>久美子国中的社团活动时间也差不多是这样，平日的练习内容似乎也相去无几。<br>「基本上，平常的练习都在这里进行。通常要等到快正式上场才会合奏，所以先从基础练习开始，照着乐谱练习。」<br>「所谓的基础练习，是要做什么？」<br>初学者叶月问道。绿辉则对明日香的说明不感兴趣地凝望着窗外，伸出手喊着：「哇！从这里可以看到樱花耶！」卓也则是心不在焉地看着她。<br>「基本上像是长音之类的，因为初学者必须先让声音稳定下来才行。」<br>「长音……那是什么？」<br>「啊，这部分稍后再说明，先来介绍成员吧。」<br>明日香很有气势地站起来，眉开眼笑地一掌拍在讲桌上。出乎意料的反作用力让她吃痛地呻吟：「好痛！」卓也静静地递给她冰敷袋。<br>「呃，让我们重新打起精神，为各位介绍成员。」<br>趴在桌上的少女闻言，慢条斯理地仰起脸。明日香指着她说：<br>「刚才都在睡觉的这家伙是中川夏纪，二年级，负责上低音号。」<br>「……请多指教。」<br>夏纪灵巧地只抬起头，微微晃动示意。眼白比例高于瞳孔的双眸滴溜溜地转动着。<br>「然后这位是二年级的长濑梨子，负责低音号。」<br>「请多多指教。」<br>被点名的少女脸上堆着友善的微笑，感觉比刚才的女生好相处多了。<br>「低音组除了我、后藤、夏纪、梨子，再加上三个新加入的一年级生，总共是七个人。去年上低音号和低音大提琴的人数还更多，但不是毕业，就是退社了。」<br>「这个社团的二年级很少耶，小绿觉得好不可思议。」<br>「欸，是吗？」<br>久美子反问之后，绿辉大大地点头。<br>「三年级有三十五人、二年级有十八人、一年级有二十八人……是这样吧？」<br>「没错没错，你记得好清楚啊！」<br>明日香佩服地点头。这么说来，的确只有二年级特别少人。<br>「怎么会这么少？」<br>问题在好奇心的趋使下脱口而出。只见明日香深沉的眼眸瞬间失去了温度，长长的睫毛隔着红框眼镜慢条斯里地上下眨动，嘴角微微地扭曲。<br>「那是因为……」<br>「没有特别的原因。」<br>卓也不容质疑地打断了明日香的话。<br>「一年级生不需要在意这些，也不用知道。」<br>被高大的卓也居高临下地看着，久美子忍不住倒抽一口凉气。平常总是温文有礼的眼神里藏着凶恶的光芒。绿辉也吓了一大跳，躲到久美子背后。只有叶月一脸不服气地反唇相讥。<br>「你非得这样说话吗？感觉好差。」<br>「叶月，别说了。」<br>夏纪看到久美子急忙阻止叶月，咧嘴一笑。<br>「那家伙只拿田中学姐没辄，别放在心上。」<br>「中川，闭嘴。」<br>卓也瞪着夏纪。<br>「哎呀，好可怕，我只是说出实情而已。」<br>「夏纪，别逗他了。」<br>梨子有些顾忌地扯着她的衬衫下摆，夏纪不以为然地瞥了同年级的梨子一眼，从鼻子里冷哼一声，然后赌气似地再度趴回桌上。卓也呆愣地叹了一口气，梨子则小心翼翼地注视着明日香的脸。看样子，这两个二年级的感情也不是太好。<br>「好了、好了，别这么剑拔弩张的。」<br>仿佛为了缓和气氛，明日香拍了拍手。<br>「总之大家打过照面了，来选乐器吧。有人是自带乐器的吗？」<br>「自带乐器？是指自己拥有乐器吗？」叶月问道。<br>「没错。不过低音组很少人拥有自己的乐器。如果是小号或长笛，很多人都会自己买乐器。」<br>「这样啊。」<br>叶月理解地点点头。低音组都是些体积庞大的乐器，无法轻松地带回家，所以不适合自己买。而且低音组的乐器多半都很贵，有些甚至要价超过一百万圆。每次看到把铅笔盒大小的长笛或单簧管放进包包带回家的人，久美子都会很羡慕。<br>「乐器都放在音乐教室隔壁的乐器室里，现在就去决定要演奏什么乐器吧。」<br>明日香说完，走出教室。久美子等人也赶紧跟上。走出音乐教室的地方有个洗手台，小号组的人正在那里洗吹嘴，丽奈的身影也夹杂在众人之中。她怀里的镀金小号是国中时父母买给她的，光泽与学校提供的乐器明显不同。<br>「啊，久美子。」<br>被点到名的久美子停下脚步。丽奈往明日香的方向悄悄地瞥去一眼，侧着头问她：「高中也选上低音号吗？」久美子老实地点头回答：「嗯，对呀。」<br>「嗯，这样啊。」<br>丽奈面无表情地喃喃低语，便踩着大步转身离去了。<br>「她是你朋友？」叶月问她。<br>「嗯，我们念同一所国中。」<br>「那是小号组的女生吧？长得好漂亮！胸部也好大。啊，真是大饱眼福。」<br>一旁的绿辉陶醉得整张脸都胀红了。她长着可爱的脸，讲出来的话还真像大叔。<br>「你们！别说傻话了，还不快点跟上来！」<br>明日香从乐器室里探出脸责骂。在她的催促下，久美子等人急急忙忙踏进乐器室。满是尘埃的味道扑鼻而来，排列整齐的乐器堆积如山，叶月发出「哇！」的惊呼声。<br>「乐器室里原来有这么多乐器啊！」<br>「倒也没有多到值得你这么感动的地步啦。」<br>明日香苦笑着说。门口的地方摆着四只低音号的箱子。五把上低音号紧挨着彼此，挤在设置于房间里的架子下层。还有两把低音大提琴倚靠着低音号而立。从目前的成员来看，乐器的数量显然过多。或许以前的社员人数比现在更多。<br>「我的乐器是自己买的，所以箱子本身就长得不一样，但其他全都是相同的款式，不要拿错，用到夏纪的上低音号喔。对了，夏纪的上低音号是这个挂着奇怪小熊吊饰的。」<br>明日香说道，指着其中一个箱子，上头的确挂着一个已经有些褪色、长得怪里怪气的黄色小熊。黑色的乐器盒乍看之下完全没两样，为了避免拿错乐器，大家都会为自己的乐器上做记号。顺带一提，明日香的乐器盒在把手的地方绑着蓝色的缎带。<br>「我推荐从右边数过来第二把上低音号。四号活塞在下面，很好按。跟我的是同一种款式。虽然镀金部分已经上了年纪就是。」<br>「啊，那我就选那个好了。」<br>久美子说道，拿起明日香推荐的上低音号。镀金已经掉得七零八落，但是和国中时代的上低音号比起来，算是保养得很好了。<br>「小绿选这个！」<br>绿辉在目不转睛地盯着乐器瞧的久美子身边兴高采烈地嚷嚷。只见她紧抱着一把低音大提琴。<br>「名字嘛……就叫乔治好了！」<br>「乔、乔治？」<br>「没错！就是乔治！」<br>绿辉笑嘻嘻地说。叶月一脸难以理解地侧着头。<br>「有必要帮乐器取名字吗？」<br>「有什么关系！毕竟是宝贝的乐器嘛！」<br>「是、是这样的吗？」<br>叶月以狐疑的眼神看着她。<br>「嗯，为乐器取名字的人还满多的喔。」久美子回答。<br>「乔治啊……」明日香抱着胳膊，「听起来挺有品味的呢！」<br>「谢谢！」<br>绿辉羞怯地双手捂着脸颊。叶月在这段时间里，已经选好自己的乐器了，「我决定选这个。」低音号的乐器盒附有运送用的轮子，毕竟用手拿实在太重了。身为初学者的叶月向学姐请教打开乐器盒的方法，露出认真的表情，不住地点头。那是她第一次得到的乐器，想必很开心吧。久美子边想着这件事，也拿出自己的乐器。和明日香的不一样，是把表情有点傻气的粗管上低音号。帮它取个名字吧。久美子心不在焉地想着这件事，指尖轻抚着上低音号的表面。<br>淡淡的金色表面，倒映出自己还残留着几分稚气的轮廓。<br>「又是上低音号啊？」<br>久美子才刚在京阪宇治站下车，背后就突然传来一把声音。她没有回头，继续迈开步子往前走。<br>「喂！你干么不理我啊。」<br>伴随着这句话，久美子肩膀被抓住，她终于转过身。不用想也知道，叫住她的人是秀一。他拿着高中发的英语单字卡，正甩着单字卡朝她挥手。久美子故意「哎……」地叹了一口气，两道眉毛略略靠拢。<br>「我没有不理你。」<br>「少骗人了！」<br>「是真的。」<br>久美子回答，阖起手中的文库本。那是向绿辉借来的小说，以东京为舞台，描写少年少女赌上生命，自相残杀的故事，内容十分刺激。从绿辉的脸蛋完全看不出来她会喜欢这种重口味的小说。<br>「还好意思说我，你为什么选长号？」<br>「什么意思？」<br>「乐器。你国中不是吹法国号吗？」<br>哦……秀一笑了。厚厚的单字卡在他手中轻轻摇晃，萤光色的廉价字卡微微震动着。这么说来，明天也要小考……久美子又轻叹一声。<br>「我啊，其实一直都想吹长号而不是法国号喔。但国中的时候猜拳猜输了，这次只是抢回来而已。」<br>「我觉得法国号也不错啊。」<br>「我也喜欢法国号，但还是长号比较帅气吧！」<br>「这倒也是。」<br>久美子也喜欢长号。不同于其他的铜管乐器，长号是以伸缩滑管的方式演奏，那种独特的动作非常吸引人。<br>「丽奈也跟国中一样，还是吹小号。」<br>「哦，高坂啊。那家伙对小号专情得很。」<br>虽说秀一和丽奈在国中的时候都加入了管乐社，但也仅止于打过照面的程度，并不是太要好。在社员人数近百人的北中管乐社里，有很多只知道名字的成员。如果不是同一个声部，也不需要混得太熟。<br>「可是，北宇治的管乐社感觉有点糟呢！」<br>「会吗？」<br>久美子对秀一的评论不表赞同。目前只进行过分组练习，低音组的感觉倒是还满舒适的。<br>秀一耸肩，逃避似地望向宇治川。宇治川的表面在夕阳余晖照耀下，闪烁着光亮。他下意识地挺直背，试图窥探水底风光，但水面太暗了，什么也看不见。<br>「那是当然的啊，因为低音王国是那个嘛，田中学姐的领土。」<br>「低音王国是什么意思？」<br>「我也不是很清楚，但学长姐是这么说的。说那里是由田中学姐治理，所以井井有条。」<br>「其他的声部不是这样吗？」<br>「嗯，你不要告诉别人喔。」<br>秀一特别叮咛她，脸上浮现出苦涩的微笑，看起来有些不胜其扰的模样。<br>「北宇治的管乐社啊，二年级不是特别少吗？你知道为什么吗？」<br>「哦，我们白天刚好也提到这件事，但是被后藤学长打断了。」<br>一年级生不需要在意这些。<br>想起卓也说过的话，久美子忍不住又是一声叹息。当时学长显然很不高兴，他这么抗拒这个话题吗？<br>「听说好像是和现在的三年级大吵一架，很多人因此退出社团，所以原本超过三十个人的二年级如今只剩下一半。」<br>「为什么吵架？」<br>「关于这件事啊！」<br>秀一仿佛是想起了什么，兴奋地开口，平常无精打采的双眼只有这个时候睁得特别大。<br>「真的很令人气愤，三年级的人当时都不练习！明明就演奏得这么烂！却一直要求学弟妹不能偷懒……由于这种差劲的性格，当时还是一年级的二年级生就跟学长姐吵起来了。」<br>「真的吗？」<br>久美子只能如此反问。低音组完全没有那种感觉。三年级的明日香比谁都热爱上低音号，几乎都不休息地拼命吹个不停，反而是二年级的夏纪明显地意兴阑珊。<br>秀一听她这么说，露出不再坚持的微笑。<br>「那是因为田中学姐跟大家不一样！还有社长和香织学姐，他们算是特例。」<br>「香织学姐？小号组的？」<br>「没错。她温柔又漂亮，还热中于练习，真是太厉害了，真希望能跟我们的组长交换一下。」秀一一脸认真地说道。<br>「泷老师说要进军全国，但是只要那些三年级生还在，大概连想都别想吧。他们只会扯大家的后腿。难得今年的一年级阵容这么坚强。」<br>真想去一次全国大赛啊！秀一喃喃自语。他的视线不在这里，而是望向某个遥远的地方。或许是想起国中的比赛吧。久美子也垂下眼帘。当时以参加全国大赛为目标，结果北中管乐社还是在地区大赛止步。已经尽了最大的努力，但梦想还是没有实现。这就是现实。努力就能得到回报什么的，其实只有极少部分的人才办得到。来不及被神明握住手的孩子们，随着一次次的失败，学会小聪明。不用面对也没关系，逃走就好了，这么一来就能轻松地活下去。<br>为了摆脱自己的想法，久美子轻轻地吐出一口气。要是努力得不到回报，干脆从一开始就不要努力，这么一来就不会受伤了。随便吹一吹，随便地乐在其中，这样的社团活动也不错啊。但就算撕裂嘴巴，她也不敢对秀一说出这种话。<br>每年到了五月，京都各高中的管乐社都会在太阳公园游行。学生一边演奏，一边在宽广的公园里绕行。很多音乐活动都会在太阳公园举办，这个音乐祭也是每年惯例的活动之一。<br>「太阳祭吗？」<br>叶月抱紧始终吹不出声音来的低音号，侧着头问道。「对呀。」明日香回答。这是发生在放学后，分组练习时的事。<br>「全名是第二十三届太阳公园音乐祭。」<br>「已经办了二十三次啦。」<br>绿辉大感敬佩地点头。她听着大家聊天，俐落地在弓上涂松脂。马尾制弓很容易在弦上打滑，松脂的作用就是为了止滑。若不涂上松脂，弓只会在弦上滑动，不会发出声音来。然而，初学者很难拿捏该涂多少，涂太多导致声音充满颗粒感的人也不少。<br>「已经决定好要演奏什么曲子了吗？」<br>明日香听到卓也的提问，大大地点了头。「是的，就是这个。」她边说边递出一份影印的乐谱。曲名为〈Can’t Buy Me Love〉。<br>「这次只让有经验的一年级演奏，所以叶月就没有乐谱了。」<br>「这样啊。」<br>只有自己没拿到乐谱的叶月神情落寞地垮下肩膀。久美子与绿辉偷偷地交换一个眼神，好像拿到乐谱的自己反而成了坏人。不过叶月连声音都还吹不出来，明日香会做出这种判断也实属正常。<br>「那叶月在音乐祭要做什么？」<br>夏纪笑得不怀好意，回答绿辉的问题。<br>「当然是那个啦，每年惯例的谜之舞步。」<br>「谜、谜之舞步……」<br>叶月不安地看着他们。<br>「不用那么担心，只是拿着彩球，在队伍后面跟着踏步而已。」<br>梨子露出令人放心的微笑。彩球……叶月咕哝着，脸上的表情越来越不安。卓也忧心忡忡地看着她，嘴巴从刚才就一直张开又闭上，似乎真的很不善言词。<br>「我们声部的初学者比较少，其他声部多的是初学者，所以不用担心。而且梨子和夏纪去年也跳过。」<br>「夏纪学姐，你们原本也是初学者吗？」叶月露出松了口气的表情。<br>「对呀！」夏纪附和：「只可惜梨子的运动神经太差了，直到最后都没学会舞步。」<br>「你够了喔！这种事不用现在拿出来说吧。」<br>「哈哈，抱歉抱歉。」<br>梨子满脸通红地拍打夏纪的背。经过几天的社团活动，久美子发现这两个人的感情其实也没有那么不好。不，反而应该说感情很好才对。起初还以为她们的关系势同水火，现在看来那只是久美子的误会。大概是因为当时的气氛使然吧。想起第一次分组练习的情景，久美子摩挲着下巴。明明只是几天前的事，记忆却已经变得模糊，轻易地从久美子想抓住的指缝间溜走。<br>「对了，〈Can’t Buy Me Love〉是一首什么样的曲子？」<br>叶月的问题让明日香的双眼又开始闪烁起光芒。啊，糟了。久美子心想。与此同时，明日香已经开口了。<br>「这份乐谱是将一九六四年三月由英国摇滚乐团披头四发表的第六张原创单曲〈Can’t Buy Me Love〉改编成爵士风的曲子。英语课经常可以听到披头四，大家都知道他们吧？〈Can’t Buy Me Love〉的原曲没有前奏，从保罗·麦卡尼突然喊出歌名的咆哮声开始。在英国狂销百万张，美国也有两百十万张的订单，是史上第一张光是预购就卖破百万的单曲。除此之外……」<br>「学姐，可以了。接下来我们会自己查维基百科。」<br>在卓也的阻止下，明日香的机关枪扫射终于告一段落。明日香是个很迷人的学姐，唯有这个一旦开口就停不下来的毛病令人束手无策。<br>「还有一个月的时间，我想应该没问题。这个结束以后，就要全神贯注地为比赛准备了。」明日香耸耸肩说道。<br>「比赛啊……」卓也沉吟：「今年会怎么样呢……」<br>他望向窗外。或许是因为旁边就是后山的关系，从位于三楼的教室只能看见蓊郁的绿意。风轻轻地吹过，花草像是在嘲弄他们，笑得前俯后合。刚才还熊熊燃烧的太阳，如今已隐身在云层里，原本刺眼的阳光完全消失。潮湿的水气掠过鼻尖，就快下雨了。<br>「泷老师要我们练到可以合奏的水准才聚在一起，所以我们可以练习的时间顶多只有一个礼拜，在那之前好好加油吧。」<br>「好。」<br>久美子答应明日香的要求。<br>合奏啊……泷升会做出什么样的指导呢？<br>或许是因为他的长相，也或许是那谦逊的态度，泷成了非常受欢迎的老师，尤其受到女学生的喜爱。他的音乐课也非常抢手，号称是人人想上的课。附带一提，久美子的级任老师美知惠也是很有人望的老师，拥有「军曹老师」这种莫名其妙的绰号，态度固然严厉，但是对认真上课的学生则很温柔，就连班上参加其他社团的同学也说她更适合当管乐社的顾问。他们至今尚未见识过泷指挥的模样，肯定会是很开心的合奏吧。久美子怀着毫无根据的确信，将气息送进吹嘴里。乐器微微地振动，慢慢地发出悠扬嘹亮的声音。<br>分配完乐谱、大约一周后的礼拜天，他们举行了第一次合奏。合奏练习的第一件事，就是把平常放在音乐教室的桌椅搬到走廊上。为了让教室能容纳将近八十名学生，打击乐器及谱架的摆放方式就显得格外重要。久美子等人搬来乐器室里的脚架，设置在属于低音组的地盘。前面是木管，后面是铜管，角落是打击乐器，各自站在可以看见指挥的位置。音乐教室并没有隔音设备，但因为布能吸收声音，只好将就地把破破烂烂的毯子挂在墙上。初学者还没办法照着乐谱演奏，但基于是第一次的合奏，还是和大家一起参加了。他们不会实际吹奏，只是在一旁观摩。<br>「今天是第一次的合奏呢。」<br>泷坐在正前方的椅子上，微笑着说。久美子用脚尖踢正脚边的水桶，悄悄地按住胸口。感觉心脏跳得好快。国中时虽然已经合奏过好几次了，上了高中还是第一次。<br>「各位，我记得已经告诉过大家了，你们练习到足以合奏的水准了吗？」<br>社员们对这句问话回答得有一搭没一搭的。泷露出苦笑，拿起指挥棒。<br>「总而言之，先调音吧。」<br>社员遵照他的指示，纷纷吹出声音。经过简单的基础练习之后，终于进入〈Can’t Buy Me Love〉的合奏。他高举起指挥棒，社员们一起拿起乐器。久美子也拿起上低音号，将手指放在活塞上，活塞冷冰冰的。<br>泷吸了一口气，然后毫不迟疑地掀动唇瓣。<br>「一、二、一二三四。」<br>随着指挥棒向下挥的同时，打击乐器刻画出节奏，铜管乐器跟上这股节奏，发出气势磅礡的声音。快节奏的音乐散发出蓬勃的朝气，仿佛随时都要迈开大步往前走。久美子浑然忘我地追逐着指挥棒。<br>前半段的演奏还不错，但是到了中间，打击乐器的节奏与铜管、木管的演奏开始对不起来，细微的落差一口气拉大，各声部的缺陷一下子全都暴露出来。主旋律瞬间走调、声响不协调、低音与高音分离……原本水乳交融的音乐突然开始出现不协调感，音符与音符互相撞击。乱七八糟缠绕在一起的演奏，再怎么宽容也无法称之为音乐。<br>「好，到此为止。」<br>泷硬生生地停止了演奏。众人将乐器从嘴边移开，全都露出苦笑。这种演奏，实在无法令人抬头挺胸。久美子也把乐器放在膝盖上。「哇！好糟糕啊。」夏纪偷偷地在久美子的耳边嘀咕。<br>「这是怎么回事？」<br>泷侧着头，脸上依旧保持着笑容。他的语气隐隐带刺，失去了平常的柔和。教室里的气温顿时降低了好几度。<br>「社长。」<br>被点到名的小笠原慌张地回答：<br>「有、有！什么事？」<br>「我不是说过吗，请各位练到可以合奏的水准再聚在一起。」<br>「是、是的……老师说过。」<br>「我说过的结果是这样吗？」<br>泷的表情依旧一丝变化也没有，正因为如此，才更令人胆战心惊。小笠原的身体看起来比平常还缩小了一号。夏纪在久美子旁边紧张地咽口水。<br>「各位认为合奏的目的是什么？」<br>谁也无法回答顾问的问题，令人窒息的沉默支配了整个空间。只见他大为惊愕地叹了一口大气，指着长号的方向。<br>「你认为是什么？」<br>「我、我吗？」<br>被点到名的学生惊慌失措。这个熟悉的嗓音，不会错的，是秀一的声音。<br>「那个……是为了能够正式表演，让大家一起配合的练习……」<br>「没错，我也是这么想的。」<br>得到泷的赞同，让秀一如释重负地松了一口气。然而，教室里还是充满紧张的气氛，空气凝重得胃都要痛起来了。久美子用力地咬紧下唇。<br>「可是这样根本还不能合奏喔。各位的声部都有各自的缺陷。如果只是少许的失误，演奏还可以继续下去，但吹得这么烂，就连演奏本身也会变得破绽百出。这种程度的演奏就想要合奏，你们不觉得丢脸吗？」<br>泷以夸张的大动作叹着气，毫不留情的破口大骂，令学生们悚然一惊。<br>「没想到各位的能力只有这种程度，真是太令我失望了。」<br>这句话让教室后面的学生站了起来。是三年级的长号。<br>「请等一下，这么说太过分了。」<br>泷瞥了那名学生一眼，脸上依旧挂着爽朗的微笑，不以为然地嗤之以鼻。<br>「会吗？」<br>「我们又不是来玩的，大家都好好地练习过了！」<br>「不是来玩的……是这样吗？」<br>泷静静地眯细眼睛，以慢条斯理的动作把指挥棒往桌上一放，拿起手边的节拍器开始调整。当他的手离开节拍器，机器便开始快速地打起「喀嚓喀嚓」的节奏。<br>「长号组的各位，请配合节拍器，从开始演奏的地方吹起。不用管打击乐的部分没关系，可以开始了吗？」<br>这句话让长号组缓缓地举起乐器来。确定所有号口都朝向前方后，泷说：<br>「一、二、三、四。」<br>主旋律配合节拍迸出。演奏从一开始就很不整齐，可能是好几个社员一直都以错误的节拍演奏。面对逐渐变得七零八落的演奏，泷连眉毛都不挑一下。<br>「好，到此为止。」<br>在他的一声令下，社员全都一脸尴尬地放下乐器。<br>「听完这段演奏，各位有什么感想？」<br>泷看过一遍教室里的每张面孔，没有人肯与他对上视线。他叹了一口气，「真拿你们没办法啊！」说完有些为难地笑了。<br>「我认为这不只是长号的问题喔。其他声部也一样，就连单一声部的演奏也让人听不下去。为什么会这样呢？」<br>充满了紧张感的粘腻空气，紧紧地贴在久美子的皮肤上。<br>「过去这一个礼拜，我去看过各位分组练习的情况了。事实上，大家似乎都很开心的样子，就连走廊上也能听到你们聊天的声音喔，也有完全听不见乐器声音的教室。」<br>被说中了吗？只见其他声部的人全都露出坐立不安的表情。久美子不经意地想起秀一前几天说过的话。这个学校的管乐社果然对练习不太热中的样子。<br>「我啊，其实并不想强迫大家练习。只是，各位一开始就决定了要参加全国大赛，对吧？既然如此，这种表现我会很困扰的。至少得在分组练习的时候完成最基本的演奏才行。」<br>或许是很不耐烦吧，他笑容可掬地说出难听的话。<br>「我不晓得你们误会了什么，但我可不是为了与各位玩耍，假日还特地来学校的。我是来指导各位的。但这是怎么一回事？这种演奏已经是接受指导以前的问题了。请不要浪费我宝贵的假日。」<br>从教室的角落传来女学生啜泣的声音。尽管如此，泷的表情还是不为所动。勾勒出一道笑痕的凝眸深处，闪动着令人不寒而栗的冷冽神色。<br>「社长。」<br>「有、有！」<br>小笠原的声线拔尖了八度，然而谁也没空笑她。<br>「已经两点了，今天的合奏到此为止。从现在开始进行分组练习。」<br>「好的。」<br>「还有，下礼拜开始三方面谈，所以课只上到中午，有很多时间可以练习吧。因此，下次合奏从星期三的两点开始，可以吗？」<br>注：三方面谈：日本的教育机构在学期末会举行由教师、学生、家长等三方进行的面谈，讨论学生的在学状况及升学就业的问题。<br>「当、当然可以。」<br>「那么各位同学，请在下次合奏以前完成最基本的演奏。听见了吗？」<br>没有人应声。大家全都冻住似地动弹不得。泷笑着又问了一次：<br>「回答呢？」<br>略显迟疑的回答此起彼落地响起，但久美子什么也说不出来。「听见了」这么简单的三个字哽在喉咙，说不出来。可能是因为紧张的缘故，她的嘴里干巴巴的。<br>泷抱着乐谱走出教室。没有人有动作或说话，不自然的沉默沉甸甸地充斥在教室里。久美子下意识地用力抓住自己的手腕，晒得有点黑的肌肤浮现出白色的痕迹。她看见那道痕迹，终于吐出一口气，感到手背有点疼痛。<br>泷的背影消失在音乐教室后，又过了很长一段时间，终于有人站起来了。<br>「那家伙是什么意思！」<br>开口的是吹法国号的学姐。至此，教室里绷紧的那条紧张的线终于断掉了，由她的这句话打前锋，众人纷纷说出对泷的不满。<br>「真的，太烦人了吧。」<br>「那是什么态度，感觉好差。」<br>「不知道他想干什么，真是气死人了。」<br>没完没了的不满融解在空气里，变成扰人的噪音，撩拨着久美子的耳膜。久美子不由自主地皱了皱眉头。<br>「停、停、停！抱怨归抱怨，但是请快点回到各自声部待的教室里。开始练习了。」<br>明日香在教室的中央下指令。小笠原大概已经完全吓傻了，连脚尖都蜷缩成一团。这么一来，根本不晓得谁才是社长。<br>「久美子，我们也快走吧。」<br>叶月催促地拍拍她的背，久美子离开音乐教室。回头一看，正好与小心翼翼地抱着小号的丽奈四目相交。宛如黑曜石般的双眸四周是纤长的睫毛。不知何故，她那双美丽的眼眸正燃烧着熊熊的怒火。<br>从京阪宇治站到久美子的家有好几条路线。平常都是过宇治桥、沿着平等院通前进，以这条最短的路径回家，唯独今天没有这个心情。「不觉得丢脸吗？」泷在合奏时说的那句话，在久美子的内心深处灼烧，冒着蒸腾的黑烟。沉重的气氛几乎要把肺戳穿一个洞，就连动一下都觉得辛苦万分。像这种心情沉重的日子，久美子总会绕一下路再回家。<br>出了车站，顺着河岸笔直地往前走，便会看见宇治神社的鸟居。鸟居的右手边有一座涂成朱红色的朝雾桥，桥的前方是一尊穿着和服的男女紧紧相依的纪念碑，他们是浮舟与匂宫。这片土地是《源氏物语》里〈宇治十帖〉的舞台，因此竖立着与源氏物语有关的纪念碑。话虽如此，久美子只有在教科书上读过《源氏物语》，因此并不清楚浮舟与匂宫是谁。<br>注：浮舟与匂宫为《源氏物语》里的人物，浮舟是光源氏的弟弟宇治八之宫的三女，匂宫是光源氏的外孙，两人发展成情侣关系，〈宇治十帖〉则是描写两人的故事。<br>久美子坐在堤防上，伸直脚，望着闪闪发光的正红色朝雾桥，似乎一切都无所谓了。潺湲水声静静地融入众声喧哗的寂静里，感觉很舒服。时间的流动变得缓慢，手表上刻画着一秒一秒的秒针，意兴阑珊地拖着脚步往前走。<br>「嗨。」<br>有人喊她，久美子仰起脸，是秀一。<br>「你那是什么眼神。」<br>只见他的表情微微一僵，也没征求同意，就在久美子的旁边坐下，黑色学生裤挤得皱巴巴的。<br>「你来这里干么？」<br>「大概跟你一样，是来转换心情的。」<br>「嗯哼。」<br>虽然觉得很可疑，但是又想不出回嘴的话，久美子便也不再继续追究，只是随口说出想到的事。<br>「泷老师好可怕呀！」<br>「对呀，超可怕的，吓死人了。」<br>秀一说着，发出咯咯笑声。他用手指拨开留长的刘海，稍微缩了一下肩膀。<br>「我的组长气得快发狂了。虽然我觉得他根本是活该。」<br>「不过，北宇治高中真的演奏得很烂耶。开学典礼就有这种感觉了，没想到会糟到这种地步。」<br>久美子将膝盖靠近身体。她一想到接下来的事，就忧郁了起来。<br>「那老师是真的认为我们可以进军全国吗？」<br>「那种水准的话，不太可能吧！感觉就像是在作白日梦，而且三年级在分组练习的时候都只顾着聊天。」<br>订出那么高难度的目标，只会让自己丢脸吧。他毫不留情地说，嘴角不屑地往下撇。<br>「他也只是下指令而已，是不是真有实力还不知道呢。」<br>「天晓得呢。他说自己是第一次当顾问。」<br>「这还用得着说吗！开什么玩笑！」<br>突然响起的声音，令两人大吃一惊地回头张望。说别人坏话的时候被抓到，总是让人觉得无地自容。站在眼前的是看起来非常生气，狠狠地瞪着他们的丽奈。她的左手还拎着装有小号的盒子。<br>「你、你怎么会在这里……」<br>虽然三年来都和丽奈念同一所国中，但这还是第一次在住家附近遇到她。只见她气鼓鼓地站在两人背后，不以为然地冷哼了一声。<br>「我住在这一带。就在宇治上神社附近。」<br>「我从来没有看到过你……」<br>「因为我没搭电车吧？我都是骑脚踏车上学。」<br>原来如此。久美子有些被她压制住地点头。至于秀一，已经完全僵在原地了。这么说来，他很不擅长应付久美子以外的女生。<br>「所以呢？你们刚才在聊什么？」<br>丽奈倏地凑近，久美子忍不住垂下眼帘。美少女的脸部特写，对心脏不太好。<br>「没、没什么，那个……」<br>仿佛为了给手足无措的久美子致命一击，丽奈又跨近一步。一旁的秀一已经面无血色了。<br>「先告诉你们，泷老师是很厉害的人！你们要是敢小看他的话，我可饶不了你们！」<br>「嗯、嗯。」<br>「你也听清楚了吗？」<br>丽奈的视线捕捉到秀一。矛头突然指向自己，害他吓了一大跳，缩了缩身体。<br>「怎么不回答？」<br>「听、听清楚了……」<br>「听清楚就好。」<br>丽奈心满意足地颔首，又从鼻子里哼了一声。眼前的美少女站得直挺挺的，手里握着装有小号的盒子，居高临下地打量着他们。<br>「这次就原谅你们，以后要是敢再说泷老师的坏话，我绝不轻饶。」<br>「我、我又没有说他坏话……」<br>秀一小声地反驳，换来丽奈犀利的一瞥。她桃红色的唇瓣勾勒出危险的弧度。<br>「你说什么？」<br>「没、没有……我什么都没说。」<br>秀一没两下就竖白旗投降。<br>「知道厉害就好。那么再见。」<br>丽奈只丢下这句话，就仿佛什么事也没发生过，潇洒地转身离开。刚才的喧闹仿佛一场梦，周围一下子安静了下来，剩下两人哑口无言地注视着彼此的脸，然后不约而同地站起来。<br>「……回去吧。」<br>「就这么办。」<br>路上奔跑的少年们发出纯真无邪的笑声。久美子用力地揉揉眼头，感觉有些累了。秀一似乎有话想说，直勾勾地盯着她看，但终究还是什么都没说。<br>第二天，久美子推开分组练习室的门，不晓得吹什么风，泷已经在里面了。<br>「你好，黄前同学。」<br>「啊，老师好。」<br>泷向她打招呼，久美子也连忙鞠躬问好。这个人，已经记住所有人的名字了。她的脑海中闪过这个念头。<br>「久美子，泷老师今天似乎要指导我们，所以快点准备。」<br>「啊，好的，我马上准备。」<br>在明日香的催促下，久美子赶紧走向乐器室。将好不容易逐渐用得顺手的粗管上低音号从盒子里拿出来，再从架子上抽出自己的乐谱。社团统一使用的档案夹，内页的透明夹部分不容易反光。要是用便宜的档案夹，等到正式上场的时候，可能会在灯光的干扰下看不清楚乐谱上的字。<br>「不好意思，让大家久等了。」<br>久美子急忙冲进分组练习的教室里。几乎所有低音组的成员都到齐，只差正在进行三方面谈的叶月还没到。<br>「请坐在你平常的位置上。」<br>「啊，好的。」<br>久美子赶紧在靠窗的位置上就座。泷轮番看过成员们的面孔后，微微地扬起嘴角。<br>「我今天来，是想听听各位都吹出什么样的声音。不过我下午四点就要开始面谈了，所以在那之前请容我简单地确认一下。」<br>「可以吗？」泷看着明日香问。只见低音组的组长如往常般露出令人捉摸不定的笑容，用力地点头回答：「没问题。」<br>「那么，首先请大家唱出调音的音。」<br>所谓调音，简单地说就是调整音程的作业。这项作业要是做得不确实，原本应该发出同一个音阶的乐器就会合不起来，音准也会跑来跑去的。当大家要吹出同一个长音时，如果音准不稳定地飘来飘去，就是音程不太对劲的证明。平常听音乐的时候可能完全不会注意到，一旦要演奏，音程的存在就会成为比什么都难克服的难关。附带一提，粗管上低音号及低音号是借由拉、拔调音管的方式来调整音程。<br>「要唱出来吗？」<br>「是的，请唱出来。」<br>泷点头回答梨子的问题。一旁的明日香摩挲着下巴。<br>「老师该不会是要在接下来的练习里加入『视唱』的训练吧？」<br>「真不愧是田中同学，知道得很多嘛。」泷似乎颇为佩服。<br>夏纪一脸匪夷所思地侧着头问：「什么是视唱？」<br>「所谓的视唱，是指以阅读乐谱为主的基础训练。在开始基础练习以前，先从我接下来要发给各位的乐谱中唱出几段来。这些训练可以培养看谱的能力，也可以发出正确的音程。」<br>「小绿在国中的时候也做过这种练习喔！」<br>绿辉在久美子身边有些兴奋地说。既然是强校圣女推行的练习方法，肯定是有效的吧。<br>「今天没什么时间，总之先让我确认一下调音的方法也好。」<br>泷说到这里，用笔记型电脑播放出B♭的音。<br>「配合这个音，每个人轮流发声。请以顺时钟的顺序开始。」<br>「好。」<br>明日香点点头，发出与电脑播放出来的音阶同样高的声音。她那扎实圆润、冷静沉着的嗓音以女生来说稍微低了点，但是光听就足以令人脸红心跳。紧接在她之后，其他的成员也依序发声。不愧是管乐社的人，大家对音乐都很得心应手呢，久美子心想。<br>「……后藤同学，你对唱歌是不是不太拿手？」<br>泷仿佛包着糯米纸的问话，令卓也垂头丧气地低着脸。看样子他似乎是非常严重的音痴，歌声具有不容小觑的破坏力。泷苦笑着说：<br>「不要紧，不熟练的人等到习惯以后就会唱得越来越好了。加油吧。」<br>「好、好的。」<br>卓也完全失去了气势，高大的身体整个蜷缩起来。明日香哈哈大笑，拍了拍他的背。<br>「不用担心啦，我认识比你更音痴的人。」<br>「谁？」<br>明日香十分干脆地解答久美子的疑问：「晴香。」<br>「这倒是，社长唱歌超难听的。」<br>夏纪毫不留情地说。<br>「先不管谁是音痴，接着请让乐器发出同样的声音。」<br>跟刚才一样，由每个人轮流吹出同样的声音。即便是刚才展现过充满破坏性歌声的卓也，换成乐器也能重现正确的音程，真不可思议。<br>「那么这次一起演奏。请吹出同样的声音。」<br>遵照他的指示，大家吹出B♭的音。低音层层相迭，电脑播放的电子音则微微地震动着，表示音程不对。<br>「请把注意力放在让乐器的声音融入电子音里。乐器不是吹出声音来就好，而是要使其融入原本就有的声音里。」<br>融入声音里。意识到这句话，久美子竖起耳朵倾听周围的声音。高低起伏的声音逐渐重迭，不协调的感觉也慢慢地消失了。上低音号、低音号、低音大提琴的声音水乳交融，逐渐形成一体。就在这个时候，耳边传来本该听不见的高音。接近法国号的声音，是F的音。<br>「好，到此为止。」<br>泷的话让久美子放下高举的乐器。刚才听到的声音是她至今听过最美的同度齐奏。国中的时候，老师也曾不厌其烦地要求音程的问题，但这或许是她第一次这么认真地意识到。<br>注：同度齐奏：意指由两种以上的乐器同时演奏出同一个音程。<br>「刚才听到了F的音吧？」<br>所有人都老实地点头。<br>「那就是泛音。音程一旦整齐，就很容易听见。只要大家能紧贴着这个音演奏，就能达到跟纯律相同的效果。要将音程对准非常麻烦，但是如果要演奏出动听的音乐，就不能忽略音程的问题。光是展现高超的技术，根本算不上演奏。只要能像这样，一个一个音符完全对准，就会变成动人的演奏。所以平常合奏的时候就要倾听其他声部的声音，仔细地处理每一个音才行。」<br>注：泛音可以增加铜管乐器的音域，所以几乎所有铜管乐器在演奏的时候都会使用泛音。<br>注：纯律：在泛音的基础上产生的音律，听起来具有让音律显得和谐的效果。<br>「是！」<br>久美子等人精神抖擞地应声。虽然只是短时间的指导，但好像已经掌握住抓到音程的诀窍了，真想赶快在合奏上实地演练一番。泷仿佛看穿久美子的这点心思，微微地眯细了双眼。<br>「那么，最后再合一次低音吧。」<br>他说到这里，拿出指挥棒。<br>第二次合奏那天，音乐教室里充满了异样的紧张感。就连上次直到泷老师进教室以前都只顾着聊天的学长姐们也跟大家一样，正与乐谱大眼瞪小眼。久美子将乐谱放在谱架上，从口袋里拿出调音器。<br>在管乐社里，有个合奏前一定要先搞定的作业，那就是调音。简单地说，就是调整音程。至于调音器，则是用来调音时非常方便的工具。久美子的调音器是国中时代买的三千圆便宜货。调音器的价格从最贵到最便宜的琳琅满目，如果是冷光型调音器的等级，有些甚至超过五十万圆。久美子的调音器是将其靠近发出声口、奏出声音，记忆体就会显示出音阶是高是低。除此之外，用耳朵听出规定的音准，再自己摸索也是一种方法。<br>社长站在前面，与众人一起进行最后的调音。大家同时发出一样的音，调整音阶的高低差。基本上，室内的温度越高，铜管的音程也会越高；温度越低，音程则会偏低。参加比赛的时候，不只是当场的音程，也必须把会场的冷气影响及移动时间的音程变化全都考虑进去。能不能注意到这么细节的地方，亦是强校与弱校的差别。<br>「大家今天果然都卯足了劲呢。」<br>坐在隔壁的夏纪笑得甚是开怀。她手边的乐谱也写满了在这之前没有的注意事项。<br>「因为不想再被骂得狗血淋头了。」<br>「也是，但理由可能不只那样。」<br>夏纪说道，视线投向教室的角落。三年级的人正聚在那里，不晓得在窃窃私语些什么。「那家伙气死人了」或「绝对要给他一点颜色瞧瞧」之类的话混在喇叭的声音里，断断续续地传了过来。听说过去这一个礼拜，泷趁放学后的时间指导了所有的声部。他指导的时候非常严格，不只一次有人看到边哭边吹奏乐器的社员身影。<br>「好像还怀恨在心呢。」<br>「因为那些人的性格很差嘛。」<br>夏纪过于尖锐的评语令久美子下意识往四周围张望，还好其他社员似乎没有听见。<br>「夏纪学姐，这种话别说得这么大声比较好喔。」<br>「我说的是事实。」<br>夏纪一点也不害怕地说。<br>「你其实也这么觉得吧？」<br>「咦？」<br>久美子不知道该怎么回答才好，此时顾问飒爽地出现在音乐教室，适时解救了她。原本吵吵闹闹的音乐教室顿时鸦雀无声。<br>泷坐在正前方的位置，打开乐谱。教室里所有人的视线全都落在他身上。泷愁眉深锁地望着乐谱，突然想到什么似地抬起头，给人柔和印象的眼眸在音乐教室里转了一圈。<br>「大家好像都到齐了呢。」他以稳重的语气说道。<br>「如何？演奏得比较好了吗？」<br>「我认为进步很多。」社长回答。<br>「是吗？」泷眯细了双眼，「那么，先来检查音程。请各位在心里想着我分组练习时指导过大家的事，开始演奏。」<br>他先以风琴弹出用来调音的音，然后轻轻地挥动指挥棒，社员们便一起吹出同一个音。耳边传来清澈的声音，与上次的合奏截然不同。可以听出几乎没有人跑调，声音笔直地重迭在一起。是改变了吹奏的方法吗？各种乐器发出声音的方式也完全不一样了。乐器本身发出非常清亮的声音。<br>「好，我明白了。」<br>泷放下指挥棒，久美子等人也停止吹奏乐器。能让声音在短时间产生这么大的变化，恐怕都多亏泷的指导。社员们清楚地感受到自己的进步，纷纷交头接耳起来，脸颊兴奋地微微泛红。泷拍了一下手，让大家安静下来。<br>「各位，我知道你们很高兴，但是请不要在练习的时候聊天。接下来是基础练习，请吹出我发给各位的乐谱第三段。」<br>基础练习在那之后持续了好一会儿。明明是为了合奏要在太阳祭吹的曲子才集合的，为什么非得一直进行这么无聊的练习不可呢？显然不是只有久美子这么想，周围的人也都露出百般聊赖的表情。在这样的情况下，只有明日香以严肃的表情紧盯着顾问的身影。<br>「负责单簧管的铃鹿同学，声音稍微高了一点。」<br>「抱、抱歉。」<br>久美子撑着下巴思考，泷的耳朵究竟是什么构造啊？明明同时听到这么多的声音，他的耳朵却能准确地捕捉到跑掉的音。<br>「……那么，差不多可以开始演奏〈Can’t Buy Me Love〉了。」<br>这句话让已经对基础练习感到厌烦的社员们抬起头来。他苦笑着拿起指挥棒。原本平放的乐器也一起朝向前方。<br>「一、二、一二三四。」<br>随着泷挥下指挥棒，鼓开始敲打出节拍，然后铜管与木管的主旋律加入阵容，音乐顿时给人华丽非凡的印象。虽然是快版的曲子，只要能掌握住节奏，应该就能顺利地演奏到最后。久美子紧盯着乐谱，拼命地舞动着手指。阵容庞大的音符小兵虽然脱队了几个，但大家还是认真地跟上指挥棒。长笛的连音、小号的主旋律、打击乐器与低音的贝斯……真要举出问题点，其实没完没了。尽管如此，曲子依旧没有中断。当音乐来到尾声，指挥棒终于停止动作。<br>……总算结束了。<br>似乎不只有久美子这么想，放眼望去净是松了一口气的表情。感觉好疲惫。国中的合奏还不曾这么累过，可见自己多么集中精神。<br>泷始终闭着双眼，陷入沉思，然后蓦地放松了嘴角，细长的手指翻动着乐谱。<br>「嗯，算是及格了。」<br>这句话让明日香皱起眉头。明明比上次的演奏好很多，但似乎还远远不及泷要求的水准。<br>「五月初就要正式上场了，我们剩下的时间并不多。太阳祭是游行的活动，所以各位必须背下这份乐谱，达到边走边演奏的水准才行。如何？有信心吗？」<br>他挑衅地说，看过教室一遍。社员纷纷低下头，试图避开他的视线。<br>「我有信心喔。」<br>泷说的话让久美子眨了眨眼睛。只见他抱起堆在桌上的那一迭纸，要单簧管的社员发给后面的人。写在便宜影印纸上的文字，是密密麻麻的社团活动行程。紧凑的行程令夏纪不由得苦着一张脸说：「天啊！真的吗？」<br>在这句话的带动下，久美子也将视线落在手中的纸上，上头巨细靡遗地写着基础练习的作法和平常分组练习的作法。全部完成的话，将会是非常浩大的工程。<br>「老师，这个……」小笠原以意想不到的表情开口。<br>「这个练习表，真的要全部照做吗？」<br>「有什么理由不全部照做呢？」泷一脸疑惑地侧着头反问：「只要把各位平常仗着年轻、轻易浪费掉的时间全部聚集起来，这种程度的练习量根本算不了什么喔，应该能在现有的社团活动时间内完成。啊，当然，一年级的初学者有另外一份练习表，也请一年级的初学者照表操课。」<br>明明长了一张人畜无害的脸，说出来的话却毫不留情。坐在社长旁边，脖子上挂着萨克斯风的葵正目不转睛地死盯着练习表看。她的右手背还有用红笔写的数学公式。那串毛毛虫般的公式是怎么回事？自己迟早有一天也得记住那种公式才行吗？久美子按住隐隐作痛的太阳穴。<br>「太阳祭会如实地展现出各个高中的实力。我可不能接受去年那种乱七八糟的演奏。请各位认真地面对接下来所有的发表会。」<br>我们以前也不是闹着玩的。不晓得是谁偷偷地在下面嘀咕了这么一句。但是泷笑着当没听见。<br>夏纪则是冷笑着说：「这老师真有一套啊。」<br>久美子心想，夏纪这句话说得还真是高高在上。<br>「我想先解决今天合奏中特别明显的跑调问题，那么先从中段的小号主旋律开始……」<br>依照泷的指示，社员拿起乐器。丽奈的身影当然也在其中，只见她的双眸眨也不眨地注视着泷。久美子看不见的泷的表情，清楚地反映在她眼中。<br>或许是原本偷懒的社员也开始练习了，自从那次合奏以后，各个教室都能听到分组练习的乐声。不只如此，不确定是否全拜泷的指导所赐，但是基于想让他刮目相看的心理而开始练习的社员的确增加了。一走进音乐教室前的女生厕所，就能听到「那个混账老师！」或是「坏心男！」之类把顾问贬得一文不值的骂声。算了，总比都不参加练习好。<br>「咦，我不懂你的意思。」<br>回到分组练习的教室，叶月正以困惑的表情仰望卓也。只见他正指着乐谱，有些伤脑筋地搔头。<br>「我是说……只要能巧妙地运用喉咙和舌头就行了，大概吧。」<br>「咦，我办不到啦。」<br>「办得到，没问题。」<br>「才怪，这太难了啦！」<br>久美子往两人的手边看过去，泷设计的练习表映入眼帘。一号、二号……以数字编号的乐谱，大概是基础练习用的。<br>长音是铜管乐器最重要的基础练习。一般是采依照音阶吹出声音的方法，透过这个练习就能发出安定的声音。只要能意识到吹气的方法，反复练习，音调就会变得越来越美。看来泷很重视长音，光是练习用的就发了大量的乐谱。<br>此时此刻让叶月陷入苦战的，是运用嘴唇的圆滑音练习。这在必须用一根指头发出各种不同声音的铜管乐器里，算是特别重要的练习。按住的活塞不变，赋予声音变化。这时必须特别注意的是，并非利用嘴唇来改变声音，而是要同时改变口腔肌肉与气息的速度。这个动作似乎难倒了刚开始学习的叶月，只见她苦着一张脸，发出「嗯、嗯」的低吟。<br>「嗯……小绿完全不懂铜管的技巧！」<br>绿辉看着低音大提琴的乐谱，不知道在骄傲什么地说。尽管没有其他拉低音大提琴的社员，所以没有学长姐能指导绿辉，但她依旧能行云流水地遵照泷给她的指示行动，真不愧是名校毕业的学生。<br>「与其在这边没完没了地烦恼，不如先用吹嘴练习，可能会比用乐器先学会喔！」<br>想也知道，突然插话进来的是明日香。她应该正为了升学或就业进行双方面谈才对，为何会突然站在叶月身旁，一副已经准备好要吹奏乐器的样子？卓也露出目瞪口呆的表情。<br>注：双方面谈：同三方面谈，但只有老师对学生。<br>「学姐，你不是在面谈吗？」<br>「那点小事五分钟就搞定了！没有人敢挡住我要前进的路！」<br>「……啊，是这样的吗。」<br>卓也已经失去了反驳的力气，随她高兴地点头附和。<br>「叶月！你还没学会运用嘴唇的圆滑音练习吗？」<br>「啊，还没。」<br>叶月也被她震慑住地猛点头。<br>「那我来示范给你看吧。你先放下乐器，单用吹嘴来吹吹看。」<br>遵照明日香的指示，叶月将低音号放在地板上。低音乐器的放置方法是直接把巨大的号口朝下，立起来。镀金已经掉得差不多了，使得低音号看起来有些寒酸。低音号因为体积庞大，价格也很贵。光是一把低音号的钱就能买好几把其他的铜管乐器，所以通常都是撑到最后才换。<br>「首先，可以只用吹嘴吹出声音来吗？」<br>「啊，可以，是这种感觉吗？」<br>叶月振动着嘴唇。其振动传递到银色的金属零件上，发出「哺！」的一声，不是很好听的声音。「就是这样。」明日香满意地点头，将自己的吹嘴贴在嘴唇上。<br>「试着在这种状态下改变音程看看。」<br>像这样……明日香只用吹嘴吹出音阶给叶月看。她吹的音实在太明快了，令久美子相当惊讶。原来光凭吹嘴就能把每个音阶吹得这么分明啊。<br>「呃，这对我还太难了。」<br>叶月一脸困窘地撇着八字眉。明日香的指导还在继续，久美子再也无法压抑自己内心的欲望，鬼鬼祟祟地将吹嘴贴在嘴巴上。<br>「……」<br>是吹出音阶了，但是距离明日香的程度还差得远。首先，声音太不干净了。大概是吹气的方法有问题吧。不同于明日香优美嘹亮的声音，久美子吹出来的声音整个往下沉。怎样才能吹出像她那么美的声音呢？<br>「吹得很好嘛。」<br>「哇啊！」<br>声音是从背后传来的，害她忍不住惊叫出声。回头一看，只见卓也面无表情地看着她。<br>「中川用那个完全吹不出声音来。」<br>「夏纪学姐吗？」<br>「没错。没有乐器就吹不出来。」<br>「这样啊。」<br>「不过，我也没办法吹得像田中学姐那么好。」<br>卓也说道，缩了缩他那高大的身躯。<br>「后藤学长学多久低音号了？」<br>「咦，我吗？」<br>他愣愣地指着自己。<br>「夏纪学姐和梨子学姐是从高中才开始对吧？后藤学长又是什么时候加入管乐社的呢？」<br>只见他抱着胳膊，陷入沉思，然后以低沉的声线回答：<br>「国一的冬天吧！我离开田径社，加入管乐社。」<br>「你以前是田径社的啊？」<br>「嗯……在那之后就一直吹低音号。」<br>「一直玩同样的乐器不会腻吗？」<br>「不会腻。」卓也立刻回答：「我喜欢低音号。」<br>或许是对自己说的话感到害羞，卓也随即低下头去，圆脸染上淡淡红晕。他的侧脸实在是太耀眼了，久美子情不自禁地移开目光。<br>在重复着合奏、分组练习、合奏、分组练习……的过程中，四月转眼之间就过去了。久美子垂头丧气地望着行程表。下礼拜就是太阳祭了。仔细想想，这是她成为高中生后第一次的发表会。紧接在后的是高中生活第一次期中考。一想到待解决的问题堆积如山，久美子的心情就一路往下沉。<br>「呃，下礼拜就正式上场了，现在要发衣服给大家。」<br>小笠原的声音令久美子回神地抬起头。时钟的长针正好指着十二点。一想到中午以后要在中庭练习，她的心情更加沉重。顶着烈日的练习实在是一件非常痛苦的事。<br>「一年级的新生请过来拿。首先从打击乐器开始……」<br>站在前面的明日香从纸箱里拿出袋子，里头装的大概是衣服吧。大约一周前，一年级新生全部量了身高体重，想必就是为了这个。久美子后知后觉地反应了过来。<br>「真是让人紧张呢！」<br>邻座的叶月双眼闪闪发光，坐在她隔壁的绿辉则以凝重的表情喃喃自语：<br>「要是设计得很土该怎么办？如果要穿上那么土的衣服，小绿会死掉的。」<br>久美子从未听过绿辉以那么严肃的语气说话。看样子她对服装具有超乎常人的执着，与只要有得穿什么都好的久美子完全不一样。<br>「下一个！低音组！」<br>「好，来了！」<br>明日香的声音让三个人赶紧站起来，接过比想象中还要沉重许多的塑胶袋。<br>「是西装外套吗？感觉好热啊！」<br>叶月粗鲁地扯破袋子嚷嚷。一旁的绿辉则是规规矩矩地拿剪刀剪开袋子。久美子找到袋子的开口，硬是用手指撕开。从袋子里露出来的，是黑色运动用敞领衬衫、黑色的长裤、蓝色的西装外套，以及绑着蓝色蝴蝶结的黑色软呢帽。<br>「从中午开始的练习请换上这套衣服，进行预先练习。尺寸不合的人请自己主动提出来。」<br>「好……」组长的交代只换来有气无力的回答。<br>绿辉与服装大眼瞪小眼了好一会儿，终于小声地说：「还好，勉强可以接受！」<br>「那么，女生留在音乐教室，男生就把隔壁三班的教室当成更衣室吧。赶快换好衣服，拿着乐器到中庭的大松树前集合。」<br>「好的！」<br>众人齐声回答明日香的指示，然后一口气手忙脚乱了起来。男生们逃也似地冲出音乐教室，女生们则大方地脱下水手服。学姐们穿着内衣走来走去，久美子下意识避开目光。<br>久美子穿上分到的衣服，尺寸非常合身，身体一下子就接受了第一次穿的制服。裤子边线缝着亮片，随着动作反射出闪闪发亮的光芒。正式上场的制服包含鞋子，设计得简单大方的黑色运动鞋上也有着蓝色的线条。<br>「怎么样？好看吗？」<br>叶月一脸得意地走过来。这套衣服的确非常适合肌肉匀称的她。一旁的绿辉边戴帽子边嘀咕：<br>「啊，真好！小绿也想抱着低音大提琴绕场。」<br>「别开玩笑了，再怎么样都不可能吧。」<br>「我知道啦。」<br>绿辉鼓着脸颊。低音大提琴不是可以边移动边演奏的乐器，所以她不能参加这次的游行，只能混在没有经验的新生里，在前面边走边挥手。<br>「久美子，记得要仔细地涂上防晒油喔。」<br>葵从背后提醒她。她把萨克斯风挂在脖子上，看起来非常有模有样。<br>「果然还是会晒黑吗？」<br>「会晒黑，会晒黑。而且还只有脸。」<br>「那我可不要！」<br>「一定要小心才行。还好是长袖的服装，不会晒到手臂。」<br>葵微笑着说。突然间，她背后传来一阵怪声。<br>「哇啊啊啊啊啊！学姐好可爱！简直是天使！」<br>所有人的视线全都聚焦在声音来处，只见小号组的二年级生吉川优子正夸张地握紧自己的拳头。即使集教室中所有人的视线于一身，她却丝毫不以为意，热切的视线紧盯着香织看。<br>「是、是吗？」<br>香织或许是不好意思，脸颊微微地泛红。羞怯地扬起眉眼看着优子的她，的确就像是翩然降临在人世间的天使，楚楚可怜的模样让周围的人全都相形失色。已经换好衣服的明日香整个人扑上去。<br>「我的天！真不愧是香织！超可爱的！」<br>拥有傲人身材的低音组组长，她盛装打扮的样子与可爱正好成对比，一头长长的黑发扎成一束，身影也超越女性化的范围，几乎是个帅哥了。她英姿飒爽的模样对正需要男人滋润的女生似乎具有致命的吸引力，眼神追着明日香的可怜学妹个个脸颊红润，纷纷冒出「让我死了吧！」或「抱紧我！」这种莫名其妙的台词，倒地不起。明日香与香织，这两个人光是站在一起就能成为一幅画。<br>「明日香也很好看喔。」<br>「呵呵呵，谢啦。」<br>明日香对双颊飞红的香织回以得意的微笑。香织静静地伸出手，一把抓住眼前少女的手臂。蓝色的西装外套被她抓出深深的绉褶，明日香工整秀丽的侧脸不经意地转向香织。<br>「……怎么啦？」<br>明日香不解地问道。这个动作让香织倏地睁大双眼，然后一口气胀红了脸，惊慌失措地放开手。<br>「没、没什么！」<br>「是吗？」<br>明日香略略地勾起唇畔，拍了拍香织的肩膀。接着她环视教室一遍。<br>「好！已经换好衣服的人开始移动！」<br>明日香的指示让众人手忙脚乱地开始移动。香织一瞬间露出有话想说的眼神，看着明日香，但终究什么也没说。<br>「唔！好重……」<br>平常温柔敦厚的梨子，唯独这天也露出了苦不堪言的扭曲表情。挂在她身上的巨大乐器正是游行的特产：苏沙号。要边移动边演奏的话，平常用的低音号实在是太重了。苏沙号就是为了减轻演奏者负担、应运而生的产物。北宇治高中的苏沙号是由纯白的玻璃纤维强化塑胶制成，和低音号比较起来，能够更平均地将负担分散在肩膀上，感觉会比较轻。但是苏沙号也重达将近十公斤，所以在边演奏边前进的时候，依旧是非常沉重的负担。<br>「轮到我参加游行的时候，也要背上这东西吗？」<br>叶月在旁边看得脸色发白。一旁的绿辉则是兴高采烈地挥舞着蓝色和红色的旗子。负责拿这种旗子的人称为旗手。<br>「好久没当旗手了，不知道行不行。」<br>「咦，不是只要挥手就行了吗？」<br>久美子的问题令绿辉有些难为情地抓了抓脸颊。<br>「小绿也是这么听说的，可是又被拜托了当旗手。这次的旗手只有我和长笛的学姐两个人，要互相配合应该不是件太困难的事。」<br>「小绿，你还要当旗手吗？真是太厉害了。」梨子佩服地说。<br>「真的没有什么是你不会的耶。」<br>「嘿嘿，小绿被夸奖了。」<br>绿辉开心地绽放出满脸笑意。夏纪从她背后走来，一副懒散的模样，揽住叶月的肩膀。<br>「谜之舞步学会了吗？」<br>「谜、谜之舞步吗？」<br>「这么说来，以前也提到过这件事。」久美子说道。<br>「就是这件事。」夏纪频频点头，「北宇治高中的特产，谜之舞步！让一年级的初学者在太阳祭跳这种舞步，是北宇治高中的惯例。」<br>「哇，听起来很辛苦呢。」<br>久美子已经有演奏乐器的经验了，所以完全不用参与夏纪口中的谜之舞步，正式上场的时候只要边吹奏乐器边前进就行了。<br>「听清楚了。」夏纪以乐不可支的表情开始向一年级生说明这次的队形，「这次因为要边走边指挥，所以泷老师不出马。首先，走在最前面的是由明日香学姐担任的鼓乐队组长。」<br>「鼓乐队组长是什么？」叶月问道。<br>「是指行进乐队的指挥者，也就是我们社团的代表。她要站在最前面，挥舞着仪杖，带领队伍前进。」<br>鼓乐队组长通常是整合整个乐队的人，必须指导整个乐队才行，因此以选出不管在技术还是人格上都表现优异、而且有人望的人物最为理想。就这点来说，明日香一点问题也没有。虽然说一点问题也没有，但是……<br>「……鼓乐队组长不是应该由小笠原社长来担任吗？」<br>久美子的问题让梨子的表情蒙上一层阴霾。<br>「因为小笠原学姐的心理素质不够坚强，不适合做这种事。」<br>「可是她却当了社长？」<br>叶月不可思议地歪着脖子问。梨子不知所措地搔搔头。<br>「嗯，对呀。其实大家是希望明日香学姐当社长的，但是明日香学姐好像不喜欢这种差事，听说就连副社长一职最初也是拒绝的，是被拜托得没办法了，才心不甘情不愿地接下。」<br>「小绿可不这么想，因为明日香学姐实在太有领袖风范了。」<br>久美子也赞成绿辉的意见。那个人绝对是站在众人之上的典型。仿佛是看穿久美子的想法，夏纪发出笑声。<br>「适不适合与喜不喜欢是两回事吧？小笠原学姐的社长明明就当得很好，但每次都拿来跟明日香学姐比较也太可怜了。」<br>夏纪说完，不以为然地耸耸肩，剪得短短的头发遮住了耳朵。<br>「接续刚才的话题……」她又开始继续说明：「首先由两位旗手走在最前面，然后是鼓乐队组长，稍微拉开一段距离之后才是铜管。对了，铜管是由长号打头阵喔！因为要是走在他们前面，头会被长号刺到！铜管与木管之间是鼓类等打击乐器的集团。你们看过把太鼓挺在肚子上的人吧？那些人就是所谓的鼓类成员。」<br>夏纪说到这里，指着正在准备的打击乐队。只见学长姐正在指导抱着小鼓或大鼓的人打法。<br>「一年级的初学者跟在木管后面，一面挥舞拉拉队拿的那种彩球，一面表演谜之舞步。」<br>结果听了半天还是不知道谜之舞步是什么。大概是听到一半就失去兴趣了，只见绿辉神采奕奕地挥舞着旗子。叶月继续缠着夏纪，让夏纪盛大地叹了一口气。视线前方是优子，刚才那个二年级生。她一定是非常仰慕香织吧，像只忠犬似地在她身边打转。<br>「优子学姐很喜欢香织学姐呢！」叶月喃喃自语。<br>「就是说啊。」夏纪意味深长地笑了。<br>「开始练习了！」<br>明日香的声音让众人全都站了起来。才从树荫底下往外跨出一步，阳光立刻刺痛肌肤。在乐器上反射跳跃的光线肆无忌惮地在视线范围内到处乱窜。聚集在中庭的社员将近有八十人。像这样所有人聚集在一个地方，便能清楚地感受到管乐社壮大的规模。<br>「首先从一年级的舞步练习开始，请负责跳舞的人站成一排。」<br>在她的指示下，一年级的初学者鱼贯地在中央排成一排。今年有二十八个一年级生，其中有十个是初学者。<br>「舞步就跟之前教你们的一样。重复着右前回来、左前回来的动作。手则是轮流上面一次、下面一次。」<br>「是。」<br>一年级生齐声回应小笠原的指示，明日香负责鼓掌打拍子。<br>「那么，这边则是行进的练习。正式上场那天要在太阳公园里绕行一圈……所以大概有一公里左右。我想会非常辛苦，但是请不要忘记笑容！」<br>「好的！」<br>「那就先列队吧。」<br>在明日香的一声令下，队伍自然成形。久美子排在夏纪旁边。少了明日香，粗管上低音号只剩两个人。排在她们后面的是卓也和梨子。苏沙号的巨大号口似乎阻碍了前方的视野。<br>「接下来先在中庭绕圈。」<br>明日香一个人站在有段距离的地方，用力地开始拍手。<br>「五、六、七、八。」<br>众人闻声，同时抬起右脚。大腿高高地举起，保持直立的姿势，配合打击乐器的节奏开始前进。前排与后排。社员们一面前进，一面注意着不要让队形歪掉。一旦开始前进，吹嘴的位置就会跑掉，声音也会上下震动。像这样实际走过一遍就很清楚了，坐着吹和边走边吹根本是天壤之别。不同于合奏的时候，一点风吹草动都会让音乐变得荒腔走板。由于声音是靠空气传导的，后排和前排听到的太鼓节奏会不同。防止因此而产生的跑调是鼓乐队组长的任务，但是光顾着走路，无法一直看着明日香的方向。抱着粗管上低音号的左手也因为疲劳而开始不受控制地发抖。<br>「今天先从走路开始！不要随便停下脚步！」<br>明日香的训斥令久美子在内心发出哀号。<br>第二十三届太阳公园音乐祭。久美子凝视着写在宣传手册上的文字，再一次深深地叹了一口气。她坐在巴士里，社员的对话从四面八方传来。<br>「哇！看到了吗？刚才四叶幸运草的计程车开过去了！」<br>绿辉出神地注视着窗外，拼命地拉扯久美子的衬衫。她真的是高中生吗？久美子按住隐隐作痛的太阳穴，想象自己是幼稚园老师，笑着回答：「那真是太好了呢！」<br>或许是满足于她的反应，绿辉放开久美子，再次巴着窗户不放。<br>太阳祭的开始时间为九点，社团活动也因此提前集合。由于太阳公园的会场离北宇治高中很近，不用花太多时间坐车。打击乐器及低音号等大型乐器前一天就放上卡车了，当天几乎没有其他工作要做。不过，光是换衣服、梳头发、检查队形，回过神来，时间已经所剩无几了。<br>「那就赶快上车吧！」<br>遵照社长的指示，众人依序坐上巴士。巴士的座位没有硬性规定，所以位子定下来以前会上演一些钩心斗角的戏码。想当然耳，平常都是以奇数行动的小团体会有一个人落单，他们为了跟大家一样确保自己也有人同行，会组成两人团体。剩下的学生虽然假装不在意，但为了不让自己身上烙下孤独的烙印，会东张西望地寻找其他的对象。以为感情很好的朋友却和别人坐在一起、或者是原本应该顺利相邻的偶数小团体却被辅助席拆散，在这些看起来根本算不了什么的日常风景中，隐藏着错纵复杂的肥皂剧。久美子每次看到这种画面，都不得不承认自己真的是学生。<br>注：辅助席：日本的巴士在两排座位中间的走道上会有一排可以收起来的折迭式座椅。<br>「今天也要加油喔。」<br>才刚坐上巴士，泷立刻以置身事外的口吻说道，附赠满脸的笑容。就连这种时候，他的微笑依旧爽朗得无懈可击。美知惠在他旁边抱着胳膊打瞌睡。<br>「久美子，你听过〈Can’t Buy Me Love〉的歌吗？不是改编成管乐队的曲子，而是披头四的原曲。」<br>大概是窗外的风景看腻了，绿辉抓着久美子的手臂问道。陷入沉思的久美子一时半刻反应不过来，「什么？」地小声反问。<br>「我，是，说，披头四的原曲！」<br>「不，我没听过。」<br>「怎么会没听过呢？那么好听的歌！小绿最喜欢披头四了。因为爸爸很喜欢他们。」<br>「哦，这样啊。」<br>「久美子最好也听一下喔，真的非常好听！」<br>绿辉说完，开始哼起自己的大提琴部分。<br>「比赛的时候再一起演奏吧。」<br>久美子如此回答，绿辉依旧哼着歌，只是加深了笑意。她的歌声轻泻在摇晃的巴士里。然而，细致又优美的旋律还没传到任何人的耳朵里，就被毫无意义的喧闹声盖过了。<br>下了巴士，现场已经人山人海，到处都是观众和演奏者。换好衣服的久美子等人三步并成两步地跑向载乐器过来的卡车。其他高中已经在绿色的草皮上开始准备了，长音的乐声从四面八方传来，大概是在调音吧。<br>「好的，先卸下打击乐器来！至于小号或单簧管这些自己带乐器来的人请不要急着准备，先等乐器全部下车以后再开始。」<br>社员们遵照明日香的指示，默默地搬下堆在车上的乐器来。苏沙号为什么要做成这么奇妙的形状呢，要是有把手的话，就容易搬运多了。久美子尝试各种不同的拿法，一面在心里思考着这些无关紧要的事。<br>把乐器全部搬下车以后，社员们的行动一口气加快了。大家一起打开装乐器的盒子，拿出自己的乐器。绿辉则拿着旗子，找同样担任旗手的学姐讨论事情。叶月捧着彩球，正在练习舞步。无事可做的久美子抱着金色的粗管上低音号，吹了一口气。<br>「一起加油吧！」<br>梨子露出已然精疲力尽的表情，靠过来说。要拿着巨大的苏沙号实在太辛苦了，但是看在旁观者眼中，情绪会整个被带动起来。没有一丝污点的纯白，与深蓝色的服装相互辉映。<br>「你再不赶快调音就没时间了。你瞧，我还带了调音器过来。」<br>夏纪抱着上低音号走过来。手里拿着粉红色的调音器。<br>久美子连忙拿好乐器。吹出声音的同时，皱着眉头的夏纪告诉她音准过高或过低。每次都要把管子拔起来又插回去，但总算是调整成稳定的音程了。<br>「再过一会儿，立华就要来了。得赶快移动，把场地让给他们才行。」<br>「立华高中吗……」<br>久美子低喃。凡是在京都玩管乐的人，没有不知道立华高中的。他们是私立的名校，管乐比赛、游行音乐祭……在各式各样的大场合都保持着光辉灿烂的纪录。他们也经常接受电视的采访，所以即使是对管乐社没什么兴趣的人也都听过立华高中的威名。<br>「你知道吗？大家都称立华高中为『水蓝色的恶魔』。」<br>「水蓝色的恶魔？」<br>以全部都是女生的集团名称来说，实在是颇为吓人的名号。<br>「对呀！」梨子心有戚戚焉地解开久美子的疑问，「因为他们总是满脸笑容地蹦来跳去。最好亲眼见识一下他们的现场表演。我认为那才是全国水准。」<br>「那群人根本是披着人皮的怪物，我是说真的。」<br>能让夏纪说到这个地步倒是挺稀奇的。在电视上看过好几次他们的演奏，但还没亲眼看过现场表演。运气好的话，今天就能听到他们的演奏了。又多了一件令人期待的事。久美子悠哉地想，冷不防有个小号的声音穿透了众人的喧闹声，清澈透亮的美丽音色响彻云霄。肯定是丽奈正在调音，不会错的。想到这里，久美子突然发现一件事，周围明明人声鼎沸，为何能这么清楚地听到她的调音呢？<br>久美子的疑问出乎意外地随即得到解答。因为大家全都停止吹奏，就连其他学校的学生，也都对丽奈行注目礼。会场上呈现异样的沉默。丽奈本人是否察觉到这一点呢？还是假装没发现呢？只见她以满不在乎的神情再次吹响了小号。<br>「那女生是什么来头？吹得真好。」<br>「哪所高中的？」<br>「那件蓝色的外套……我记得是北宇治。」<br>「什么，吹得这么好的学生怎么会去那种学校？真是太可惜了。」<br>「正所谓空藏美玉，真是暴殄天物啊！」<br>「她至少也该选择一下自己要念的高中嘛。」<br>就连久美子都能听见他校学生窃窃私语的谈话内容。丽奈的表情依旧文风不动，淡淡地吹着长音。三年级生望着她的视线，不知道为何特别锐利。久美子偷偷地看了一眼小笠原的方向，她正六神无主地四下张望。或许是看不下去了，明日香啪啪啪地拍了几下手。<br>「好了，大家注意！差不多该移动了！」<br>「是！」<br>她的话让刚才的气氛一下子烟消云散。众人开始手脚俐落地移动。真不愧是明日香，非常懂得如何操控气氛。<br>「抱歉啊，明日香，都怪我不中用。」<br>小笠原对明日香说悄悄话。平常都是挺得笔直的背，唯独此时此刻有些畏缩。可靠的副社长咧嘴一笑，从唇缝间露出雪白的牙齿。<br>「你在说什么，我什么也没做啊。」<br>「不，可是……」<br>「这种小事根本不足挂齿，你只要思考今天正式表演的事就行了。」<br>她发出爽朗的笑声，轻轻地拍打小笠原的背。<br>「明日香学姐，我想跟你讨论关于今天的队形……」<br>「哦？了解，我马上过去。那么晴香，待会儿见了。」<br>明日香说完，潇洒地转身离去。她那换上表演服的背影比平常还要可靠几分。小笠原一直盯着她的背影，然后深深地叹了一口气。<br>「……这下子，根本分不清谁才是社长了。」<br>小笠原自暴自弃的声音实在太微弱了，夹杂着自嘲与焦躁，听起来好像快要哭出来了。久美子远远看着比自己大两岁的高年级生，事不关己地在心里想着。<br>「我很期待各位的演奏喔。」<br>「你们这群家伙，要是敢不好好表演，后果自己看着办啊。」<br>领受了顾问与副顾问爱的鞭策，北宇治高中管乐社前往规定的场所整队。这次的太阳祭一共有十六组团体参加，各自以一定的间隔依序经过同一条路。顺带一提，北宇治高中是从前面数过来第五组，而立华高中则排在最后面。北宇治的演奏一结束就马上赶过去的话，或许还能看见立华高中的演奏吧。<br>「今天是怎么了……感觉比平常还紧张。」<br>排在后面的卓也脸色铁青地说，他的表情确实比平常僵硬。夏纪哈哈大笑。<br>「当然，因为我们很认真地练习过了嘛。」<br>「从我加入这个社团到现在，这还是第一次和大家这么努力地练习呢！」<br>梨子感慨万千地点头附和。的确，练习量不是开玩笑的。泷给他们的计划表当然不用说，但真正在精神上造成压力的，还是合奏。<br>「那位老师，真的非常变态耶。」<br>久美子的自言自语让卓也用力地点头如捣蒜。<br>「真的很变态。」<br>「在能驾驭以前就只能一直一直重复着同一个小节，我都觉得自己快死了。而且他对音程是不是太苛求了？根本听不出差异的地方也一直紧咬着不放……」<br>「没想到泷老师是那种人。」<br>去年的顾问多好相处啊！梨子心有余悸地回忆着过去美好的时光。<br>「啊，开始了。」<br>夏纪的叮咛让大家回到现实。明日香举起仪杖，太鼓伴随着哨声敲响节奏，演奏开始了。久美子移动脚步，留意着不要破坏队伍的整齐，向前跨出右脚。<br>游行很快乐。体力上虽然苦不堪言，但也很开心。久美子将身体交给节奏，跟着队伍前进。虽说泷的指导很严格，但是全体社员都明白那并不是毫无意义。原本各自为政的演奏终于变得整齐，每种乐器都能发出非常美妙的声音。或许是透过基础练习抓住了诀窍，音程也变得稳定了。由于泷的指导无微不至，他们的演奏才会进步神速。尽管他是非常优秀的教练，却因为不甘心的情绪作祟，以至于无法老实地肯定他的能力。<br>「好厉害！」<br>「北宇治还挺有一套的嘛。」<br>「走在最前面的那个人，长得超漂亮的！」<br>「这所高中有这么厉害吗？」<br>每听到一句来自于周围的欢呼，脑内就会生出某种灼热物质，让久美子的情绪开始飘飘然。漂浮在热流里的思考与理性分道扬镳，飘向某个遥远的远方。脚明明像灌了铅一样重若千金，心情却一点也不累，甚至想永远这么走下去。<br>音乐还没有结束。一旦来到乐谱的终章，就又回到最初，一再地周而复始。根本不需要在脑海中追逐乐谱上的音符，因为身体已经记住了。身后传来排山倒海的欢呼喝采。是因为小鼓意气风发的表演吗？他们每个鼓点都敲在节拍上，连一厘米的拖拍都没有，动作整齐画一地击出复杂的节奏。当这个部分告一段落，社员们挥手示意，温暖的掌声如雨点般落下。小号的主旋律接棒继续演奏。低音并不起眼，但是这样就好了，这就是低音的乐趣所在。久美子为自己已经累得不听使唤的身体加油打气，挤出剩余的力气。由于必须一直撑住上低音号，左手已经没有知觉了。尽管如此，她也不想结束。好快乐！<br>这一路到底是怎么走来的？明明已经没有记忆了，唯有轻飘飘的感觉支配着久美子的身体。目的地逐渐进入视线范围内。明日香的仪杖举得比之前都要高。久美子强迫自己抬起起已经举不起来的大腿，总算是走完全程了。<br>演奏结束后，社员们迅速地开始收拾乐器。要是一直塞在终点，会给其他团体造成困扰。泷一脸云淡风轻地对满身大汗、累得半死的社员们说：<br>「乐器都上车了，接下来到下午三点是自由活动的时间。当然也可以休息，只是我认为考虑到夏季大赛的事，还是去听其他团体的演奏比较好。尤其是立华高中，是在去年的全国比赛中拿下金奖的强校。没听过他们演奏的一年级生，请务必前往鉴赏一下。」<br>对这句话反应最大的莫过于绿辉。<br>「久美子，快点快点！再拖下去就看不到立华高中的演奏了。」<br>她的双眼闪闪发光，挽着叶月和久美子的手臂。<br>「不用这么着急吧？」叶月汗流浃背地咕哝。<br>「不行！」绿辉像只松鼠似地鼓着脸颊，「非看不可！小绿今天的努力就是为了这个！」<br>「为了这个？」<br>「没错！」<br>她都说得这么没有商量的余地了，当然不能拒绝。久美子和叶月被绿辉拖着往观众席移动。与刚才北宇治游行的时候比起来，人数明显变多了。肯定都是来看立华高中的。<br>「就快要轮到他们了！」<br>绿辉心花怒放地大声嚷嚷。明明才刚挥着旗子跳来跳去，她的体力到底是从哪里生出来的呀？久美子撇下一旁已经灵魂出窍的叶月，目光也投向游行的队伍。<br>「来了！」<br>绿辉尖叫道。水蓝色的集团从对面逐渐走近，尽管她们与队伍还有一段距离，却已经能清楚听见演奏的音乐。乐器发出的声音宛如笔直的子弹，撕裂空气，从久美子的耳边掠过。钹热闹的乐音翩然降落在欢呼声里。<br>「是〈起锚歌〉！真是首帅气的曲子！」<br>绿辉兴高采烈地说。感觉在哪里听过的这段音乐，是一九○六年，美国海军中尉查尔斯·齐默尔曼作曲的进行曲。<br>立华高中管乐社的服装非常可爱，一贯的水蓝色，连身洋装式的制服很清爽，与绿色的草皮相互辉映。终点就在眼前，明明已经走了将近一公里，成员依旧以满脸的笑容前进，脸上完全看不见一丝疲劳的神色。他们的身影的确很符合水蓝色的恶魔这个封号，蹦蹦跳跳地演奏，真是名不虚传。在队伍前进的同时，拿着木管乐器的人蹦来跳去，铜管乐器则将号口左右移动。最令人敬畏的是，尽管身体晃动得这么剧烈，演奏却一点也没有乱掉。究竟要累积多少练习，才能表演成这样呢？久美子不由得凝视着他们的脸，猜测他们是否有什么秘密。<br>「咦？」<br>这时，她出乎预料地与其中一位成员对上眼。<br>「那不是梓吗？」<br>梓是久美子国中时代的同学。当时吹长号的她，现在还是演奏同一种乐器。<br>「认识的人？」<br>绿辉转过头来问她。<br>「嗯。」久美子点头，边朝立华高中挥手。梓笑眯了双眼，很开心地摇晃着乐器。她看到了吗？虽然不敢确定，但久美子决定这么想。<br>「哎呀，真是吓了我一跳，没想到会在这种地方遇到你。」<br>太阳祭结束，社团活动也解散以后，久美子与梓约在国中时代两人经常相约的JR宇治站会合。梓似乎非常中意车站仿自平等院凤凰堂的外观，拿着手机从各个角度拼命拍照。车站的南口放着很大的茶壶，那其实只是一个邮筒。梓连邮筒也十分中意，这里简直成为了她连按快门的圣地。<br>「原来梓去了立华啊。」<br>「对呀，我是为了管乐社才去的。虽然超级斯巴达教育的。」<br>梓舔着在茶坊买的抹茶霜淇淋笑道。久美子也回以一笑，盯着自己买的焙茶霜淇淋。早知道还是应该买抹茶口味。自己这种优柔寡断的性格总会在这种时候悄悄地探出头来。<br>「可是啊，北宇治也进步很多耶，跟去年完全不一样。」<br>「或许是因为顾问换人了吧。」<br>「不盖你，真的进步好多，巴士上都在讨论强敌出现了。」<br>「立华高中才厉害吧。」<br>「那是当然的啊！因为是立华嘛。」<br>椊引以为傲地说道。在努力与结果的背书下，她对母校有绝对的自信。这令久美子好生羡慕。久美子垂下眼帘，舔着霜淇淋。<br>在那之后，两人相对无言地沿着河畔散步。夕阳已然西下，原本火红炽热的太阳缓缓地与街道融为一体，只剩下红色残渣还依依不舍地缱绻在蓝色天空的脚边。白茫茫的月亮朦朦胧胧地浮现在天边，暗示着夜幕已然降临。<br>「久美子，你怎么没去念南宇治高中？」<br>梓问道。这个问题来得太过于突然，久美子慢了一拍才理解这句话的意思。<br>「我反倒想问你，为什么认为我该去念南宇治？」<br>「因为北中的人几乎都会去念南宇治嘛，我还以为久美子也去了南宇治。」<br>梓说到这里，停下脚步。溶化的霜淇淋滴落在草地上。<br>久美子笑着回答：「选择高中的理由有很多喔，像是成绩、距离。」<br>「南宇治还比较近，成绩也差不多。」<br>「嗯，或许是这样没错。」<br>遭到反驳，久美子沉默以对。梓还在等她的下一句话。明确的答案。<br>「……没有特别的理由，」久美子搔搔头，埋下这样的开场白，「我只是想重新开始。」<br>「重新开始？」<br>梓侧着头。在路灯的照亮下，宇治川表面闪烁着斑烂的粼光。水面美得令人屏息，但久美子不知道水面下又是怎么情况。有什么在笼罩着夜色的水中蠢动，不管那是什么，都不是久美子该知道的事。<br>「我只是想有个新的开始，想去没有太多熟人的高中，才选了北宇治。」<br>如此而已。久美子不置可否地微笑。她不太喜欢说出自己心里想的事，因为遭到否定的时候会很受伤。<br>「嗯。」梓点头，「这样啊。」<br>不知何故，这么笑着说的她看起来竟有种如释重负的感觉。视线顺着还残留几分孩子气的柔软轮廓线落在脖子上。衬衫领口隐约可见的锁骨、隔着布料也能看出胸前的起伏。眼前的少女虽然还有几分稚气，但也确实往大人的世界靠近了。留下久美子一个人，还在原地踏步。<br>「久美子也考虑得很多呢！」<br>「考虑得很多是什么意思？」<br>「抱歉、抱歉，我还以为你又是因为被谁说动才决定要念哪一所高中的。」<br>梓露出极为爽朗的笑容，把最后一口霜淇淋塞进嘴里，伸了个大懒腰。<br>「下次见面的时候，应该是在比赛的会场上吧。」<br>「应该是吧。」<br>「国中的时候未能如愿……但愿高中能去成。全国大赛。」<br>「嗯。」<br>虽然觉得没什么希望，但还是希望能去成。久美子微微一笑。<br>「梓的话肯定去得成的，毕竟是立华嘛。」<br>「说得也是。」<br>梓不客气地勾起嘴角，露出胜券在握的笑容。但这个表情随即出现了变化，细致的睫毛上下颤动着，仿佛想起什么似地，发出「啊！」的一声。<br>「这么说来，丽奈在你们高中吧？」<br>「嗯，有什么问题吗？」<br>「那家伙为什么会在北宇治？」<br>又是这个问题吗。想起白天的对话，久美子情不自禁地皱起眉头。丽奈的确是很优秀的演奏者，或许在北宇治高中的管乐社是委屈了她的天分，但是也不用当面对她说吧。<br>可能是感觉到久美子不开心了，梓急着摇头。<br>「别误会，我只是听说立华高中曾经以免费入学的方式邀请过她。」<br>「因为丽奈很聪明嘛！」<br>「应该也拿到管乐社的推荐了，但不晓得为什么，直到开学都没看到丽奈。我一直觉得很奇怪，没想到她在你们学校。」<br>梓说到这里，微侧臻首地表示不解。<br>「那家伙为什么不来立华呢？如果真想玩管乐，肯定是我们立华比较好啊。」<br>「这倒是……」<br>久美子也感到费解了。丽奈的事越想越充满了谜团。那家伙到底在想什么？为什么会来北宇治高中呢？<br>「那就一起加油吧！」<br>梓说完，挥挥手。久美子也向她挥手道别。久别重逢的同学看起来不知为何有些成熟的感觉。</p><h2 id="第三章-甄选，你回来啦"><a href="#第三章-甄选，你回来啦" class="headerlink" title="第三章 甄选，你回来啦"></a>第三章 甄选，你回来啦</h2><p>黄金周结束后，身为学生的本分，也就是读书时间又开始了。期中考前一周，所有社团活动都要暂停。久美子全速运转起平常没怎么在用的脑筋，好不容易战胜期中考。发回来的考卷分数比平均值稍微多了一点点。嗯，还可以，虽然也算不上好。<br>「各位，期中考辛苦了。」<br>期中考结束后的第一个假日。齐聚一堂的社员全都以凝重表情注视着泷的脸。他们的脸上都充满了藏不住的不安。<br>「……期中考结束后，到暑假之前的重大活动就只剩下期末考了。」<br>久美子真希望他别把考试当成活动似地罗列。一想到期末考的事，忧郁的心情变得更严重了。久美子不由自主地苦着一张脸。<br>「我们北宇治管乐社直到接下来的比赛以前，将不会参加任何活动。因此，各位可以尽情地练习。」<br>久美子心里有股不祥的预感，果然让她料中了，泷从口袋里拿出一张皱巴巴的纸。<br>「写在这张纸上的，是今年度指定曲的清单。」<br>「指定曲？」小笠原提心吊胆地问。<br>「没错。」泷看起来很开心地点点头。<br>在全国大赛前举行的管乐比赛中，如果是A部门或大编制的乐团，必须演奏指定曲与自选曲共两首曲目。参加比赛的人要从指定曲中选出自己喜欢的乐曲，在会场上表演。人数有规定，高中生要控制在五十五个人以内。演奏时间也有规定，指定曲和自选曲加起来，必须在十二分钟内演奏完毕。超过十二分钟的话，就会失去参赛资格。这十二分钟的制约远比想象中严峻。全国大赛中不时可以看见因此失去参赛资格的团体，是颇为绑手绑脚的比赛。<br>「我不清楚你们过去是怎么决定曲目的，但今年由我和松本老师决定指定曲和自选曲，所以先向有其他想法的人说声对不起。」<br>说是这么说，但泷看起来没有半点歉意。<br>「那么，今年的曲目是哪一首？」<br>明日香的眼睛都亮了。泷卖关子地噤口不言，然后才慢慢地吐出一口气说：<br>「今年的指定曲是堀川奈美惠的〈娥眉月之舞〉，自选曲是〈东海岸风情画〉。」<br>话虽如此，但是这两首歌是什么样的曲子，依旧一点概念也没有。看来不只久美子毫无头绪，其他的成员们也都以茫然的表情拍着手。<br>「〈娥眉月之舞〉！老师还真有一套呢！」<br>明日香大概是这间教室里唯一理解乐曲的人，兴奋地站起来，脸颊上燃烧着两团红霞。<br>「一提到堀川奈美惠，她可是出生于京都府，考上京都府立艺术大学的作曲系，从京都府立艺术大学毕业的新锐作曲家呢！创作出交响作品、管弦乐、管乐等等，活跃的领域十分广泛，是目前炙手可热的女性作曲家，对吧？她的作品主要还是以细致的旋律与壮阔的编制最吸引人，尤其是法国号的部分，简直棒呆了。低音的和声也很美妙！我早就觉得今年一定要吹〈娥眉月之舞〉了！还有……」<br>「田中同学，你能喜欢这首曲子真是太好了。」<br>泷毫不留情地打断明日香行云流水的演说。后者似乎还在兴头上的样子，握紧拳头，继续缠着坐在隔壁的香织滔滔不绝。<br>「接下来是很重要的事。」<br>泷的视线在教室里转了一圈。<br>「今年的管乐社成员一共有八十一个人，其中十位是初学者，所以实际能上场比赛的只有剩下的七十一名成员。但A部门最多只能容许五十五个人出赛，所以人数怎么样都会多出来。」<br>众人倒抽一口气。只有五十五个人能参加A部门的比赛，自然就会有人无法参加。泷微笑地接着说：<br>「因此，我决定在期末考的前两天进行甄选。」<br>甄选。最先对这个单字出现反应的是三年级的学生。不管还在窃窃私语的一年级生，他们站了起来，率先对泷提出抗议。<br>「老师，我们以前都是按照年级的顺序来决定出场成员的。考虑到长幼有序，有经验的一年级去B部门不是理所当然吗？」<br>管乐比赛不只有A部门，还有以分部或都道府县为单位、小学部门或小编制的部门等等，亦即所谓的B部门，以及又称为合同部门的C部门，都会举行比赛。虽然无法参加全国大赛，但是包括人数或预算有限的团体在内，只要是有意参加比赛的管乐社几乎都能参加。若是人数众多的学校管乐社，通常都会拆成A部门和B部门，各自参加比赛。北宇治高中管乐社过去也都分成A部门和B部门参加比赛。<br>「可是，这样不是很不公平吗？」<br>泷的笑容依旧凝结在脸上。<br>「一年级也有很多努力的成员，不看他们的努力，单凭年龄就决定出赛成员，我觉得太过于野蛮了。」<br>「可是我们一直以来都是这样决定的。」<br>「但现在的顾问是我吧？为什么要把过去的作法扯进来？」<br>他的反驳让三年级一时间哑口无言。<br>「不用想得那么复杂喔！只要三年级表现得比一年级好，就什么问题也没有了……不是吗？」<br>真是低级的手法啊，久美子心想。听到这种说法，三年级也只能闭嘴了。因为要是提出反对意见，就等于承认自己的实力不如一年级。<br>「请问，要怎么甄选？」香织小心翼翼地举手发问。<br>「我现在就发下乐谱，请大家回去练习。指定曲与自选曲都要进行考核。还有……」他接着说：「独奏的部分也以甄选的方式决定，请各位做好心理准备。」<br>这下子，教室终于骚动了起来。独奏是由单独一个人所进行的演奏，亦可说是乐曲中独立的部分。这个部分由谁负责演奏，有许多种决定方法，但是在这所学校里，一向是由高年级的学生优先吹奏。泷的发言等于是颠覆了这个规则。不以年级来决定独奏的话，就连一年级也有机会打败三年级，争取到独奏的宝座。<br>香织不安地看了丽奈一眼。丽奈似乎没注意到她的视线，只是目不转睛地直盯着泷看。<br>「A部门的人数限制以五十五个人为上限，所以若是我认为水准还不足以参加A部门的人，将会自动移到B部门。结果可能会连五十五个人都不到，请大家好好加油，不要让事情变成那样。」<br>「然后，这是甄选之前的计划表。」他边说边分发下来的，是跟上次一样，密密麻麻写满了功课的行程表。久美子不禁看得脸色发青，时间抓得未免也太紧了，光看就令人头晕目眩。<br>「这也太夸张了……」<br>就连明日香也忍不住呻吟。周六日几乎都被社团活动塞满了，假日也很少。对于要准备考试的三年级来说，肯定会成为相当沉重的负担。想到这里，想起葵的事，久美子蓦地抬起头来。她打算怎么办呢？几乎同一时间，葵也举起手来。<br>「请问，我可以发言吗？」葵说道。<br>「什么事？」泷侧着头反问。<br>葵的视线一度落在自己手中的那张纸上，然后深深地吸进一口气，用细致的手指把略带灰色的纸揉成一团。<br>「我要退社。」<br>「咦？」小笠原发出错愕的惊呼声，讶异地睁大双眼。<br>「理由是什么？」<br>泷询问的语气里不再有平日的温和。面对顾问严肃的表情，葵也抿住嘴角。<br>「我想专心准备考试。但是，如果继续社团活动，可能会考不上第一志愿。我从以前就一直很烦恼，如果等到甄选结束才说，会给大家造成困扰。既然如此，我想不如现在就退社。」<br>葵学姐，请不要退社。萨克斯风组的学弟妹们全都以难过的表情喃喃自语。从他们的反应可以看出葵在萨克斯风组里的人望。<br>「……这样啊。」<br>泷垂着眉眼说道，似乎很伤脑筋地让脸颊包在大大的掌心里，大大地叹息。接着仿佛为了整理自己的情绪，一股作气地挺直背。<br>「我明白了。改天再进行正式的手续，请你星期一来教职员室一趟。」<br>「好的，麻烦老师了。」<br>「不麻烦。既然是你自己决定的事，就请坚持到底。考试要好好加油喔。」<br>葵对泷的加油回以：「谢谢老师。」并深深地行了一个礼。<br>沉默了好一会儿之后，葵抬起头来，脸上的表情豁然开朗，但是看起来似乎又有些寂寥。她拿起挂在桌上的书包，就这么走出教室。萨克斯风组的一年级生里已经有人在哭了。她的手放在门把上，再次回头，视线笔直地望向明日香。但明日香只是眼睛眨也不眨地注视着葵，眼神里没有半点情绪。对于主动求去的社员，就连一丝不舍的感情也不给。葵倏地露出一抹浅笑，这次真的再没有半点眷恋的样子，走出教室。<br>冷不防，一股冲动涌上久美子的心头。不能就这样任由那个背影离开。近似焦躁的情绪又有点像是义务感。大腿从椅子上弹开。大脑告诉久美子，那是自己站起来的声音。<br>「小葵，等一下！」<br>身体自顾自地采取行动。仿佛被人推了一把，久美子冲出音乐教室。背后传来叶月阻止自己的声音，但久美子决定假装没听见。<br>「葵！等一下！」<br>在久美子赶到前，已经有人先出现在葵的身边了。是小笠原。大概比久美子更早冲出音乐教室吧。只见她上气不接下气的，就连裙子掀起来也没发现，只是执意挡住葵的去路。<br>「等一下啦。」<br>「……」<br>葵困惑得眉头都挤在一起了。久美子偷偷摸摸地躲到柱子后面，小心不要被她们发现。总觉得现在不是自己能搅和进去的气氛。<br>「你要退社吗？」<br>「嗯。」<br>「为什么？」<br>「刚才不是也说过了吗？我要准备考试。」<br>葵说着说着，视线飘开了。小笠原死盯着她看，抓住她的手臂。<br>「要是练习太辛苦，去B部门不就好了吗？」<br>「这样对拼命练习的人太失礼了。」<br>「那至少也参加定期演奏会吧。三年级都是在那之后才退社的。努力撑到那个时候嘛。」<br>「办不到。」<br>「为什么？」<br>「因为我……」<br>葵的表情很痛苦。两人份的影子筛落在雪白的走廊上。窗外阳光灿烂，唯独这里有些昏暗。棒球社的吆喝声从操场上传来，感觉就像来自某个遥远的世界，唯有这个空间与全世界隔着一层纱，两个少女几乎淹没在肉眼看不见的薄纱里。<br>小笠原不肯移开视线。于是葵低下头去，仿佛为了逃避她的注视。<br>「我其实没有那么热爱管乐社。」<br>葵咬紧下唇，似是极力不让声音从喉咙的缝隙漏出来，红晕爬上她艳丽的脸颊。<br>「我其实早就想停止社团活动了。」<br>这种社团活动，讨厌死了！咬牙切齿的台词令小笠原一口气哽在喉咙里，逃也似地一步、又一步地退后。这次换葵抓住她的手臂。<br>「你还记得去年的事吧？」<br>「我……」<br>「尽管如此，却还厚颜无耻地说要进军全国，这种话，我说不出来。为什么大家都能不在乎呢？我搞不懂。明明去年把那群人攻击成那样。」<br>「那是因为……」<br>「我已经撑不下去，受不了了。我没有权利说出会拼命努力这种话，你也是吧？」<br>面对葵的质问，小笠原什么也没说，她扎成一束的长发左右摇曳。<br>葵静静地吐出一口气，然后粗鲁地甩开小笠原的手。小笠原没有反应，双眼无力地望向自己的脚尖。<br>「这是个好机会。不管怎样，要准备考试是实话，总之我都必须退出社团。」<br>「我可以走了吗？」葵冷淡地丢下这句话，又开始往前走。她的背影没有任何留恋，所以社长才没有权利阻止她。<br>小笠原一动也不动，并没有追上她。<br>「小葵！」<br>久美子不由自主地出声呼唤。突然从柱子后面冒出来的人影让葵大吃一惊地回头。<br>「久美子……你怎么会在这里？」<br>「因为小葵说要退社……」<br>她会以为自己在偷听吧。久美子感到无地自容，连一句话也讲不完整。葵轻轻地叹了一口气，嘴角微微地勾勒出一抹笑痕。<br>「你是在担心我吗？谢谢。」<br>刚才还冷冰冰的语气急转直下，嗓音变得十分温柔。小笠原慢慢地抬起头，视线捕捉到久美子。<br>「黄前同学，现在还在开会吧，你怎么会在这里？」<br>这句话让葵稍稍地笑眯了眼。<br>「这点晴香不也一样吗？社长怎么可以待在这种地方，快点回去。」<br>「话是这样说没错……」<br>「久美子也不能给其他人添麻烦喔！赶快回音乐教室吧。」<br>这句话虽然带着宠溺，但很明显是拒绝的意思。层层糖衣包裹住她的真心话。小葵，你到底在想些什么？换成平常，应该能轻易问出口的问题，如今却卡在喉咙深处说不出来。<br>「那我走啰！」<br>葵只说到这里，这次真的从两人面前离去。隔着深蓝色的水手服，也能看见她纤细的身体线条。随着裙摆的每一次晃动，隐约可见白里透红的大腿。她的脚步没有半点迟疑，留在原地的久美子只能看着她的背影渐行渐远。<br>葵离去后，现场一片寂静，只剩下她和从刚才就一动也不动的社长。久美子不晓得该怎么办才好，视线不知所措地左顾右盼。小笠原抬起头来，小小声地吐出一句低喃。<br>「……果然。」<br>久美子的耳朵没有忽略她的低喃。<br>「我果然不是当社长的料。」<br>她说完这句话，一屁股坐在地上，把自己的头发抓得乱七八糟，然后就垂头丧气地一声不吭。从披在肩上的黑发间，可以看见她细致雪白的颈项。是被虫叮了吗？只见光滑的肌肤表面有道微微肿起的红色痕迹。<br>「……学姐？」<br>久美子戒慎恐惧地出声。但她依旧低着头，抓着裙子的指尖微微颤抖。<br>「学姐，你没事吧？」<br>久美子小心翼翼地把手放在她的肩膀上。小笠原还是不肯抬起头来。<br>「要是由明日香来当社长，或许葵就不会退社了。」<br>「才、才没有这回事呢。」<br>安慰的声线高了八度，这也是没办法的事。这句听起来很有距离感的台词，令小笠原更加无地自容。<br>「不用安慰我了，我心里有数。我跟明日香不一样，是个没用的人，像社长这么了不起的职务，一开始就胜任不了。大家都是这么想的：为什么不是明日香，而是这家伙当社长。」<br>「才、才没有人这么想呢。」<br>「不用勉强否认，这种事我自己再清楚不过了。」<br>小笠原的声线变得越来越低沉。<br>「小笠原学姐也有很多明日香学姐没有的优点啊，我们这些学弟妹都看在眼里。」<br>「那你说来听听啊！」<br>还以为她会感动得痛哭流涕，没想到竟换来意外的反应。<br>「这、这个嘛……」<br>久美子的嘴角僵掉了。<br>「像是学姐很照顾我们，对我们很温柔。」<br>「还有呢？」<br>「还有……像是会跟学弟妹打招呼，很温柔，不是吗？」<br>「还有呢？」<br>「呃……啊！对了，还有那个，有时候会带东西来给我们吃，真的很温柔！」<br>「除了温柔就没有其他的优点吗！」<br>小笠原杏眼圆瞪地站起来。那股狠劲令久美子不由自主地往后退。她的眼睛又红又肿，原本就已经很小的眼睛变得更小了。<br>「温柔什么的，根本是用来称赞一无是处的人的台词吧？别以为我不知道！」<br>被小笠原指着脸说话，久美子只能在困惑里挣扎，这个人原来是这种性格啊。因为小笠原学姐的心理素质不够坚强。脑海中不经意地掠过梨子说过的话。<br>小笠原先是恶狠狠地瞪着她，过了几秒钟之后，她的视线坠落地面。低垂的睫毛微微地颤抖着。刘海在潮红的脸颊上制造出一片阴影，阴影里隐藏着忧伤。原本开朗又随和的表情，此刻已变得扭曲而狰狞。<br>「反正像我这种人……像我这种人……」<br>「你又在说这些废话了吗？」<br>突然有双手从小笠原的背后探了出来，十根手指头抓住她的肩膀。突然遭到熊抱的冲击让小笠原的身体摇晃了一下。久美子目瞪口呆地看着忽然冒出来的人影。<br>「明、明日香学姐？」<br>「嗯？什么事？」<br>明日香从小笠原的肩膀上若无其事地探出头来。「咦？」小笠原大吃一惊地回头，发现明日香的脸近在眼前，「呜哇！」地发出奇妙的尖叫声，「你、你什么时候来的？」<br>「嗯？就刚才。因为你们迟迟不回来，我来找你们。」明日香扬起嘴角说道。<br>「所以呢？你们在这种地方聊什么？我还以为你们是为了阻止葵退出社团才跑出来的。」<br>「小、小葵……不是，是葵学姐已经先回去了。」<br>「那该不会是那个，晴香一直缠着久美子不放？」<br>「我才没有缠着她！」<br>小笠原面红耳赤地反驳。明日香用手指抵住嘴角，从喉头发出愉快的声响。<br>「不行啦，晴香，你得改掉这种情绪不稳定的坏毛病才行。毕竟你是社长嘛。」<br>「少啰嗦！」<br>小笠原闹起别扭来，脸转向一边。明日香附在她的耳边低语：<br>「可是，就连这种毛病我也喜欢。」<br>明日香露出不怀好意的笑容，小笠原一口气胀红了脸。<br>「别、别说傻话了！」<br>「还装，你明明就很高兴。」<br>「才不高兴！」<br>虽然尽全力否认，但是有眼睛的人都看得出来，那只是为了掩饰害羞。看来社长的心情已经平复了。久美子松了一口气。<br>明日香的手熟稔地绕过小笠原的背。<br>「好了，该回去了。」<br>「我知道啦！」<br>在她的催促下，小笠原迈开脚步。真不愧是明日香学姐，真的很会安抚人呢。久美子置身事外地想着这件事，跟在她们后面。<br>明日香说了什么，引来小笠原的反驳，看到小笠原的反驳，明日香又笑了。两人和乐融融地说着话。小笠原又恢复平常的表情，刚才那副狼狈的模样不晓得消失到哪里去了。明日香在一旁开心地笑眯了眼，只有一瞬间，往这里投来淡漠的眼神。那视线实在太过冰冷，害久美子的心脏差点跳出来。美好的友谊，少女们楚楚动人地相视微笑，多么赏心悦目的光景。然而其中却隐约浮现出带有令人胆战心惊色彩的冲突感。<br>「久美子，怎么了？」<br>明日香见久美子还呆站着不动，回过头来问她。久美子扯着嘴角，挤出暧昧的笑容，用力地左右摇头。<br>「没、没什么。」<br>「是吗？那就好。」<br>明日香笑着说，再次往前走。久美子按住扑通扑通跳个不停的心脏，沉默地跟在她们后面。<br>「斋藤学姐真的要退出社团吗？」秀一靠着座位的墙壁问。<br>久美子等人回来以后，社团活动很快就结束了。久美子怀着闷闷不乐的心情，一个人伫立在车站的月台上，是秀一过来问她要不要回家了。这么说来，这还是第一次和秀一一起搭电车。久美子的指尖在绿色的座椅表面滑动，耸耸肩。<br>「我猜是真的。小葵是认真的。」<br>「就连小笠原社长和田中学姐合力都无法说服她吗？」<br>电车匡当匡当地摇晃着前进。切割成四方形的风景由右而左逐渐流逝。秀一把书包放在膝盖上，伸了一个大大的懒腰。久美子静静地垂下眼帘。<br>「明日香学姐……根本没有要说服小葵的意思。」<br>「可是那个人看到你和社长跑出去，就跟着追上去了。我还以为她是去阻止斋藤学姐的。」<br>「并没有，明日香学姐她……」<br>久美子说到这里，倏地噤口不言。明日香学姐在那之后，打算对自己说什么呢？久美子按住自己的额头，脑海中浮现出明日香当时的眼神。在音乐教室目送葵离去时，以及明日香来找她们时的眼神。乍看之下甚至能说是温柔的眼眸，其深处的深处，是看不出任何情绪、冰冷到极致的眼神。不知何故，现在的久美子非常害怕她那种眼神。<br>「田中学姐怎么了？」秀一不解地问。<br>「没什么。」久美子摇摇头说。沉默坠落在两人之间。匡当匡当。匡当匡当。车厢剧烈地摇晃，电车突然紧急煞车。<br>「我啊，」秀一静静地开口。久美子抬起头来，视线投向他。虽然只有一点点，但是从制服里露出来的脖子和国中时代比起来，但线条的确变得比较壮硕了。<br>「我很怕那个学姐。」<br>「哪个学姐？」<br>「田中学姐。」<br>秀一说到这里，脸色有些苍白。久美子吓了一跳，一时半刻反应不过来。<br>「不、不可以喔。不可以在社团里说这种话。要是敢说明日香学姐的坏话，肯定会被大家揍的。」<br>「我知道。那个人很有人望嘛。」<br>「那你干么突然这么说。话说回来，你一开始不是非常尊敬田中学姐吗？」<br>「是那样没错……可是该怎么说呢？那个人，太完美了。」<br>「什么？」<br>出乎意料的答案，令久美子忍不住反问回去。<br>「等一等，那并不是缺点吧。」<br>「关于缺点这件事嘛……你不懂我的意思吗？」<br>「不懂。」<br>久美子说得理所当然，秀一愣住似地抓了抓头发。<br>「你也自己动动脑筋嘛。」<br>「谁叫你说得不清不楚的。」<br>这句话让秀一在眉间打了个死结。<br>「我是说，该怎么说呢，我不喜欢那种『我很完美』的光环。管乐社的人也都太吹捧那位学姐了。」<br>「什么嘛，原来只是见不得别人好啊。」<br>「见不得别人好真是对不起你啊。」<br>他闹起别扭来，把脸转向一边。久美子苦笑着拍拍他的肩膀。<br>「不过，我似乎能明白你的意思。」<br>「咦？」<br>或许是没料到久美子会有这种反应，秀一瞠目结舌地说。<br>「怎样啦。」<br>「没有，我还以为你是田中学姐的亲卫队。」<br>「嗯，我的确很尊敬她没错，她是很了不起的学姐。只是……」<br>久美子说到这里打住。尽可能选择不会太激烈的措辞来表达。<br>「我觉得她不是我们想象的那种人。并非只是温柔又有趣的人，感觉脑子里想的跟我们是完全不同次元的东西。」<br>「像是看的东西也不一样吗？」<br>「嗯，就是那种感觉。」<br>肯定是因为这样，久美子才会害怕她的眼神。因为她眼中的世界与自己眼中的世界差太多了。<br>「或许是这样吧……」秀一喃喃自语。从车窗外照射进来的光线描摩出他的轮廓。鼻子底下还残留着淡淡的胡碴。指节突出的手指不安地在书包上反复地摸来摸去。久美子看着看着，不知为何竟有点喘不过气来，下意识地垂下眼帘。<br>匡当匡当。匡当匡当。电车的声响在耳边回荡着。<br>「久美子，你是不是正在和吹长号的冢本交往？」<br>不以为意地滑过耳边的问句，让煎蛋从筷子上掉落，掉在桌上，变成蛋黄与蛋白的残骸。<br>「……什么？」<br>久美子总算是挤出这两个字来回答。在此之前，脑浆噗滋噗滋地滚烫着，以最快的速度全力运转。冢本是谁？想了半天，终于把这个名字联想到秀一身上。<br>「我是说，你和冢本是不是在交往？」<br>叶月和绿辉的双眼亮晶晶地等待着她的回答。<br>教室里闹烘烘的，所有人都在聊天。拼起靠窗的座位一起吃午饭，已经成了她们的习惯。绿辉的午餐是从面包店买来的高级三明治，叶月是在便利商店购买的饭团，久美子则吃着母亲做的便当。原本一如往常地聊着日常琐事，话锋突然一变，丢下刚才那颗炸弹。<br>「没有，我们没有在交往。」<br>「什么嘛，真没意思！」<br>绿辉回以这么一句，一旁的叶月如释重负地松了一口气。<br>「怎么突然提到这个话题？」<br>绿辉眉飞色舞地回答久美子的问题。<br>「没什么，因为小绿和叶月搭电车的时候，不小心看你们一起回家的画面了。」<br>「社团活动那天？」<br>「没错，没错。」<br>绿辉天真无邪地点头，然后看了身边的叶月一眼，对她露出毫无心机的一笑：「太好了呢！」<br>「有、有什么好的！」叶月面红耳赤地反驳。<br>无视她的抗议，久美子问绿辉：「什么东西太好了？」<br>「嘿嘿，那个啊，小绿看出来啰！」<br>只见她不晓得在开心什么地挺起胸膛。一旁的叶月惊慌失措地抓住绿辉的手。<br>「等一下，小绿……」<br>「叶月她啊，喜欢上冢本同学了！」<br>这句话让久美子暂时停止呼吸，脑子里一片空白，找不到接下去的话。<br>「你干么说出来啦！」<br>「咦！有什么关系！」<br>两人似乎没有注意到她的反应，你一言我一语地拌起嘴来。<br>「不过，小绿总算是放心了。还好久美子和叶月不会演变成三角关系，真是太好了。」<br>「你还说！我又没有喜欢上冢本同学……只是有点在意而已。」<br>「那就是喜欢的意思吧？呼呼呼，全都瞒不过小绿的法眼喔！」<br>绿辉似乎真的很乐在其中。是因为国小、国中都念女校吧，她对恋爱话题相当敏锐。<br>「问题是，你们为什么会一起回家呢？冢本同学和久美子是好朋友吗？」<br>「啊，嗯。我妈和秀一他的母亲从以前就是好朋友。从我国小三年级搬来这里以后，两家人就一直保持来往。说穿了就是所谓的青梅竹马啦。」<br>「原来是这样！好好噢，小绿也想要青梅竹梅！」<br>「现在开始交一个？」<br>「青梅竹马是强求不来的！」<br>绿辉不依地鼓起腮帮子。久美子用手指戳了戳她的脸颊，绿辉更闹脾气地撅起了小嘴。叶月在一旁怔忡地看着久美子的脸。<br>「叶月？」<br>这句话似乎让叶月的元神归位，全身僵硬地「欸？」了一声。<br>「怎么了？」<br>「没、没什么。」<br>叶月拼命摇头，脸上明摆着不是没什么的表情。或许是她的表情给了绿辉什么灵感，绿辉脸上浮现出不怀好意的恶作剧笑容。<br>「叶月正在烦恼，该怎么约冢本同学去参加县祭。」<br>「小绿你够了！为什么老是要多管闲事呢。」<br>「嘿嘿，有什么关系嘛。」<br>所谓的县祭，指的是每年六月五日到六日凌晨，由县神社举行的祭典。深夜会把沿路的灯火全都关掉，在黑暗中举行名为梵天渡御的仪式，所以又称为「暗夜奇祭」。<br>「话说回来，你要和谁一起去？」<br>叶月羞红了脸反问，绿辉嫣然一笑。<br>「小绿啊，要和妈妈一起去喔！我们每年都会一起去。」<br>「和、和妈妈一起去？」<br>「对呀！小绿和妈妈的感情最好了。」<br>绿辉笑得阖不拢嘴，让久美子瞬间无力。这个年纪还和母亲一起去逛祭典，是久美子无法想象的行为。叶月似乎也有同感，刚才的气魄不晓得消失到哪里去了，投降似地挥挥手，「真败给你了。」<br>「久美子要和谁一起去呢？」<br>「嗯……太麻烦了，所以不会去吧。」<br>这个回答让绿辉瞪大了双眼。似乎是为了表达不满，她「砰」地一掌拍在桌面上。<br>「难得的祭典，不去岂不是太可惜了？」<br>「会、会吗？」<br>「嗯，太可惜了。一定要去！啊，不介意的话，要不要和小绿还有妈妈一起去？」<br>久美子慎重地拒绝了绿辉自以为是好主意的提议。<br>泷选的自选曲〈东海岸风情画〉是由尼格尔·赫斯作曲的吹奏乐曲。作曲者将前往美国东海岸感受到的印象谱成旋律，由纽约及其近郊的地区为题材的三首组曲构成。第一乐章为庇护岛，第二乐章为卡茨基尔山脉，第三乐章才是纽约。全部演奏的话，肯定会超过规定的限制时间，所以泷删掉了整个第一乐章、第二乐章和第三乐章的一部分。第二乐章的主力果然还是短号的独奏。小号演奏者也要身兼短号的演奏。原本圆筒管的小号和圆锥管的短号是完全不一样的乐器，但是演奏方法大同小异，调性也差不多，所以现代多被视为小号的衍生乐器。这次的独奏大概也是由小号组的人来吹。这个乐章描写卡茨基尔山脉平缓却威仪十足的姿态。接下来，第三乐章则表现出曼哈顿市中心的喧嚣，这首曲子最大的亮点莫过于会让人联想到救护车的警铃声。警铃在乐曲的尾声响起，进入最后的高潮。如同音乐剧的某个场景，充满了故事性与华丽感。<br>「真是首帅气的曲子啊！」<br>分组练习的教室里，明日香陶醉地盯着乐谱，一脸恍惚地喃喃自语。在她的背后，卓也正以狰狞的表情将数字写在乐谱上。定睛一看，那是〈科帕卡巴纳〉的乐谱。<br>「学长，你在做什么？」<br>久美子的问题让他慢条斯理地抬起头来。<br>「……我在帮加藤同学写上按键编号。」<br>「叶月要吹这首曲子吗？」<br>「好像是。B部门好像要在美知惠老师的指挥下吹奏〈科帕卡巴纳〉。因为打击乐器的人太多了，应该会有很多人去B部门。考虑到乐器的编制，我认为是很聪明的选曲。」<br>夏纪从后面鬼鬼祟祟地探出脸来。她的视线前方是正与卓也大眼瞪小眼的〈科帕卡巴纳〉乐谱。低音号与上低音号都是低音乐器，所以基本上谱面都是F音的记号。日常生活中几乎完全不会用到音符，所以平常的演奏令他们吃尽苦头。不过，一旦习惯以后，只要看到音符就知道是哪个音，但是对于才刚开始学的叶月恐怕不是一件容易的事，所以卓也才替她把音阶标记在乐谱上。<br>「久美子，你好厉害，居然能吹这样的乐谱。」<br>叶月正在接受梨子的指导，边说边靠近久美子。在她身后，绿辉正一如往常地默默地进行基础练习。<br>「还好，因为上低音号和低音号不太一样。严格来说，我也没吹过这样的乐谱。」<br>「不是都差不多吗？同样都是低音乐器。」<br>「照你这么说，低音大提琴也是低音乐器啊！你也称赞小绿一下嘛！」<br>绿辉不依地闹脾气，于是梨子对她微笑。<br>「小绿真的很厉害呢！」<br>「嘿嘿，谢谢夸奖。」<br>得到想要的赞赏，绿辉一脸得意地再度展开练习。少女小巧的指尖拨动琴弦。令人想要翩然起舞的低音，轻柔地落在教室里。<br>完成基础练习的久美子浏览着分到的乐谱。〈娥眉月之舞〉的特色在于一开始的小号主旋律与后半段的低音部分。粗管上低音号、低音号、低音大提琴……平常属于后勤部队、一向不引人注目的乐器，只有这个时候将沐浴在聚光灯下。这首曲子让低音在整首乐曲中有很多表现的机会，尤其是上低音号的乐谱，更是令人眼花撩乱。没有太长的休止符，扣掉一开始小号的主旋律部分，几乎是从头吹到尾。指定曲采五首中任选一首的机制，和其他四首比起来，这首曲子具有压倒性的难度，而且又很长。说得不客气一点，这所学校还配不上曲子的水准。<br>……真的能搞定这首曲子吗？<br>久美子的眉间下意识地打了个死结，脑海中浮现出前几天泷说过的话。<br>「这次之所以故意选这首指定曲，就是因为各位觉得这首曲子很难。正由于很难，我期待大家都能认真面对。如果是简单的曲子，大家很可能会不知不觉掉以轻心。指定曲与自选曲，只要能完美地吹好这两首曲子，全国大赛就不再是梦想。」<br>全国大赛吗……<br>久美子在内心自言自语，悄悄地叹了一口气。明日香正在离她稍远的座位上，一脸云淡风轻地吹奏着难以处理的部分。明明是初次练习，她的演奏却没有丝毫破绽，只怕是原本的能力就跟大家不一样。她对上低音号的造诣之深，只要看到乐谱，就能马上再现谱面的音乐。<br>确定自己已经能吹出看似简单的部分之后，久美子紧盯着主旋律部分的连音看。一下子就要依指定的节拍吹奏，对自己来说还太难了。久美子拿出节拍器，设定成放慢很多的节拍。喀嚓，喀嚓。竖起耳朵来倾听缓缓震动的拍子，久美子用放慢三倍的速度来演奏连音。首先要理解手指和嘴巴的动作，习惯之后再慢慢地加快速度，力求接近原本的节拍。重复，再重复。只是全神贯注地演奏同一个小节。这么一来，即使再困难的乐谱，手指头也会慢慢记住。久美子很喜欢这种原本办不到的事变成办得到的感觉。<br>「你吹得很好嘛！」<br>耳边传来一把唐突的声音，令久美子停下演奏的动作。回头一看，夏纪正直勾勾地凝视着她，久美子还不习惯这么直接的赞美。<br>「谢、谢谢。」<br>久美子的脸渐渐热了起来。为了掩饰，她轻轻地低下头去。镀金的乐器表面倒映出夏纪扭曲的脸孔。<br>「你说你是从什么时候开始吹上低音号的？」<br>「从国小四年级加入铜管乐队开始。」<br>「那今年已经是第七年啰，难怪会有差别……」夏纪说道，脸上浮现出自嘲的笑容。差别是指什么？久美子的脑子里充满问号，但夏纪只是咯咯咯地开怀大笑。<br>「没什么，不知道也没关系。」<br>在那之后又过了许久，久美子才终于理解她那句话是什么意思。<br>绿辉去补习班，叶月要跟别的朋友回去，所以久美子一个人走向校门口。宣布社团活动告一段落的钟声响起，校园里一口气变得兵荒马乱起来。久美子洗干净吹嘴，把乐器收进盒子里。打道回府的学生们纷纷离去后，整座校园又陷入寂静。尽管夏天的脚步将至，太阳下山的时间比平常晚了许多，但一个人走在阴暗的校舍里，依旧让人心里有些毛毛的。<br>「哦，你也现在才要回家啊？」<br>从鞋柜里拿出自己的平底鞋时，背后突然传来声音。回过头一看，秀一正对她招手。他也正要回家吧。手里提着长号的盒子。<br>「呃，我想稍微在家里练习一下。」<br>大概是发现久美子的视线，秀一有些害臊地搔着头。<br>「指定曲练得如何了？」<br>「还过得去吧。目前的课题是紧接在小号后面的音程还对不太起来。上低音号呢？」<br>「这还用说吗，后半段的主旋律太困难了。」<br>「那里真的很复杂呢！」<br>秀一笑着以粗鲁的动作把鞋子塞进鞋柜里。他穿的鞋比久美子大多了。这么天经地义的事，却让久美子胸口有股莫名的悸动，呼吸突然变得好困难，久美子不由自主地垂下眼帘。<br>「甄选，能通过吗？」<br>「天晓得。长号的人数众多，我可能会去B部门。」<br>「长号目前有几个人？」<br>「七个人。有一个是初学者，所以有六个人要参加甄选。」<br>「那真是太难为你了。」<br>低音组的人数原本就不多，所以大概能全部及格吧。指定曲是以低音为主的曲子，增加人数还有可能，无法想象减少人数的情况。<br>穿过正门，通往车站的是平缓的马路。从铺着柏油的马路上可以看到配置得整齐画一的茶园。一整面绿意盎然的风景对宇治市民而言，并不是什么太稀奇的风景。<br>「我啊，觉得选择这所学校真是太好了。」<br>「为什么突然这么说？」<br>「没什么，只是在分组练习的时候突然想到。」他笑着说。<br>「起初的确是令人火冒三丈的社团活动没错，最近大家都开始认真练习了。」<br>「是泷老师造成的效果吧？」<br>「这当然也是，但不只有这样。」<br>不冷不热的风从两人之间吹过。只见他有些不知所措地笑了笑，视线落在右手的乐器盒上。<br>「太阳祭的时候，大家都称赞我们了，说北宇治变得好厉害。那时真的好高兴，感觉自己真的变厉害了。」<br>他露出不好意思的笑容。「就是说啊。」久美子也表示同意。<br>「充满了进步的真实感受。」<br>「对呀，真的好开心。感觉只要努力就能办到。」<br>夕阳沉没在地平线以下。阳光的残渣依依不舍地在天空中留下抓挠的伤痕。微微晕开的红色溶解在蓝色的天空里。四周已经笼罩在夜色里路灯一盏一盏地亮起，仿佛是在拒绝黑暗的入侵。从路灯下笔直延伸出来的白色影子，捕捉住秀一的身影。<br>「或许真能打入全国大赛也说不定。」<br>久美子只能凝视着秀一这么说的侧脸。或许是察觉到她的视线，秀一害羞地垂下眼帘。<br>「什么？」<br>「没什么……嗯，说得没错，真想去参加全国大赛呢。」<br>「绝对不要再重蹈国中的覆辙了。」<br>秀一用力地伸直手臂。那天的光景不经意地在久美子的脑海中苏醒。<br>「我很不甘心，超级不甘心的。」<br>那个时候，丽奈哭了。久美子没哭。她是真的认为金奖也不错。但是，丽奈可不这么认为。她是真心以为能打进全国，真正发自内心想参加全国大赛。<br>「好想变得更厉害喔！」<br>久美子说道。还以为只是小声地自言自语，没想到声音大到整条街都听见了。秀一瞬间露出愣住的表情，随即咧嘴一笑，露出洁白的牙齿。<br>「下次一起练习吧！看是要在河边还是哪里，然后两个人一起去A部门。」<br>「不要，把上低音号带回家的工程实在太浩大了。」<br>「你啊，正常人这种时候应该要会看气氛说话吧！」<br>「我说的都是实话啊。」<br>久美子反唇相讥，拍了他的背一把，发出「啪！」的清脆声响。<br>「不过，如果只是练习的话，我可以奉陪喔。」<br>话明明是自己说的，却不知为何害羞起来，久美子逃也似地加快脚步。距离车站只剩一小段路了。秀一手忙脚乱地追在小跑步往前冲的久美子身后。<br>随着甄选日期一天天靠近，社团的气氛开始变得紧张。每个人都盯着乐谱，几乎听不见聊天的声音。一踏进教职员室里，向泷询问问题的社员都快挤满办公室了。「今年的管乐社好认真啊！」对于训导主任明褒暗贬的讽刺，泷只能苦笑，一句话也答不上来。<br>每次合奏，乐谱上的记号就又多了一点。看着留白逐渐被铅笔的痕迹填满，久美子转身面向乐器。上了年纪、镀金也掉得七七八八的粗管上低音号沉睡在她怀中。久美子将它立在地板上，拿着手帕，站了起来。<br>「绝对没问题的！」<br>久美子一踏进洗手间，就听见熟悉的嗓音。小号组的优子和香织正在洗脸台边说话，没留意到久美子的存在。<br>「可是，再怎么想都是丽奈吹得比较好。」<br>「才没有那种事，绝对是香织学姐吹得比较好！」<br>久美子走进厕所，还是能清楚听见她们的对话。<br>「应该会让丽奈独奏吧？」<br>「怎么可能，那太奇怪了！怎么可以不让三年级独奏。」<br>「就算你这么说……」<br>「独奏一定要是香织学姐才行！」<br>「咚」一声沉重的闷响，似乎是优子在用力地跺脚。<br>「算了，我会尽自己最大的努力。」<br>香织的声音显然没什么活力。「嗯！我会支持你的！」优子的喊声渐行渐远。久美子打开厕所的门，洗手间里已经没有其他人影。<br>社团活动结束后，久美子在洗脸台清洗吹嘴。银色的金属零件沾着水滴，闪闪发光。这么说来，小学的时候，扭开学校的水龙头，流出来的是茶。拿着自己的杯子去水龙头下直接接茶来喝，真是美好的回忆。当她知道这是只有宇治市才有的传统时还吓了一大跳。<br>「嗨。」<br>有人出声喊她，久美子回头张望。大概是长号的分组练习刚结束，秀一手里也拿着吹嘴。<br>「你也来洗吹嘴？」<br>「算是吧。」<br>他只说了这么一句，就闭上嘴巴。「怎么了？」久美子侧着头。于是他在久美子身旁大大地吸了一口气说：<br>「你五号有空吗？」<br>秀一问道，脸色看起来快死掉了。脸色苍白就是这么回事吗。<br>「咦？五号是平日吧？不是要练团吗？」<br>「我不是说这个，我是指社团活动结束后！」<br>「社团活动结束后？」<br>至此，久美子总算理解他要说什么了。<br>「啊，难不成是县祭？」<br>这句话让秀一顿时红了脸。咦？这是什么反应？仿佛受到传染，久美子的脸也开始发热。平常一点感觉也没有的距离，唯独今天似乎特别靠近。久美子压下现在就想转身逃跑的欲望，拼命表现得跟平常一样。秀一依旧低着头，小声地说：<br>「……那个，想说我们是不是可以一起去。」<br>「啊，呃……」<br>可以啊！久美子正打算这么回答的时候，叶月刚好走出乐器室的身影映入眼帘。她体内的热度一口气降至冰点，背后冒出冷汗。<br>叶月她啊，喜欢上冢本同学了！<br>刹那间，绿辉的话掠过脑海。啊，这真是最糟糕的情况了。一思及此的瞬间，久美子的身体已经自顾自地动了起来，一把抓住刚好从眼前经过的人的手臂。<br>「抱歉！我要和这个人一起去县祭。」<br>「……什么？」<br>不高兴的声音从眼前传来，久美子猛然抬起头来，自己抓住的手臂前方居然是丽奈的脸。她大大的眼睛睁得更大了。这家伙在说什么啊？她全身上下都散发出超级不高兴的气场。<br>「什、什么嘛，你要和高坂一起去啊……」<br>「嗯、嗯。」<br>明明是平常绝对不可能出现的组合，秀一却没有半点怀疑地相信了。大概是太紧张，脑筋转不过来吧。<br>「这样啊，那还真是遗憾。」<br>哈哈哈。耳边响起干涩的笑声。丽奈火冒三丈地轮流看着久美子和秀一的脸，却明白事理地没有戳破。<br>「啊，冢本！」<br>叶月从背后跑过来，脸上染着淡淡的红晕。看到她那个模样，久美子的心脏一紧，纠缠不清的情感在胸腔里掀起波涛。为了不被那波涛淹没，久美子用力地抓紧丽奈的手。只见她顿时皱起眉头，但依旧什么也没说。<br>「加藤？」<br>秀一困惑地侧着头。可能是手里空荡荡的，不知道该怎么摆，叶月一走上来便揽住秀一的手臂，古铜色的掌心自然而然地抓紧了他的左手。<br>「我有话想跟你说，过来一下。」<br>「咦，可是，我现在正在和久美子说话。」<br>秀一偷偷地回头看了自己一眼。久美子赶紧在嘴角堆出笑容，用力地握紧了丽奈的手臂说：<br>「我没关系喔！去吧。」<br>他的眼神明显地闪烁了一下。呼吸不过来。秀一再次张开嘴巴，却只能发出气音。无法化成言语的感情从他宽厚的掌心里滑出，散落了一地。久美子深知该怎么挽救这一切，却一动也不动，实际上是动弹不得。<br>「我真的可以去吗？」<br>秀一说道。他的语气听起来有点像是在责怪久美子。<br>「我不是说可以了吗。」<br>久美子撇开视线。染上暮色的空气从窗户的缝隙偷溜进来。逐渐溶化在黄昏的夕阳将走廊染成一片红色。染成红色的空间里，少年逃也似地转过身。<br>「……是吗。」<br>他只丢下这句话，便背对着她。「什么事？」「呃，这里不太方便。」两人的交谈声渐行渐远。男女开心的欢声笑语回荡在楼梯的另一边，久美子只是呆站在原地不动，体温不知不觉地移到掌心的吹嘴上，让吹嘴变得温热。<br>「……这样真的好吗？」<br>丽奈轻声细语地说。这时，久美子终于回过神来放开她。<br>「抱歉，把你卷进来了。」<br>「没关系，我无所谓。」<br>丽奈的表情依旧非常难看。光艳照人的黑色长发披散在她胸前，白色领结淹没在黑色的发丝里。灿若星辰的小号，不解世事地在她怀中散发出闪亮光芒。<br>「所以呢？几点在哪里集合？」<br>「什么？」<br>「县祭。我那天也刚好有空。」<br>「咦！你真的要去吗？」<br>丽奈对久美子的确认嗤之以鼻。<br>「那当然。你在说什么？明明是你约我的。」<br>「是这样没错。」<br>「那就这么决定了！」她嫣然一笑着说。那是自己过去从未见过的表情，久美子忍不住看得出神。丽奈微微眯起眼眸，长长的睫毛上下颤动。这女生真漂亮啊！久美子再一次体会到这个明显不过的事实。<br>县祭当天，就连社团内的气氛也难免有些浮躁。今天几点集合？要不要去看抬神轿？要在哪里放烟火？此起彼落的交谈声听起来相当愉快，久美子不禁认为大家是为了排解平日的积郁，才表现得比平常更加开朗。<br>「学姐要跟谁去？」<br>久美子问从刚才就一直专注地用指尖描摩着谱面的明日香。<br>「和香织一起去。我们今天要约会。」<br>她眉开眼笑地回答。梨子在一旁微笑着说：「好好噢！」<br>「梨子学姐呢？」<br>「我？我嘛……」<br>「肯定是跟后藤吧？」<br>夏纪的声音从旁边插进来，害梨子羞得满脸通红。<br>「等等，你凭什么说得这么笃定？」<br>「我说的是事实啊！你们去年也是两个人一起去的。」<br>久美子下意识地看了卓也一眼。卓也一如往常地在练习指定曲，但是从刚才就失误连连，看样子根本心不在焉。<br>「哇！难不成梨子学姐和后藤学长是一对？」<br>绿辉的双眼闪闪发光。「什么一对不一对的……」不理会梨子的面红耳赤，夏纪用力地代为点头。<br>「对呀，这两人正在谈恋爱。」<br>「咦咦咦咦咦！」<br>真相来得太过于轻易，令绿辉惊声尖叫。<br>「梨子学姐！这么重要的事，你怎么都不告诉我们！」<br>久美子也在内心深处同意绿辉的咄咄逼人，她还以为卓也喜欢的是明日香。<br>「咦，因为，又没必要刻意说……」<br>「那后藤学长也该告诉我们啊！」<br>明日香苦笑着劝戒就快要扑上去的学妹。<br>「好了好了，小绿，别那么生气嘛。这也是没办法的事，谁叫这两个人都很害羞。」<br>「既然学姐都这么说了……」<br>绿辉脸上纵然还有不满的神色，也不情愿地停止逼问。<br>「夏纪要跟谁去？」<br>只见她刻意对明日香的问题耸了耸肩膀。<br>「我今天也要补习。」<br>「三年级的我都去玩了，为何二年级的你要念书？」<br>「因为我爸妈很啰嗦，我也是迫于无奈。」<br>夏纪苦恼地说，然后望向久美子的方向问道：「你呢？」<br>「啊，我要和小号组的丽奈去。」<br>「咦？你不是说你不去吗？」<br>绿辉不解地发难。在她身后的明日香若有所思地摩挲着自己的下巴。<br>「你口中的丽奈，该不会是那个高坂丽奈吧？」<br>「我不知道那个是哪个，但她确实姓高坂。」<br>「久美子，原来你跟高坂同学是好朋友啊。」<br>梨子语重心长地喃喃自语。不知道为什么，她的语气听起来有点像是在同情久美子。<br>「……那从刚才就在发呆的那家伙呢？」<br>夏纪皱着眉头指向叶月。只见叶月抱着低音号，一脸心神不宁地望着窗外，完全是失了魂的模样。<br>「叶月一直是那副德性。」绿辉压低了声线说道。<br>「她今天好像要和喜欢的人去逛祭典，打算在祭典上告白喔。」<br>「哇！好青春啊！光听就觉得嫉妒。」<br>夏纪装模作样地挤眉弄眼。音量其实不小，但叶月一点反应也没有，看样子根本没在听。<br>喜欢的人是指秀一吧。久美子轻声叹息，将注意力从对话中拉开。感觉好不舒服。肚子四周咕嘟咕嘟地冒出浑浊的感情，顺着身体里的血管流窜到四肢。为了让凝聚在指尖的热度冷却，久美子用力地握紧了上低音号。讨厌啦。讨厌。没有明确的原因。就是讨厌。<br>「算了，只要对社团活动没有影响，要谈恋爱还是要交往都是个人自由。」<br>明日香说道，加深了笑意。绿辉好奇地问她：<br>「学姐没有男朋友吗？」<br>明日香不假思索地回答这个问题。<br>「你在说什么，我爱的只有上低音号。」<br>「不要随便敷衍我嘛！」绿辉鼓着脸抗议。明日香很愉悦地调戏死缠烂打的学妹。久美子看着他们嬉闹，内心冒出一个想法。或许明日香并没有开玩笑。<br>与丽奈约好晚上七点在宇治神社前见面。县祭的规模比祇园祭小多了，但是路上依旧有超过六百个摊位鳞次栉比，期间有超过十二万人造访，也算是大规模的祭典。<br>仔细想想，这还是她第一次和丽奈单独出游。国中时代和她是同一个社团，彼此当然认识，但并不是很熟，顶多就只有在学校遇见的时候会稍微聊一下，如此而已。现在回想起来，丽奈总是与他人保持距离。并非她受到孤立，只是不想跟固定的任何人混在一起。这点上了高中以后依然故我，久美子从未见过丽奈与固定的朋友走在一起的模样。<br>「抱歉，让你久等了。」<br>声音从背后传来，久美子转过身去。穿着连身洋装的丽奈正朝她招手。她身上的白色连身洋装充满女人味。自己如果是男生的话，一定会希望女朋友这样打扮。<br>「不、不会，我也才刚到。」<br>久美子边回答，边忍不住垂下眼帘。站在这种美少女身边，总觉得输了一大截。早知道就穿得正式一点来了。久美子低头看着自己T恤加短裤的简单造形，不由自主地叹息。<br>「喂，我才刚来你就叹气？」<br>丽奈在眉间打了个死结。不高兴的表情好适合她。<br>「你就这么在意冢本的事吗？」<br>「才、才没有，我和秀一又不是那种关系。」<br>「不是那种关系……吗？」<br>丽奈朝她射出意味深长的视线，久美子连忙换个话题。<br>「快走吧，你想吃什么？」<br>「不用，我不打算去逛祭典。我最讨厌人多的地方了。」<br>「咦？」<br>「去爬山吧！大吉山！」<br>丽奈指着神社上面的方向说道。这家伙没头没脑地在说什么呀？久美子吓得目瞪口呆。丽奈牵着她的手，冲上阶梯。灯笼的光线照射在她细致雪白的手指上，粉红色的指甲修剪得整整齐齐。<br>「为、为什么要特地在祭典当天去爬山？」<br>「嗯？没有为什么，因为很好玩的样子。」<br>丽奈莞尔一笑。穿过宇治神社，有条通往宇治上神社的石板路。宇治上神社于一九九四年与平等院一起被认定为世界文化遗产。只不过，和平等院比起来，前来造访的人数少得可怜。本殿中有三座神社是现有最古老的神社建筑，似乎是相当珍贵的文化财产。但是看在已经看惯张牙舞爪的现代建筑设计的久美子眼中，甚至觉得有点太朴素了。<br>「我很喜欢这座神社。」<br>丽奈说道，一面从门的缝隙往内窥探。<br>「不觉得宇治神社比较好吗？建筑物也大多了……」久美子接着说，却引来丽奈傻眼的叹息。<br>「久美子真不识货啊！不懂这种古朴之美。」<br>「古、古朴……」<br>「也就是成熟的魅力。」<br>「宇治上神社比较成熟吗？」<br>「感觉得出来吧？这种散发出来的魅力。」<br>「是吗……」<br>经她这么一说，倒也不是完全感受不到它的魅力。久美子的视线游走在一片寂静的神社内。桥的另一头明明挤满了前往祭典的人潮，这边却安静得不得了。这里只有丽奈和久美子。沉默的密度高到令人难以呼吸。毫无理由的焦躁感一点一滴地侵蚀着意识。大家都去参加祭典了，自己到底在这种地方做什么呢。<br>丽奈抓住站着发呆的久美子的手，泰然自若地往前走。她用水蓝色的发圈把平常放下来的黑发扎成马尾。<br>「我不喜欢明亮的东西。」丽奈面向前方说道。<br>「明亮的东西是指？」<br>「像是祭典，就明亮得令人睁不开眼睛。我不喜欢那种东西。」<br>「是吗？」<br>「嗯。因为很烦，所以讨厌。」<br>越往前走，越靠近黑暗。路灯越来越少，眼前一片昏暗。大吉山上没有路灯。不理会愁眉苦脸的久美子，丽奈从皮包里拿出手机。<br>「我就知道会很暗。」<br>她用智慧型手机代替手电筒。手机发出的白光照亮了前路。「我下载了应用程式。」丽奈笑着说，久美子也回以不置可否的一笑。<br>当地人称为大吉山，但这座山的正式名称叫佛德山，海拔一百三十一公尺。从位于总角古迹附近的登山口通往观景台的登山道是一条路很宽、高低差也算平的自然步道，可以欣赏到美丽的风景，因此是很有名的山路。清晨走在这条山路上，经常会与带狗散步的人们擦肩而过。久美子还在上幼稚园的时候，也经常因远足来爬这座山。<br>注：总角：指的是《源氏物语》第四十七帖的篇名〈总角〉。<br>「丽奈经常做这种事吗？」<br>久美子边走边问。丽奈似乎不明白她所指为何，侧着头反问：「这种事是指什么？」<br>「就是指突然来爬山之类的。」<br>「怎么可能，你把我当成什么了。」<br>「我、我想也是。」<br>凉鞋陷进脚里。大吉山虽然是一条平缓起伏的山路，但是穿着有跟凉鞋来走还是太吃力了。<br>「可是啊，偶尔也想做点这种白痴的事呢！」<br>丽奈说道，有点害羞地搔搔头。表情活像是秘密被发现的小朋友。<br>「穿上制服去学校、去社团，然后回家念书……偶尔也想全部抛开这些，买张青春十八的车票，展开漫无目的的旅程。」<br>注：青春十八：由日本JR集团推出限乘车种且限期间的特价周游券。<br>「这个嘛……我想我明白你的意思。」<br>有时候会把自己投射在电视里看到的背包客身上，投身于没有人认识自己的世界里，进行寻找自我的旅行。但这一切都是空想，不曾付诸实行。<br>「就把这个当作是旅行吧。」<br>「规模突然变得好小。」<br>「有什么办法，明天还要上课。」<br>丽奈以理所当然的表情说着理所当然的话，那样子实在很好笑，久美子呵呵地笑了起来。丽奈看了她一眼，然后倏地移开视线。<br>「老实说啊，我从以前就有这种感觉了。」<br>「什么感觉？」<br>「想跟久美子一起出游看看。」<br>「是吗？」<br>「是的。」<br>她看着前方。她今天露出平常被头发遮住、无缘得见的耳朵。薄薄的皮肤血色良好，晶莹剔透。咬下去应该很柔软吧……久美子胡思乱想。<br>「久美子啊，其实性格很差吧？」<br>「什么？」<br>真是太震惊了。从小到大，身边的人无不异口同声地称赞久美子是个好孩子。久美子好温柔啊。久美子好温柔啊。自己是从什么时候开始，想尽办法接近从小听过无数遍的形容词呢？是从什么时候开始追求「自己很温柔」的这个形象呢？<br>「害我好想把你那张好孩子的皮撕下来。」<br>「……你现在是在批评我吗？」<br>「不是批评，我是说我就喜欢你这点。这是爱的告白。」<br>「绝对不是吧！」<br>「你不明白我的爱吗？」<br>「完全不明白。」<br>久美子只明白丽奈欺负自己的时候，表情愉悦极了。在学校里见到的丽奈，与现在站在自己面前的丽奈，明明是同一个人，看起来却完全不一样。<br>「久美子大概不记得了吧。」<br>「记得什么？」<br>两人边走边聊。<br>「国中最后一次比赛的时候，我们说过话。」<br>「哦，我还记得喔。就是丽奈哭了的那次嘛。」<br>「你干么记得别人哭过的事。哎，性格果然很差。」<br>「不不不，会记得这种事很正常吧。」<br>「开玩笑的啦。」丽奈笑着安抚紧张的久美子，「我说我很不甘心的时候，你走过来问我：『你真的以为我们能参加全国大赛吗？』」<br>「咦，我说过那种话吗？」<br>「你说过喔。从此我就觉得这家伙个性很差！」<br>「呃，不，那大概是……我想只是纯粹觉得好奇，所以才问的，并没有其他的意思。」<br>见久美子拼命解释，丽奈展颜一笑。<br>「我知道啦。所以我才开始注意久美子。会在无意识的情况下说出那种话，应该很严重了。」<br>「什么东西很严重？」<br>「性格扭曲得很严重。」<br>「喂，这绝对是在批评我吧？」<br>「我刚才不是说过不是了吗？我说了，我就喜欢你这点。」<br>「少骗人了。」<br>「是真的。」<br>丽奈发出乐不可支的笑声。就快要可以看见观景台了。两人没有一丝犹疑地沿着脚下的路前进。视线不经意地往脚下一看，发现丽奈的凉鞋沾满泥土，带子还在她白晰的肌肤勒出痕迹。<br>「脚不痛吗？」<br>「很痛啊。」丽奈正经八百地回答。<br>「可是，我并不讨厌疼痛。」<br>「哇，这种说法听起来好色情。」<br>「……你是傻瓜吗？」<br>被随便地打发掉，久美子不服气地嘟着嘴。在东拉西扯的一阵乱聊下，总算抵达观景台了。大吉山的观景台同时也是设置在半山腰的休息站，可以将宇治的街道尽收于眼底。<br>「……好漂亮啊！」<br>丽奈抓紧扶手，喃喃自语。<br>人工制造的繁星，点点撒满在仿佛泼上一层深色油漆的世界里。住家的光线、高楼大厦的光线、路灯的光线、车子的光线……这座城市充满了光亮，由上往下看的世界就像是漂浮在空中的地图。那边是平等院，对面是宇治川。目光追逐着熟悉的场所，久美子呼出一口气。<br>「这就是你想看的东西吗？」<br>丽奈轻轻地摇头。<br>「说是想看的东西，有点不够准确。」<br>「什么意思？」<br>面对侧着头表示不解的久美子，丽奈调侃地笑了。从她的唇齿之间，隐隐约约可以看见草莓般粉嫩的红色舌头。<br>「因为我想做跟别人不一样的事。」<br>视线往下移，可以看见正要从祭典回家的人潮。他们成群结队，往同一个方向前进，啃着其实也没多好吃的苹果糖，心满意足地走向车站。稍远一点的地方，一群为了凸显自己出和别人的差异而染了一头其实与他人无异的金发的国中生正在大声喧哗……假的。从这里根本看不见那些。从高处往下看，每一个个体都融解在黑暗里，只能看见没有感情、直立着不动的灯光。<br>「在祭典当天来爬山这么蠢的事，其他人不会做吧？」丽奈说道。<br>「说的也是。」久美子静静地点头。<br>「我认为如果是久美子应该就能明白。」<br>「明白什么？」<br>「这种莫名其妙的心情。」她垂下眼睛。<br>「我明白喔。」久美子回答。此时此刻，秀一和叶月正淹没在那片光的洪水里吧，花纹恐怖的蝴蝶从眼前翩然飞过。久美子小时候还敢徒手抓蝴蝶，到底是从什么时候开始，对蝴蝶产生嫌恶的情绪呢？久美子压抑住想捏死蝴蝶的冲动，微微一笑。<br>「我明白丽奈的心情喔。」<br>丽奈伸出手，白晰的手指轻抚过久美子的脸颊。<br>「我啊，想变成特别的人。」<br>「特别？」<br>「对。我想得到别人的赞赏，不想被视为跟别人一样。」<br>少女的手指无力地落下，雪白的连身洋装随风翻飞。<br>「所以，我才吹奏小号。」<br>「吹了小号就能变得特别吗？」<br>「能。」丽奈毫不迟疑地回答。<br>「所以我玩管乐。我想成为特别的人。」<br>为什么继续玩管乐？这个问题的答案，久美子还不清楚。丽奈轻声地叹息，坐在长椅上，跷起修长的双腿，把自己的掌心放在膝盖上。久美子放开扶手，慢慢地在她旁边坐下。一阵甘甜的香味扑鼻而来。<br>「久美子为什么要加入管乐社？」<br>「为什么呢……」<br>往日的记忆已然模糊，越是鲜明的回忆，越是脆弱不堪。第一次拿起乐器的日子、第一次认识上低音号的日子……自己到底为什么要加入铜管乐队呢？<br>「大概是……因为我姐姐吧。」<br>「你姐姐？久美子，你有姐姐啊？」<br>「嗯，长得一点都不像就是了。」<br>久美子的姐姐参加过铜管乐队。穿着闪闪发亮的服装，吹着长号……对了，所以久美子很崇拜长号。姐姐吹奏的、很威风的乐器。可以伸缩长短、帅气的乐器。因为自己好想吹吹看那个东西，才会加入铜管乐队，想变得跟姐姐一样。虽然最后分配到的乐器是粗管上低音号。<br>「我是因为崇拜姐姐，才加入管乐社的。」<br>「是吗？那你姐姐现在还在管乐社吗？」<br>「没有，国小六年级的时候就退社了。说是要去念私立国中，补习班忙不过来。」<br>从此以后，姐姐就没再参加社团活动了。国中没有，高中也没有。只是每天像颗陀螺似地在家里、补习班和学校这三个固定的地方转来转去。<br>「考试啊……」<br>丽奈露出厌烦的表情。<br>「我们也不能置身事外呢。」<br>「说的也是。」<br>她说到这里，就这么陷入了沉默，大概是在想些什么吧。久美子也闭口不语。无言的沉默，在鼓膜内侧骚动。久美子望着脚底下那片人工的星空，静静地闭上双眼。和丽奈在一起，感觉很轻松。这或许还是她第一次感受到，就算陷入沉默也不会不自在。倚靠着丽奈纤细的身体，久美子伸直脚。手臂与手臂交缠，皮肤与皮肤重迭。她那蒙着薄薄一层汗水的肌肤冷冰冰的，感觉很舒服。<br>久美子在进度表盖了一个章。眼看着红色的章越多，甄选的日期也越近了。她跳上电车的最后一截车厢，在最贴近墙壁的位置坐下，从书包拿出下载了自选曲与指定曲的音乐播放器。<br>放在书包上的手指自顾自地动了起来，按压活塞的动作已经烙印在身体里。久美子蓦地抬起头来，秀一正站在离自己有一段距离的地方。他也戴着耳机，冷不防地扬起脸，视线有一瞬间朝向这边，短暂地相交，只见他马上逃避似地低下头去。从那天起，他就一直是这个样子。<br>秀一在避着久美子。<br>「那丫头是怎么回事？」<br>分组练习时，夏纪指着魂不守舍的叶月，不耐烦地问道。叶月正撑着下巴，凝视着窗外。她不时就大大地叹着气，似乎令学姐不堪其扰，夏纪皱着眉头，坐在久美子旁边的位置上。久美子阖上自选曲的乐谱，转向夏纪。<br>「你知道她怎么了吗？」<br>「我也不清楚。但是绿辉应该知道……」<br>久美子的回答让夏纪望向绿辉的方向。绿辉正拼命地盯着乐谱，察觉到她们的视线，立刻放下弓，蹦蹦跳跳地跑了过来。<br>「学姐，怎么了吗？」绿辉侧着头问她们。<br>「不是我，是那丫头怎么了？从县祭以后就一直是那副德性。」<br>夏纪的问题让绿辉垂头丧气地垮下肩膀。她那无精打采的模样，令久美子和夏纪不由得面面相觑。绿辉一脸难以启齿地扭动着身体，半晌后才下定决心似地抬起头。<br>「好像是……被拒绝了。」<br>天呐！夏纪仰天长叹。一旁的久美子悄悄地呼出一口气，力气突然回到颤抖的指尖。什么嘛，原来是被甩啦，真可怜。久美子心中涌起一股对叶月的同情，自己在脑中低喃的声音，明快得令她一阵悚然。<br>「这种时候发生感情纠纷最糟糕了，会影响到演奏的。」<br>「小绿也安慰过她了，可是完全没用。」<br>绿辉沮丧万分地低着头。这时，梨子和卓也抱着低音号走进教室。<br>「咦，你们聚集在这里干嘛？」<br>「……不用练习吗？」<br>自然而然地靠在一起的两人，令夏纪加深了眉头间的绉褶。<br>「为什么恋爱这种东西，不管是卿卿我我还是不卿卿我我都令人受不了啊。」<br>「学姐，不可以发脾气啦。小绿认为后藤学长和梨子学姐很相配啊！」<br>绿辉红着一张脸说，眼里充满了纯粹的感情。梨子含羞带怯地搔着头。<br>「谢、谢谢。」<br>「婚礼一定要邀请我喔！」<br>绿辉的暴走令卓也面红耳赤。梨子苦笑着坐在平常的座位上，卓也在稍微有点距离的桌子上坐下，翻开指定曲的乐谱。<br>「哎呀！怎么啦？怎么啦？怎么全都挤在这里？赶快来练习吧！」<br>明日香开完三年级的会议，大声嚷嚷地走进教室。正字标记的红框眼镜好像是最近新买的，只见她愉悦地环视教室里一圈，视线停在叶月身上。「怎么了？」就连组长问她，叶月也还是望着窗外。<br>「那丫头好像有什么烦恼，我们正在讨论该怎么办才好。」<br>夏纪头痛地告诉明日香。但是真正设身处地为叶月担心的，似乎只有绿辉。<br>「叶月好像一直很想不开，小绿好担心！明日香学姐，你能不能想想办法？」<br>只见明日香露出清朗得没有一丝阴霾的闪亮笑容说：<br>「嗯……老实说，和我无关！」<br>「你也太老实了。」<br>久美子反射性地调侃她。明日香抱着胳膊，皱了一下眉。<br>「不然要怎么说？因为叶月吹或不吹，都与我无关啊！我也只能叫她赶快振作起来。」<br>「别说这么冷淡的话嘛！我们都是低音组的人不是吗？」<br>明日香对绿辉的抗议露出敷衍的笑容。<br>「反正她肯定会去B部门吧？帮助她对我又没有好处。」<br>她的语气实在太冷淡了，久美子硬生生地吞了一口口水。绿辉大吃一惊地瞪大双眼。夏纪的表情非常难看，一言不发地抱住自己的头。<br>「说什么好处……」<br>「你不这么想吗？要是会对比赛造成影响，我可能还会出手相助，问题是，我为什么要帮因为私人情绪而放弃练习的人？」<br>「可是……」<br>绿辉还有话要说，夏纪强行捂住她的嘴。<br>「说的也是呢！自己的问题要靠自己解决！」<br>拼命挤出应酬式的笑容，实在太不适合夏纪了。绿辉则是还在嘟嘟嚷嚷地抱怨。<br>「知道就好。马上就要甄选了，你们三个也不要净是做一些蠢事，赶快练习。」<br>「好！」<br>「那我去拿乐器了。」明日香只丢下这句话，一如既往地去乐器室拿自己的乐器。夏纪确定组长的身影从教室里消失后，如释重负地松了一口气。或许是嘴巴被捂得喘不过气来，绿辉在一旁拼命挣扎。<br>「哎，吓死我了。」<br>「学姐，小绿快窒息了。」<br>久美子的提醒让夏纪猛地回过神来，赶紧放开绿辉。重获自由的绿辉痛苦地反复深呼吸，这才重获新生地站起来，瞪着夏纪。<br>「你在做什么啦！」<br>「都是你，明日香学姐都气成那样了，你居然完全没有注意到。」<br>「学姐生气了吗？」<br>久美子问道。该说是生气吗……夏纪有些迟疑地将视线望向梨子的方向，但后者装出一副正在专心练习，没有听见的模样。<br>「明日香学姐最讨厌练习时间缩水了，最好不要耽搁到她的时间喔。」<br>「可是，学姐也太过分了吧，那么冷淡。」<br>「那个人原本就是那种人。」<br>夏纪的脸上浮现出夹杂着自嘲的笑容，梨子和卓也都大惊失色地看着夏纪。尖锐的紧张感在教室里流窜，残留在舌尖的粗糙情绪，大概是不愉快的感觉。<br>「因为明日香学姐是特别的。」<br>夏纪的声音回荡在鸦雀无声的教室里，显得格外清晰。<br>没什么人烟的车站里，同样穿着北宇治制服的学生们正百般聊赖地等电车。久美子坐在长椅上翻着单字卡。已经到了换季的季节，制服也从长袖变成短袖。她捏了捏从袖子里伸出来的上臂，忍不住叹气。最近好像胖了。<br>「……久美子。」<br>冷不防有人喊自己的名字，久美子猛然抬头，只见叶月一脸欲言又止地站在跟前。叶月紧紧地抓住挂在肩膀上的书包，开口问道：<br>「一起回去好吗？」<br>「啊，好啊。当然好。」<br>「谢啦。」她在久美子的旁边坐下。久美子下意识地翻阅着单字卡。Apologize，道歉。Force，强力。罗列在字卡上的英文单字只是在视线范围内滑过，一个字也没有进到脑里。<br>「我啊，向冢本告白了。」<br>叶月说道。久美子从字卡上移开视线，望着她。匡当匡当。她们正在等的电车滑进月台。但叶月不为所动，所以久美子也不敢动。关门的警示声响起。车门关上，电车再次发车，只剩她们还留在月台上。<br>「嗯，我知道喔。」<br>久美子的回答让叶月垂下眼帘。「这样啊……」她只说了这么一句，嘴角微微抽动。<br>「冢本好像另有喜欢的人。」<br>「……是吗。」<br>久美不晓得该怎么回答，锁紧了眉头。像这种时候，该说什么才好呢？对于久美子的反应，叶月无言地低着头。<br>「对不起。」<br>「什么事？」<br>「那个时候，让你费心了……」<br>叶月轻声地说。你不说我也知道喔。久美子心想，但什么也没说，只是翻动着单字卡。边缘折起来的页面是考试的范围。Apologize。Apologize。久美子无论如何就只有这个单字背不起来，字卡的边缘都卷了起来。<br>「你不用向我道歉啊！」<br>「可是，久美子也喜欢冢本吧？」<br>「……什么？」<br>叶月的话让久美子惊讶得目瞪口呆。她在说什么？但叶月完全没注意到久美子瞪大眼睛、呆若木鸡的模样，仿佛在告解似地继续往下说：<br>「我其实也隐隐约约地感觉到了。可是，我想只要先说出口，你就会退让。因为久美子不是那种强势的人，我就是算准了这一点。真的很抱歉……我真是个不要脸的女人。」<br>久美子急着阻止以自嘲表情说着自虐话语的友人。<br>「咦，不对，等一下。欸，我喜欢秀一已经是肯定句了吗？」<br>「不是吗？」<br>叶月微微地侧着头，露出意外的表情。<br>「因为我拉走冢本的时候，久美子的表情看起来很不高兴。」<br>「呃，并不是因为我喜欢秀一的缘故……该怎么说呢，我们就像死党一样，死党被抢走当然会觉得寂寞啊……」<br>「哈哈，原来如此。」<br>「你明白了吗？」<br>「我明白、我明白，原来久美子还没有自觉啊！」<br>「怎么会变成这样？」<br>见久美子忍不住垮下肩膀，叶月发出愉快的笑声。她这几天都愁眉苦脸的，所以是久违的笑容。<br>「真拿你没办法啊，就由本大小姐来助你一臂之力吧！」<br>「咦，你要助我什么？我只觉得有股不祥的预感……」<br>「你真是明知故问。」<br>「不，我真的不知道你在说什么。」<br>久美子追问，叶月站起来。电车随着广播再次滑进月台。叶月拿起书包笑了。她的笑容带着一丝的意外，也有些寂寥。<br>「真是的，久美子好迟钝。」<br>车门开启，久美子把单字卡塞进书包里，也赶紧站起来。叶月抓住久美子的手臂，一把将她拉进车厢里。叶月的手好温暖，同时也有些干燥。<br>或许是社团活动的疲劳还挥之不去，久美子一回到家，就直接回房倒在自己的床上。<br>「久美子，至少先把便当盒拿出来吧。」<br>母亲的声音从厨房传来，但久美子没有力气回应。她维持着躺在床上的姿势，只动了动手，总算打开电脑的电源。<br>电脑里有泷提供的乐曲音档。她奋力抬起头，按下三角形的按钮，指定曲从喇叭播放出来。甄选已经近在眼前了。<br>自从泷来了以后，管乐社就改变了。知道以前社团是什么情况的老师全都异口同声地这样说。起初也有很多社员抱怨泷的指导方针，但也逐渐被他驯服了。理由很简单，因为大家都确实感受到自己的进步。原本散乱演奏渐渐变得整齐、成为一曲音乐。只图自己高兴的演奏固然也很快乐，但是不断地努力、被逼到极限的音乐，光用快乐这种感觉是不足以形容的，每个社员的心里都怀有某种特别的感慨。合奏很开心，但也很可怕。为了不要一脚踩到分岔路上，必须全神贯注地集中精神。大概是这种感觉。<br>指挥者的工作不只是正式上场的时候挥动指挥棒，那仅是指挥者的任务之一。他们之所以挥动指挥棒，是为了指示演奏者要从什么时候开始演奏，以及结束的时机。除此之外，还得听出所有声音的比例，将曲子整合起来。<br>正式上场以外的时间，他们必须掌握住曲子的构成及作曲家的意图，将表现手法及乐曲的走向传达给演奏者知道。演奏的风格及曲子给人的印象将随该指挥者的指示而截然不同。因此指挥者的个性会直接表现在指示里，并影响外人对乐团的评价。指挥者扮演的角色其实比听众感知到的更加重要。<br>十年前，北宇治高中还称霸一方的时代，背后肯定也有一位优秀的指挥者吧。当他离开学校，北宇治的管乐社就每况越下。光是换个顾问，学生就会被带着忽前忽后。无论拥有再高的志向，一旦教练不够优秀，就无法在比赛中一路过关斩将。<br>在多达一千五百所以上的高中里，能够留到全国大赛的不到三十所。能代表京都府挺进关西大赛的，只有这三十六所学校里的其中三所。他们只能在这种私立和公立学校互相较劲、绝对称不上公平的练习环境下，各自全力以赴地演奏。北宇治高中想打进全国大赛，可以说是遥不可及的梦想。<br>尽管如此……久美子心想，尽管如此，泷依旧认真地想要进军全国。严格的练习、合奏的紧张感，全都是为了将北宇治高中送进全国大赛。既然如此，不是只能努力了吗？<br>「……真希望能吹得更好一点啊！」<br>没有人回应久美子的自言自语。<br>甄选分两天举行。第一天是铜管、第二天是木管和打击乐器。每个人轮流被叫进音乐教室里，在用隔板隔开的包厢里演奏。音乐教室前面摆了几张椅子，让准备接受甄试的人在这里等待叫号。教室的隔音设备并不完全，等待的空档可以听见其他人的演奏。光是听到明日香温暖的粗管上低音号音色，久美子就无法控制地紧张起来。夏纪拍拍脸色铁青的久美子，站了起来。<br>「换我了。」<br>她说完，便消失在音乐教室里。久美子抱紧自己的粗管上低音号，目不转睛地凝视着乐谱。合奏该注意的地方、泷提点过的地方，她一再地重新复习检查，档案夹的边缘都磨损了。没问题，一定能通过。久美子将气息吹进乐器里，正襟危坐地等待自己被叫到。<br>「轮到久美子了。」<br>演奏结束，走出音乐教室的夏纪对久美子说。久美子想应声，却因为紧张而发不出声音来，只能默不作声地点个头，引来夏纪的苦笑。<br>「凭你的实力，不用那么紧张也没问题的。」<br>学姐的话从背后推了她一把，久美子提心吊胆地踏进音乐教室。<br>「请坐。」<br>泷的声音隔着隔板传来。他不露脸，是为了不让社员紧张的体贴措施吧，虽然看不到脸可能会更紧张……久美子孤零零地坐在正中央，将档案夹放在前面的谱架上，长长地吐出一口气。指尖在发抖。<br>「请报上学年、名字和负责的乐器。」<br>「啊，我是一年级的黄前久美子，负责低音组的上低音号。」<br>「是吗？」<br>这个平淡的嗓音是副顾问美知惠。顾问和副顾问，要接受两个人的考核吗？为了掩饰跳得越来越快的心跳声，久美子深呼吸，轻轻地转动僵硬的指尖，试图缓解紧张。<br>「调音没问题吗？」<br>「是、是的。已经调好了。」<br>「这样啊。……黄前同学以前就学过粗管上低音号，对吧？有几年的演奏经验了？」<br>「呃，从小学四年级开始，今年是第七年。」<br>「七年？那还真厉害啊！」<br>泷佩服地低吟。啊！糟了，自己把门槛垫高了。为了赶走在脑子里打转的负面思考，久美子用力地摇头。木头的椅子坐起来冷冰冰的。是因为流汗的关系吗？她的大腿整个贴住椅子的表面。<br>「那么请先从指定曲开始吹奏。」<br>「好、好的。」<br>「从四十一小节开始的副旋律。跟上低音萨克斯风连动的地方。提到粗管上低音号，果然还是这里最重要呢。」<br>久美子急着用视线浏览着乐谱，找到那个已经练习过无数次的段落。<br>「我会打开节拍器，所以请吹到我说停为止。可以随你喜欢的时间点开始。」<br>「知、知道了。」<br>喀嚓、喀嚓、喀嚓。久美子侧耳倾听周而复始的节奏，深深吸进一口气，肺部隆起，将锐利的气息送进吹嘴里。她移动手指，从低音转换到高音。接着来到练习时一再卡住的连音部分。虽然准备了乐谱，但是久美子几乎没有时间看。激昂的情绪让脑袋隐隐作痛。气息颤抖，心脏跳得飞快，感觉就快爆炸了。脑子里一片空白，只有演奏在意识里浮游前进。万一失误该怎么办？明明害怕得不得了，却又觉得这样也很开心。从脚底往上蔓延的热气，紧紧地揪住了她胸中的器官。<br>「好，到此为止。」<br>久美子拼了命地演奏，直到泷喊停。上低音号的乐声也戛然而止。隔板对面发出在纸上写字的沙沙声。就在这一瞬间，久美子的演奏正接受评分吧。她的耳膜深处还残留着刚才演奏的余韵。<br>「可以了。请帮我叫低音号的人进来。」<br>「啊，好的。」<br>久美子站了起来，头有点晕眩。或许是还处在紧张状态，指尖依旧颤抖着。她抱着乐谱，逃也似地离开了音乐教室。<br>「好痛！」<br>乐器发出「匡！」的一声巨响，撞到了桌子，久美子连忙检查上低音号。还好，刚才的撞击没有造成明显的伤痕。甄选才刚结束，或许是一下子太放松心情了。<br>「没事吧？」<br>绿辉窥探着她的脸色。<br>「什么？」<br>「因为你喊痛，想说是不是受伤了。」<br>「没有，只是撞到乐器而已，我没事。」<br>久美子本身并没有受到任何伤害，只是撞到乐器，为什么会反射性地喊痛呢？这么告诉绿辉之后，绿辉笑得好不开怀。<br>「那是因为久美子的灵魂已经进入杰克里了。」<br>「谁是杰克？」<br>「久美子的上低音号啊！」<br>「对了，这位是乔治。」绿辉指着自己的低音大提琴。这么说来，当初决定乐器的时候，她的确说过同样的话。<br>「可是啊，泷老师好过分喔！只有低音大提琴是在木管那天甄选。」<br>「这倒是。」<br>「小绿明明是低音组的！」<br>她闹起别扭地鼓着脸。手指贴着好多OK绷。粉红色的奇妙图案是绿辉的个人喜好吧。久美子眯起眼，指着她的手指。<br>「那个，不要紧吧？」<br>「哦，这个啊？」<br>绿辉展颜一笑。<br>「这是弦乐器经常会有的职业伤害呢！因为要用手指按住弦，常常会割伤。」<br>「不痛吗？」<br>「痛是会痛，但是比国中的时候好多了。」<br>她不好意思地嘿嘿笑着。<br>「国中的时候啊，一天有好几次的定期演奏会，光是上午的演奏会，手指就变得伤痕累累了。贴上OK绷也得马上撕下来，一直流血。用流血的手指翻乐谱，就连乐谱也变得血迹斑斑的，到了下午的演奏会，因为血液让乐谱粘在一起，几乎没办法看。」<br>对于绿辉当笑话讲的前尘往事，久美子只能报以苦笑。真不愧是毕业于实力坚强的学校，过去的事迹也很壮烈。<br>「既然那么辛苦，为什么还要继续呢？」<br>「继续什么？」<br>「管乐社啊，不会觉得讨厌吗？」<br>久美子脱口而出的问题纯粹是好奇心使然。只见绿辉将头摇成一个波浪鼓。以指尖撑住的低音大提琴，比她的身高还要巨大。<br>「一点也不会觉得讨厌喔，小绿最喜欢管乐社了！」<br>她的语气坦率到了极点。真想成为她那种人啊！久美子有点羡慕眼前的少女。<br>甄选结果将在期末考后公布。高中生活的第二次段考。久美子一开始就因为数学栽了个大跟头，照这样下去，能考上大学吗？每次坐在书桌前准备念书时，她都会担心起自己的将来。<br>跟期中考一样，考试前一周社团活动暂停。久美子为了转换心情，去了一趟书局。如果是应付学校的考试，只要有教科书就绰绰有余，但还是会想买新的参考书。每次看到「保证考上！」或「目标九成！」这类的字眼，就会觉得只要买回家，自己的头脑也会变好。尽管这种参考书只会占去书架空间，对于提升成绩一点帮助也没有。<br>走进参考书区，映入眼帘的是一整墙密密麻麻的红色书背，粗体文字印着大学名称。原来世界上有这么多所大学啊！久美子心想，漫无目的地在书架间的通路上前进。<br>「……啊！」<br>从背后传来的声音让久美子下意识地转过身去。<br>「小葵？」<br>「久、久美子。」<br>葵的脸上一瞬间浮现出失措的表情，但是马上以笑脸盖过。她微笑着试图遮住自己手里的参考书，走过来的脚步略显迟疑，不太想和久美子扯上关系的心情一览无遗。<br>「社团方面如何？」<br>「啊，嗯。正在努力喔。但现在是期末考周。」<br>「有机会进军全国吗？」<br>「唯有这点，在结果出来以前是不知道的。」<br>「这样啊。」<br>葵静静地微笑。<br>「……晴香还好吗？有没有好好干？」<br>「晴香是指小笠原社长吗？」<br>「对。我说了很过分的话，现在彼此还有些尴尬。」<br>过分的话，是指葵退出社团那天说的话吧。<br>「我想应该不要紧，有明日香学姐帮忙照应。」<br>「又是明日香吗？」<br>听到这个名字，葵耸耸肩。<br>「那个人真的是无所不能呢！功课很好，演奏也很得心应手。」<br>「明日香学姐很聪明吗？」<br>「她很聪明喔，非常聪明。」<br>葵说到这里，脸上浮现出自嘲的笑容，目光飘向自己手中的参考书。<br>「我的第一志愿只是明日香的备选。」<br>这句话让久美子不知该做何反应才好。冷不防，葵发出干涩的笑声，以半开玩笑的语气说：<br>「要是我像明日香那么聪明的话，或许就能继续参加社团活动了。」<br>语气里藏着一根细细的刺。她的嗓音听起来很快活，但是听在久美子耳中，却是十分悲哀的声音。「那我走了。」葵说完就打算转身离去。久美子不由自主地叫住那个纤细的背影。<br>「小葵。」<br>「什么事？」她回过头来问。<br>「你会不会后悔退出社团？」<br>「不后悔喔。一点也不。」<br>她以开朗的表情说道，手指紧紧地抓住自己的手臂。红色的印子留在雪白的肌肤上，看起来好痛。<br>「那就好。」<br>久美子笑道，装出被她骗过的表情。</p><h2 id="第四章-比赛，再见"><a href="#第四章-比赛，再见" class="headerlink" title="第四章 比赛，再见"></a>第四章 比赛，再见</h2><p>发回来的考卷固然令久美子流了一身冷汗，但期末考总算是平安落幕了。数学的成绩比上次更糟，不过算了，船到桥头自然直。久美子边用毫无根据的正面思考激励自己，走向音乐教室，顾问正等待着大家。今天是谁能参加A部门的发表日，明天则是要公布第一与第二乐谱的声部分配，以及负责独奏的人选。<br>「低音组会如何呢？」<br>绿辉摩挲着下巴，露出笃定的表情说：<br>「依照小绿的第六感，我猜所有人都能过关喔！因为低音组的人数本来就比较少嘛。」<br>「……但愿如此。」<br>久美子轻轻地叹了一口气。丽奈面无表情地坐在教室一隅，她斜右方是正和打击乐器的男生打打闹闹的秀一。一年级、二年级、三年级。大家脸上全都浮现出紧张的表情……不对，只有绿辉一派从容的模样。<br>「弦乐器只有小绿一个人啊，所以绝对不会落选。」<br>绿辉仿佛看穿了久美子的想法，微微一笑。她的预测应该不会错，因为她的演奏技术很优秀，而且除了她以外，这个社团没有会拉低音大提琴的人。<br>「大家都到齐了吗？」<br>门「砰！」的一声用力打开，美知惠踩着大步，昂首阔步地走进教室，气势十足的声音令众人悚然一惊。一身黑的套装，闷热得完全不适合现在的季节。泷不在她身后，看来将由副顾问一个人公布。<br>「参加甄选的七十一名全员到齐。」小笠原回答。<br>「是吗。」美知惠说道，将档案夹文在钢琴上。<br>「那么事不宜迟，直接公布A部门的成员。以下没叫到名字的同学，下次的合奏练习请去参加B部门的合奏，集合地点为第二视听教室。」<br>「是！」<br>「一共有五十五位同学通过甄试。叫到名字的人请大声回答。」<br>「是！」<br>「还有，不接受对这个结果提出任何反对意见。我们在决定成员的时候并没有偏袒任何人。这点请各位理解，明白了吗？」<br>「是！」<br>「很好。」<br>她说到这里，打开档案夹。为什么每次在她面前，总就会下意识地抬头挺胸呢？或许是错觉，社员们的应声似乎也比平常有精神。<br>「那么，先从小号组开始。」<br>这句话让教室一下子安静下来。紧张宛如绷紧的弓弦，隐藏在寂静里。这次参加甄选的小号组成员一共有八人，两名三年生级，三名二年级生，三名一年级生，肯定会有几个人去B部门吧。久美子屏住呼吸，盯着美知惠的脸，后者则是面无表情。<br>「三年级，中世古香织。」<br>「有！」<br>「三年级，笠野沙菜。」<br>「有！」<br>「二年级，古川优子。」<br>「有！」<br>「二年级，泷野纯一。」<br>「有！」<br>「一年级，高坂丽奈。」<br>「有！」<br>「以上五名是小号组的成员。」<br>美知惠说出这句话的瞬间，二年级的学生「哇！」的捂住脸，然后是少女的啜泣声在教室里响起。没有人高兴，谁也说不出「恭喜」两个字，因为完全不是说这种话的气氛。周遭的空气凝重而停滞，压迫感沉甸甸地压在双肩上。真希望赶快公布完毕，早点逃离现场。久美子低下头，心里想着这件事。她偷偷看了丽奈一眼，只见丽奈坐得直挺挺的，目不转睛地注视着美知惠。<br>「下一个，法国号部。三年级……」<br>美知惠继续唱名。被叫到的学生努力按捺住喜悦，导致表情变得十分扭曲。没被叫到的学生有的嚎啕大哭，也有人只是静静地一动也不动。<br>轮到长号组了，久美子悄悄地看着秀一的方向。只见他祈祷似地闭上双眼，随着自己的名字被点到，嘴角露出一抹浅笑。他的右手轻飘飘地抓住一把空气，想必是在寻找释放情绪的场所吧。但是秀一遍寻不着能与自己分享喜悦的对象，手静静地放回桌上，然后似乎察觉到久美子的视线，眼神望向她的方向。恭喜你。久美子无言地在视线里灌注了这样的心意，但秀一似乎没有接收到。只见他露出尴尬的表情，马上别过脸。<br>「下一个，低音组。首先从粗管上低音号开始。」<br>轮到低音组了。久美子咽了一口口水，握紧自己的拳头。心脏扑通扑通地狂跳着。没问题的，上低音号总共只有三个人，掉到B部门的机率应该很低才对。当她拼命安慰自己的同时，美知惠开口了。<br>「三年级，田中明日香。」<br>「有。」<br>明日香凛然的嗓音在久美子的身旁响起，那是沉着冷静、充满了自信的声音。明日香肯定有十足的把握，确信自己的名字一定会被叫到。<br>美知惠喊出下一个名字。<br>「一年级，黄前久美子。」<br>「咦……」<br>久美子还以为自己听错了，来不及反应。「你没听错。」美知惠说道。一年级……怎么可能。一股恶寒顺着背脊往上爬，她的脖子冒出鸡皮疙瘩。周围错愕的视线一股脑儿射向她身上。<br>美知惠露出诧异的表情。<br>「黄前！快点回答！」<br>「有、有……」<br>久美子使出全身的力气才挤出这个字，握得死紧的掌心里湿漉漉的。<br>「以上两名是粗管上低音号的成员。下一个，低音号。二年级，后藤……」<br>美知惠的唱名继续往下进行。卓也、梨子、绿辉。剩下的低音组成员全都被点到了。没有被点到名的、没有被点到名的是……久美子的脑袋咕嘟咕嘟地冒着沸腾的泡泡。理性仿佛被烈焰吞噬的纸，烧得一点不剩，在久美子的脑子里烧出过去的记忆。<br>＊<br>「早、早安。」<br>久美子一如往常地打招呼，却没有得到一如往常的回应。学姐无视久美子，从乐器盒里拿出上低音号。那是银色的粗管上低音号。国中时代，社团有两把银色的粗管上低音号。金色的乐器固然也很帅气，但久美子比较喜欢银色的乐器，总觉得银色比较特别。<br>「那、那个……学姐？」<br>久美子再问了一声，学姐依旧一句话也没说，只是发出全身是刺的氛围。沉默降落在只有两个人的乐器室里。对于刚上国中的久美子而言，那种空间让人觉得坐立难安。为何不像平常那样说点什么呢？久美子满肚子问号，等学姐先取出乐器。乐器室很小，本来应该要到外面才拿出乐器，她却堂而皇之地在乐器室的正中央打开盒子，所以久美子无法拿出自己的乐器盒。<br>「喂。」<br>「有，有！」<br>学姐突然喊了她一声，害久美子吓得声音分岔。定睛一看，学姐正恶狠狠地瞪着自己，那股气魄令久美子忍不住往后退。<br>上了国中最害怕的，莫过于这种绝对的上下关系。年纪明明没有差到哪里，在这个空间里却能大摇大摆地端着学长姐的架子。<br>「你瞧不起我吗？」<br>「咦，什、什么意思？」<br>「我说，你是不是瞧不起我？」<br>久美子就算想否认，学姐的眼神也不容自己否认。学姐对沉默不语的久美子咂了咂嘴，伸出手来，一把抓住久美子的手腕。她的指甲陷进久美子的皮肤里。<br>「因为自己是A部门，就以为地位比我高了吗？」<br>「我、我没有……」<br>「你有！才一年级就这么嚣张！」<br>她一脚踹在久美子的上低音号上。镀膜已经开始脱落的银色喇叭发出悲鸣，倒在地上。好痛。久美子心想，眼前一片模糊。宝贝的乐器受伤了，要是凹进去、坏掉了怎么办？演奏会已经迫在眉睫了。<br>「如果没有你，我就能去A部门了。」<br>「学、学姐……那个。」<br>「闭嘴，吵死了。」<br>她粗鲁地放开久美子的手。那股冲击让久美子倒向地面。她跌倒在地的时候，用力地撞到手肘，整只手都麻痹了。学姐冷冷地看着摇摇晃晃撑起身子的久美子。<br>「我是不会承认你的。」<br>从齿缝中迸出的这句话，刺穿了久美子的心脏。一涌而上的呜咽令久美子下意识地捂住嘴巴。学姐不屑地朝她露出一抹冷笑，就这么离开乐器室。即使确定学姐的身影已经完全消失了，久美子的指尖依旧颤抖个不停，她拼命地摩挲学姐捏过的地方。即使摩擦令皮肤生热，捏过的痕迹依旧不肯消失。久美子的视线往下移，倒在地上的粗管上低音号无力地看着她。她小心翼翼地伸出手，只见自己的身影倒映在上低音号银色的表面上。<br>＊<br>结果，那位学姐直到毕业之前都不曾与久美子亲近。那次比赛是她国中生涯最后一次大赛，却被刚入学的一年级新生抢走了她的出场机会，她始终无法原谅久美子。原本很亲切的学姐一夕之间改变态度，在那之后，她就一直对久美子的存在视若无睹。低音组的气氛在学姐毕业以前可以说是糟透了，久美子好几次都烦恼着要不要退社。可是，她办不到。因为久美子就连说出要退出社团的勇气也没有。那一年，北中在关西大赛获得了银牌。<br>久美子怎么也忘不了学姐那天的眼神。久美子喜欢音乐，喜欢乐器，但是不喜欢社团活动。除了音乐以外，还有其他大量的人类。久美子很清楚潜藏在笑脸底下的丑陋情感，所以无法相信，无法像绿辉那样，心无城府地说自己喜欢社团活动。<br>「以上五十五名是A部门的出场成员。从下次的合奏开始，泷老师的指导也会变得更严格，所以请获选的成员好好地打起精神来。」<br>「好！」<br>美知惠的叮咛让久美子猛然回过神来。参赛成员好像发表完了。副顾问表情淡然地阖上档案夹。教室里的气氛依然沉重。<br>「明天将公布独奏与分组结果。不相关的声部成员请努力练习自己的声部。」<br>「好！」<br>「以上，今天的会议到此为止，请迅速回家。那么，解散！」<br>「谢谢老师。」<br>紧接在社长之后，社员也重复着同一句话。美知惠满意地微笑，潇洒地离开教室。剩下的学生全都露出复杂表情，开始收拾东西，准备回家。被选上的人和没被选上的人，唯有这一瞬间，两者间产生了明确的鸿沟。久美子抓着书包，叹了一口大气，拭去湿冷的汗水。<br>「你要回去啦？」<br>背后受到一阵冲击，久美子抬起头来，搭在肩膀上的手臂异常沉重。<br>「夏、夏纪学姐……」<br>久美子认出对她说话的人，血色从脸庞褪尽。国中时的记忆突然在脑海中倒带，她的额头冒出汗珠，沿着轮廓滴落在地板上。<br>「呃，学姐，那个……」<br>声音卡在喉咙里，发不出来。久美子下意识地皱眉，心跳声在耳边吵得要死。令人头晕目眩的热量全都往脑袋集中，唯有夏纪的手感觉格外冰冷。<br>「你在紧张什么？脸色好难看。」<br>她笑着说，用手指轻弹久美子的额头。久美子反射动作地用手捂住额头。<br>「你、你做什么啦。」<br>「嗯？没做什么啊。」<br>她以不会伤害对方的力道抓住久美子的手，光是这点就与那个学姐不一样。<br>「对了，你等会儿有空吗？」<br>「嗯，是没有别的事……」<br>「太好了。」她露出讨人喜欢的笑容，「那，我们去麦当劳吧。」<br>「小麦吗？好啊。」<br>久美子的回答令夏纪噗哧大笑。<br>「什么小麦，麦金塔吗？」<br>「不是，但小麦就是小麦啊。」<br>「麦当劳就是麦当劳，干么加个小字啊！」<br>关西与关东的简称差得有点多，光是发音的差异就令人耿耿于怀，在谈话中也经常因此引发争议。基本上，像这种情况，多半都会有人想起被遗忘的正题，把无聊的争议搁在一边，不予理会。<br>「总而言之，我们去麦当劳吧。我可以请你一百圆以内的东西。」<br>「一百圆可以买到什么？还有，是小麦喔。」<br>「什么都买得到啊。因为麦当劳是学生的忠实伙伴。」她微笑着说。<br>位于学校附近的速食店里，坐满了穿着眼熟制服的学生。夏纪熟门熟路地占住最里面的桌子，再自然不过地把东西放在沙发那边，于是久美子只好坐在她对面的椅子上。<br>「你想吃什么？」<br>「呃，啊……那就奶昔吧。」<br>「了解。」<br>她轻拍久美子的肩，直接走向点餐柜台。这种感觉好像是她差遣学姐跑腿，久美子认真地烦恼着。但也不能把两人份的东西丢在这里不管，所以她还是认分地乖乖坐在位置上。<br>「草莓口味可以吗？」<br>「啊，都可以。」<br>「就算你不喜欢也得喝，因为我是巧克力派的。」<br>夏纪回座，从托盘拿起奶昔，递给久美子。久美子提心吊胆地接过插着红色吸管的草莓奶昔。夏纪豪爽地坐在沙发上，叹了一口就连久美子也听得见的气。<br>「啊啊，落选了。」<br>「噗！」<br>突然提起她已经忘记的事实，令久美子不小心呛到。夏纪注视着惊慌失措的学妹，愉快地大笑。<br>「怎么？你在顾虑我吗？」<br>「没、没有，那个……」<br>我不是在顾虑你。久美子默不作声地咬着吸管。她只是不能接受夏纪没选上A部门的事。<br>「不用在意我喔！仔细想想，这不是天经地义的事吗？因为我上高中才开始玩管乐，吹上低音号的经验才一年，所以当然是你会被选上。」<br>「可是……」<br>「再说了，比赛又不是今年才有，只要明年继续努力，选上A部门就好了。」<br>她说到这里，吸了一口眼前的奶昔，将黄色的吸管含在唇瓣之间。<br>「……学姐真是个好人。」<br>明明心里想很多，久美子最终说出口的却是这种不痛不痒的台词。夏纪顿时睁大了双眼，然后豪爽地哈哈大笑。她放开的吸管上明显地留下啮咬过的痕迹。<br>「没有、没有，才没有这回事。」<br>「可是，你对我真的很好啊。」<br>「那是因为久美子太顾虑我了，害我有点于心不忍。」<br>「我啊……」夏纪接着说：「老实说，并没把比赛放在心上喔！A也好，B也好。」<br>「咦？」<br>「这种事不是很麻烦吗？只是因为周围的人都在拼，我只好也拼拼看这样。」<br>她耸耸肩。<br>「话说回来，我之所以会加入这个社团，也是听说这里很好混。大家也都是今年才开始有干劲，所以害我有点跟不上社团的变化呢！」<br>她说到这里，垂下双眼，用指尖拭去沾在杯子上的水滴。久美子默默地喝着奶昔。人工的甜味牢牢地黏在舌头上。<br>「你知道这个社团去年的比赛成绩吗？」<br>「在京都大赛上拿下了铜奖。」<br>「没错。因为京都府没有地区预赛，说穿了，其实是最糟糕的结果。」<br>金奖、银奖、铜奖，参加比赛的学校分成这三个等级，借此决定各自的价值。高中部的比赛共举行两天，再从取得金奖的高中里选出可以继续参加关西大赛的学校。高中数量比较多的地方，会在县大赛以前先举行地区预赛，但京都府不需要地区预赛。<br>「老实说啊，去年其实也有以金奖为努力目标、充满干劲的人，但是没有人天真地以为能进军全国。」<br>「……那该不会是指传说中集体退出社团的二年级生吧？」<br>「没错。」夏纪点头，「不过他们那时还是一年级，努力想说服学长姐们，希望大家都能好好练习。」<br>「这不是很了不起吗？」<br>「可是，他们的努力终究还是白费了。」<br>白费……久美子反刍着这两个字。听起来好讨厌的两个字。嘴角勾勒出一道弧线，似是在揶揄眼前的学姐。<br>「因为高年级的人击溃了他们。」<br>「击溃了……」<br>夏纪对脸色铁青的久美子摇摇头。<br>「不，不是霸凌喔。只是单纯地视而不见，大家都当那些一年级的不存在。」<br>「……这不就是霸凌吗？」<br>「或许是吧，但那群人并不认为自己是在霸凌，只是觉得他们很吵，所以才对他们视而不见的。」<br>「可是……」<br>夏纪对脸色依旧苍白的久美子哈哈大笑。<br>「当然，学长姐中也有认真练习的人，像是明日香学姐。不过，那个人只为自己吹奏，所以帮不了一年级的人。」<br>「什么意思？」<br>「就是字面上的意思。明日香学姐只要自己能吹奏乐器就满足了。周围的人吹得再烂、比赛什么的，对她而言都没什么大不了。那个人在大家偷懒的时候，也一个人发了疯似地拼命练习，所以才会吹得那么好。」<br>这倒是，明日香的程度在社团内也算是一枝独秀。或许泷也是看上这两个人的演奏技术，明日香的粗管上低音号与绿辉的低音大提琴，才会选择低音部分亮眼的指定曲。<br>「明日香学姐中立到可怕的地步，绝不站在任一边，不管是想认真练习的人，还是想在社团摸鱼的人，跟两派人马都混得很好，大家都说『明日香学姐是特别的』。可是，她终究不会保护他们，因为她是中立的嘛。其他学长姐也不敢对高年级的人有任何怨言，结果反倒是认真努力的人退社。北宇治只有铜奖，但是谁也不在乎，因为大家早就放弃了。」<br>因为明日香学姐是特别的。这是夏纪经常挂在嘴边的台词。<br>「葵学姐很关心那些一年级，小笠原社长也是。等到学长姐毕业，小笠原学姐当上社长以后，社团内的气氛好多了。然后泷老师也来了……不过，现在的三年级多半都是肯认真练习的家伙，又有参加过关西或全国大赛的一年级加入，所以相乘效果更大了。也是因为这样，才敢说出进军全国这种不自量力的话。可是……好像只有葵学姐一直不能原谅当时的自己。」<br>─我没有权利说出我会拼命努力这种话。<br>葵说过的话不经意地在久美子耳边响起。当时她的眼里充满了痛苦的神色。<br>「……夏纪学姐跟那群退出社团的二年级生很要好吗？」<br>「你怎么会这么想？」<br>「因为，那个……听起来你好像在生气。」<br>「我在生气……对谁生气？」<br>「对去年毕业的三年级生，还有……装作没看见的人。」<br>久美子的话让夏纪浅浅一笑。她抓住吸管，把杯子里的奶昔搅得乱七八糟，接着用舌头舔去沾到嘴唇的奶昔，朝久美子送来意味深长的一瞥。从唇缝间隐约可见粉红色的舌头。<br>「你知道去年大家为什么不努力参加比赛吗？」<br>「咦？」<br>「因为啊，泷老师的确很可怕没错，但那并不足以成为努力的理由。去年啊，社团里充满认为反而是努力练习比较奇怪的人，结果今年却因为进不了A部门而哭成一团，不觉得很恶心吗？难道不会想问他们那你们去年在干么吗？」<br>「这个嘛……这倒是。」<br>突然洗心革面也太唐突了。开学典礼的时候听到的演奏既难听又缺乏干劲。究竟是什么改变了他们？久美子今年才加入这所高中，无从确定夏纪说的话有几分真实性。然而，管乐社在今年发生了巨大的改变却也是不争的事实。<br>「气氛。」<br>「什么？」<br>突然变得惜字如金的答案令久美子目瞪口呆。夏纪眯着眼，又说了一次同样的话。<br>「就是气氛。这个社团对周遭的气氛十分敏感，所以如果大家都说要努力，就会努力；如果说不要努力，就不努力。去年和今年的差别大概只因为这个理由。」<br>几乎没有人有自己的意见。<br>夏纪语气淡漠地抛出这句话，听在久美子耳中，像是批判别人，也像是批判她自己。<br>「从这个角度来看，泷老师的手腕很高明呢，竟能巧妙地制造出这种气氛。」<br>「或许是吧。」<br>「对吧？」<br>也许是久美子的反应令她很满意，夏纪加深了笑意。<br>「话说回来，你不觉得像是第一次的合奏，根本不用途中打断大家的合奏，好好说不就好了吗？这么一来，大家应该也不会反抗泷老师的指导，毕竟他又不是笨蛋。」<br>「说的也是。」<br>「但是，泷老师却反其道而行。我猜他大概一开始就想要给我们一个下马威。」<br>「下马威？指的是什么？」<br>久美子不知不觉地皱起眉头。只见夏纪坏心眼地扬起嘴角。<br>「当然是要让我们知道自己吹得有多烂啊。」<br>久美子不由自主地咽了一口口水。<br>「老师的策略很高明喔。第二次的合奏，我们一口气进步了不少，多亏有泷老师的指导。我们必须在那次合奏让老师肯定我们的实力才行，他真的很懂得制造气氛的方法。」<br>「气氛。」久美子喃喃自语。<br>「没错。」夏纪点头，「结果，我们只是被所谓的气氛玩弄于股掌之间也说不定。」<br>她自言自语地说。久美子拿出几张纸巾，揉成一团。皱巴巴的纸屑无力地掉落在桌面上，手里的吸管呈现令人毛骨悚然的血色。<br>期末考结束后，紧接着是第二次的面谈周。上次是母亲也要同席的三方面谈，这次是单独与级任导师美知惠进行。身兼管乐社顾问的她，一看到久美子就露出了笑容。<br>「黄前，社团活动有认真吗？」<br>「啊，是的。」<br>久美子怯懦地点头。平常总是板着脸的美知惠，在单独面对学生的时候变得温和许多。或许这种转换正是她明明这么可怕，还能受到学生喜爱的缘故。<br>「高中生活习惯了吗？」<br>「差不多习惯了。」<br>久美子老实地回答。在这么近的距离下，可以看出美知惠的脸上刻画着许多皱纹。<br>「黄前要参加A部门的比赛对吧？」<br>「是、是的。」<br>「会紧张吗？」<br>「紧张是会紧张，不过已经习惯了。」<br>「这样啊，那真是太可靠了。」<br>美知惠微微地笑眯了双眼。久美子缩着身体，心不在焉地数着她脸颊上的痣。窗外传来唧唧的蝉鸣。阳光晒得融化的夏天，贴在窗玻璃上。<br>「学校生活有什么为难的地方吗？」<br>「大概只有……数学考试的成绩吧。」<br>「那可是大问题呢，请好好复习。」<br>美知惠这么说，莞尔一笑。「好。」久美子点头应允，无意识地拨弄着自己的刘海。<br>「升学方向决定好了吗？像是想从事什么样的职业？有什么梦想？」<br>「不，还没有。」<br>「这样啊。不过高中生活还很长。不用急，慢慢决定就好。」<br>「我、我也是这么想的。」<br>「但数学还是得好好学习喔。要是到头来才发现成绩不够考上理想的大学，可是会伤透脑筋的。」<br>「谨、谨遵老师教诲。」<br>「知道就好。」<br>美知惠说到这里，拍拍久美子的肩膀。她的手很小，充满了岁月的痕迹。久美子看着清楚浮现在苍白皮肤上的蓝色血管，总觉得心脏有些躁动不安。这么说来，美知惠的年纪与母亲差不多。这个想法不经意地掠过久美子的脑海。<br>结束双方面谈后，久美子前往社团。才通过走廊，就听见其他社员练习的声音。她侧耳倾听，感慨万千地喃喃自语：<br>「……真的进步了呢。」<br>比起刚开始的时候，每个人的演奏都进步了。经过那么紧凑的基础练习，或许进步也是理所当然的。但是看到今年才刚开始接触管乐的一年级已经能灵巧地照乐谱吹奏，赞赏的心情涌上心头，与此同时，难免也有一段焦躁拉扯着心脏的一角。自己这种程度的水准不要紧吗？说不定什么时候就会被追上了。久美子深呼吸，压下在内心深处蠢动的丑恶情绪；鼓胀的肺部，压迫着旁边的脏器。<br>走向乐器室，听见音乐教室里传来吵闹的叫嚷。久美子下意识地看着左手的手表。好奇怪，这个时间应该要分组练习了。一想到这里，久美子这才想起来，这么说来，今天是公布独奏人选的日子。<br>乐器室与音乐教室是连在一起的，已经有几个人先到了，大家全都兴致勃勃地往音乐教室的方向探头探脑。<br>「你也来看吗？」<br>打击乐器的学长姐向她招手，久美子无法拒绝，从门缝间往音乐教室里偷看。里头同样有很多社员。小号、法国号、长笛、双簧管……全都是与独奏有关的声部。<br>「我不能接受！」<br>震耳欲聋的尖叫声。久美子不由得皱眉。<br>「为什么不是香织学姐，而是高坂！」<br>正在大喊大叫的是小号组的优子，香织在一旁露出为难的苦笑。<br>「呃，可是，因为甄选的结果决定由丽奈……」<br>「我才不接受这种结果！」<br>优子歇斯底里地跺脚。周围的学长姐们也都交头接耳地面面相觑。由一年级独奏不是太奇怪了吗？应该由香织独奏吧！识相一点，赶快自己请辞吧……此起彼落的窃窃私语，全都指向丽奈一个人。尽管如此，她的表情丝毫不见动摇，面无表情地收拾自己的乐谱。<br>「好了、好了，冷静一点。」<br>小笠原拍拍优子的肩膀安抚她。优子甩开她的手，咄咄逼人地走向丽奈。<br>「你这家伙，干么一副事不关己的样子。」<br>少女的手不由分说地抓住丽奈的手臂，乐谱从丽奈手中滑落。<br>「……你是指什么事？」<br>丽奈说道。她不服的态度，让周围的气氛变得更加紧绷。<br>「还能有什么！为什么不是香织学姐，而是由你独奏？」<br>「优子，别这样。」<br>香织阻止她，但优子完全不听劝。丽奈沉默着，居高临下地看着眼前的学姐，动了动唇瓣。<br>「为什么……原因你也明白啊。」<br>「什么？」<br>「因为我吹得比香织学姐好，所以才由我独奏啊。这不是很简单吗？」<br>丽奈丢下这句，让优子气到脸都胀红了。香织拼命想要安抚住优子，听到这句话一口气噎住了。只见她的大眼睛蒙上一层水气，长长的睫毛在眼眶里搧出起伏不定的波光。<br>「……真的只有这样而已吗？」<br>「你想说什么？」<br>优子的话让丽奈微微地眯起眼。冷若冰霜的眼神，令久美子忍不住想逃。咿……细如蚊蚋的哀鸣，大概不只是出自于久美子之口。<br>「你早就认识泷老师吧。」<br>丽奈的双瞪大，她甚少表现出感情的脸，第一次浮现出惊愕的神色。<br>「你、你突然瞎说什么！」<br>「你的父亲和泷老师好像很熟嘛，所以泷老师对你特别偏心……」<br>「请不要侮辱老师！」<br>听见「偏心」两个字的瞬间，丽奈的双颊瞬间胀红。原本不做任何抵抗的左手，粗鲁地挥开优子的手。啪嚓！空气中响起干涩的声音。久美子从未听她发出这么情绪化的声音。<br>「你要怎么中伤我都无所谓，但是请不要说泷老师的坏话。居然在比赛前这么重要的时期侮辱顾问，真不敢相信！学姐真的以为老师偏心吗？」<br>或许是被她的气势吓到，优子一句话都说不出来。小笠原只是不知所措地走来走去，一点忙也帮不上。这个节骨眼上要是明日香在的话……久美子咬住下唇。偏偏副社长现在正在进行面谈。<br>香织小心翼翼地开口。<br>「丽、丽奈，真是对不起啊。她只是为了维护我。」<br>「学姐！」<br>「优子也不要再乱说话了。我并不介意……」<br>香织的话在不自然的地方戛然而止。或许是压抑太久的情绪终于爆发，泪水从她眼中滑落，顺着脸颊，慢慢地往下坠。教室里一下子变得鸦雀无声。香织用手按住眼头，硬是挤出破碎的微笑。<br>「我真的不在意……」<br>她的声线颤抖。同情香织的声浪在教室里掀起波澜。<br>怎么可以让三年级说到这个地步？高坂同学的性格真的很差劲！香织好可怜。她就这么想独奏吗？正常人会礼让学姐吧！<br>不满的声浪排山倒海而来，丽奈只是直视着前方，一句一句地撑了过来。刚才那个情绪化的她消失到哪里去了？丽奈再度将感情从表情中收拾得干干净净，环顾整个教室一圈，眉宇轻蹙着说：<br>「想找我算账的话，请先吹得比我更好再来。」<br>她不屑地丢下这句话，便走出音乐教室。看见丽奈的拳头握得死紧，久美子倒抽了一口气。就算没有表现出来，但她不可能完全没受伤。<br>「丽奈！」<br>还来不及思考，久美子已经先追了出去。<br>「丽奈！丽奈！」<br>久美子拼命想追上丽奈的背影。经过走廊的学生们看到她的模样，无不投以好奇的视线，但是对于现在的久美子来说根本无关痛痒。丽奈看也不看她一眼，只是闷着头拼命往前走，简直像是要逃离久美子。<br>「等一下啦！」<br>都怪自己平常不运动，跑一下子就上气不接下气。久美子对肺活量还算有自信，但也不是很有运动神经的人。是丽奈突然停下脚步，才总算抓住她的手臂。<br>「哇！」<br>煞车煞得太突然，久美子冷不防一头撞上她的背。「好痛。」久美子按住额头，丽奈则什么也没说，只是直挺挺地站在那里。她们不知不觉来到校舍的深处，通往屋顶的楼梯上没有其他人影。<br>「……那个，丽奈？」<br>久美子还抓着她的手腕，小心翼翼地窥探她的脸色。始终无言以对的黑发美少女，只是咬紧牙关地低着头。从她的唇瓣之间，流泄出细细的呻吟。<br>「……了……」<br>「什么？」<br>久美子下意识地反问，丽奈这次终于开口了。她的眼睛瞪得大大的。<br>「吵死了、吵死了、吵死了！那群人是怎么回事！莫名其妙，性格未免也太糟糕了吧！全都是些比垃圾还不如的家伙！啊！气死人了！烦死人了！」<br>少女的尖叫声响遍了整条走廊。因为音量实在太大了，久美子只能目瞪口呆地不住眨眼。丽奈以痛快多了的表情，大大地吐出一口大气，轻抚胸口的手缓缓地握住久美子的掌心。<br>「你这是什么表情？」她笑着说。<br>「因为，我还以为你会很沮丧。」<br>「才不沮丧呢，我只是火大。」<br>丽奈提起嘴角说道。看到她那宛如面具般的笑脸，久美子觉得胸口一阵酸楚。她心想，其实不用笑也无所谓的。<br>丽奈无言地凝视久美子的脸，手轻轻地滑落到久美子的手臂上。从袖口露出光滑的雪白肌肤。久美子感觉身体发烫。垂下眼帘。汗水沿着少女的轮廓滴落，轻盈地滑过她的锁骨。泛红灼热的脸颊，有些顾忌地贴上久美子的手臂。<br>「久美子。」<br>丽奈只说了这三个字，就突然抱紧久美子的身体。隔着布料传来的柔软触感，令久美子脸红心跳不已。丽奈的手绕到久美子背后，用力地抱紧她。久美子的手臂也提心吊胆地绕到她背后。<br>「久美子。」<br>丽奈再度喊她的名字。语气太过于急切，久美子慢慢地拍抚她纤细的背。隔着制服也能勾勒出她的脊椎骨。久美子缓缓地描摩着那条线，触到内衣的位置就停了下来。<br>「你也觉得错在我吗？」<br>「不觉得。」<br>「真的吗？」<br>「嗯。」<br>「是吗。」<br>那就好……丽奈说完这句话，脸埋进久美子的肩窝。长发在眼前随风飘扬。在影阴覆盖的空间里，没有任何东西能照亮丽奈。<br>两人动也不动地过了好一会儿，丽奈终于心满意足地放开久美子，有些害臊地抓着脸，然后一屁股坐在楼梯上。<br>「快点，你也坐下。」<br>丽奈说得理所当然，久美子也在她的旁边坐下。久美子不小心踩到她的裙子，丽奈丝毫不以为意，藏青色的裙子底下露出柔软的大腿。<br>「你愿意听一下我的故事吗？」<br>「我有权利拒绝吗？」<br>「没有。」<br>她满脸笑意地倾身靠向久美子，其实还满有重量的。<br>「我爸爸是职业的小号演奏家。」<br>「咦！是吗？好厉害。」<br>「因为是我自豪的爸爸嘛。」<br>她引以为傲地轻笑一声。<br>「我爸爸和泷老师的父亲从以前就是好朋友。」<br>「泷老师的父亲？」<br>「嗯。名叫泷透，是非常有名的管乐老师，经常在全国大赛拿下各种金奖。」<br>「咦，泷老师的父亲是那么了不起的人吗？」<br>「很了不起喔。向透叔叔学习，是我从小到大的梦想。」<br>丽奈沉浸在回忆里，陶醉地闭上双眼。<br>「可是，透叔叔年纪大了，在我升上高中以前就退休了。」<br>「啊，难不成你是因为……」<br>「没错，因为透叔叔退休了，我退而求其次地想接受他儿子泷老师的指导，所以才特地来念这所高中。」<br>她为何会选择北宇治。长久以来埋藏在心中的谜团，终于得到了解答。然而，还有一个问题。久美子问道：<br>「可是，你怎么知道泷老师会来北宇治教书？他今年才来这所学校任教不是吗？」<br>「那是因为我稍微借用了一下我妈的力量。你不要告诉别人喔，我比泷老师更早知道他要来这所高中教书。」<br>「这是怎么回事，好可怕。」<br>丽奈露出莫测高深的笑容，久美子也不再继续追问。丽奈发出愉悦的笑声，突然坐起身子，仰望久美子的脸。在她的凝眸深处，晶晶亮亮地仿佛有满天星子飞舞。她的脸颊依旧泛红紧紧地握住久美子的手。<br>「我喜欢泷老师。」<br>「……什么？」<br>「啊，不是like，是love喔。」<br>呃，那才糟吧。久美子望着她害羞的表情，愣愣地想着。算了，大家都说爱情没有年龄之分，所以年纪就算差到一轮以上或许也不构成问题。<br>丽奈微微地眯着眼，艳红的双唇勾勒出一道扭曲的弧线。<br>「所以啊，我不能容许因为自己而让泷老师的风评变差。」<br>低沉的嗓音清晰地回荡在两人独处的空间，久美子将视线移向楼梯的方向。通往屋顶上的门为了不让人跳楼而锁得紧紧的，同时也阻断了通往外界的门。<br>「……你要把独奏让给香织学姐吗？」<br>「不要。」<br>答得斩钉截铁。<br>「可是这么一来，大家又要说话了。」<br>丽奈对久美子的担忧嗤之以鼻。只见她双手扠腰，笑得无所畏惧。<br>「那种流言蜚语，靠实力让他们闭嘴就好了。」<br>丽奈毫不拖泥带水的回答，让久美子整个人都被震慑住了。她之所以敢说得这么笃定，是因为对自己的才能有绝对的信心。那是久美子绝对无法拥有的自信。她的身影实在太耀眼了，久美子不由得移开视线。<br>「说的也是，丽奈一定没问题的。」<br>久美子说道，暧昧地微微一笑。丽奈似乎很高兴地眯细了眼眸，拉着久美子的手站了起来。她那柔软的掌心，冰冷得令人心里一凛。<br>久美子与丽奈在途中道别，回到乐器室。音乐教室里的人几乎都已经走光了，只剩打击乐器的成员跟平常一样在练习。丽奈已经回到小号的分组练习教室了吧，回到那个优子他们也在场的地方。多么坚强的人。久美子不由得佩服起来。<br>提着粗管上低音号走在走廊上，突然有个声音从头上降下。抬头一看，有人正在楼上的楼梯间讲话。久美子没有要偷听的意思，但熟悉的嗓音还是令久美子停下脚步。是香织与明日香。<br>「刚才好像吵得很凶呢？」<br>「是优子她……」<br>「因为她很喜欢你嘛！」<br>「嗯，我是很高兴……可是也有很多伤脑筋的地方呢！」<br>她的回答令明日香开怀地放声大笑。<br>「你够了喔！」耳边传来香织闹别扭的声音：「现在不是笑的时候吧？」<br>「啊，抱歉、抱歉。小号组的气氛现在怎么样？」<br>「感觉糟透了。丽奈还是一如往常地练习，但优子好像一直很心浮气躁的样子。」<br>「真希望她不要在这个时期闹事啊！可以不要因为小号搞得内部分裂吗？」<br>「……抱歉。」<br>「算了，这并不是香织的错。」明日香咕哝了一声：「太受欢迎也很困扰呢。」<br>她的评语引来香织的叹息，然后突然压低了说话的声音。夹杂着叹息的嗓音，似乎还含着水气。<br>「明日香……」<br>「嗯？」<br>会不会是不该听见的内容啊？久美子想归想，但八卦的天性挡住了她的去路，而且事到如今也无法再转身离开了。<br>「明日香认为谁比较适合？」<br>「独奏吗？」<br>「嗯。」<br>香织以甜如蜜的朦胧声线附和。<br>「我认为应该由吹得比较好的人来胜任喔。泷老师好像就是以此为标准决定人选的。」<br>明日香回答。她说的话没有一个字是错的，却引来香织不服气的反弹。<br>「你是说，丽奈吹得比较好吗？」<br>「那不是我能决定的事。」<br>「你又这样打马虎眼。」<br>轻微的撞击声。大概是香织开玩笑地捶了明日香一记吧。<br>「就算是开玩笑，我也不希望明日香说这种话。」<br>「哪种话？」<br>「……丽奈吹得比我好。」<br>「那种话我一句也没说啊。是你自己说的吧？」<br>明日香轻轻一笑。或许是无法反驳，香识苦笑着不知回了些什么。对话突然变成小女孩之间的斗嘴。久美子皱眉，冷不防从背后响起一把声音。<br>「久美子，你在这种地方做什么？」<br>「哇啊！」<br>惊吓地回头一看，只见叶月抱着低音号站在面前。<br>「没、没什么！」<br>「是吗？那就好。」<br>或许是不怎么感兴趣，叶月没再继续追问。「快点走吧。」在她的催促下，久美子也往分组练习的教室前进。再怎么竖起耳朵，也已经听不见学姐们的悄悄话了。<br>结业典礼也平安无事地落幕了，北宇治高中终于迎来了暑假。运动系的社团正为了夏天的大赛在操场及体育馆拼命练习。耳边传来响彻走廊及中庭的吆喝声，久美子总觉得有些心烦意乱。<br>管乐社的练习也随着进入最后冲刺而变得越来越吃重。平常的假日练习是从早上九点到下午五点，但是基于大赛将近的理由，延长到晚上八点。社员全都怨声载道地重复着合奏与练习。在一再地反复练习演奏曲的过程中，回过神来，旋律已经深入骨髓了。就连洗澡的时候、躺在床上的时候，也会无意识地吟唱着乐谱的自己，令久美子有些害怕。<br>「呃，正式比赛的日期定下来了。」<br>当基础练习与调音告一段落，泷立刻以笑脸宣布。所有人的视线全都一起望向顾问。<br>京都大赛的管乐赛共分两天举行。A部门于八月五日由约三十组团体、第二天八月六日约十组团体演奏，其中能晋级关西大赛的只有前三名的学校。演奏顺序由抽签决定，这个只能交给命运决定的顺序却至关重要。万一抽到太前面的顺位，因为上场的时间较早，势必会缩减练习时间，所以比较不利。不过，光是如此也不足以影响评价就是了。<br>「北宇治高中从第二天的十一点开始。顺序是在立华高中后面。」<br>那一瞬间，社员们全都发出错愕的叫声：「咦！」接在名校后面，马上就会被比较，所以并不是太理想的顺位。<br>「没问题的。」<br>泷微微一笑。<br>「这次几乎没有高中选择〈娥眉月之舞〉为指定曲，自选曲也没和其他学校重复，评审应该会以新鲜的心情来听我们的演奏。更何况，我不认为北宇治高中的演奏会输给立华高中。」<br>顾问的话令大家的眼睛一亮。或许是因为平常已经习惯被他数落得一无是处，大家对泷的称赞一向很没辄。<br>比赛的分数由评审决定。这份评审的工作挺辛苦的，同一首曲子听上好几遍也会腻。虽说是从五首曲子中选出一首指定曲，但选曲的理由总难免倾向以难易度为标准。如果是抢手的指定曲，可能还会发生十所学校连续演奏同一首曲子的情况。从这个角度来说，北宇治高中选择几乎没人要的指定曲说不定比较有利。<br>「顺便告诉你们，立华高中的指定曲是〈给军乐队的组曲〉，自选曲是〈宇宙的音乐〉。」<br>这句话换来了更错愕的悲鸣。提到菲利浦·史巴克作曲的〈宇宙的音乐〉，是以高难度闻名的曲子。几年前，福冈某所高中在全国大赛上露了一手连专业人士也自叹弗如的演奏，蔚为话题。当时还是国中生的久美子跟顾问要了音档，储存在播放器里，日夜播放。立华高中既然是行军游行的超强校，比赛也很厉害，即使是高难度的曲子，肯定也能表现得很完美吧。<br>泷苦笑着说：<br>「不用那么害怕啦。我们只要以自己的方式演奏就行了。努力一定会有结果的。我知道各位有多努力。」<br>「老师！」欢呼声四起。今天的泷有点不太对劲，简直是赞美的跳楼大拍卖。泷对浮现出怀疑表情的久美子投来一瞥，云淡风轻的眼神令久美子心里一跳。随即他又露出若有深意的笑容，视线转回正前方。<br>「那么开始合奏吧。先从头到尾吹一遍。」<br>高举的指挥棒让所有人的表情瞬间绷紧。久美子拿好粗管上低音号，将吹嘴凑到唇边。<br>结束练习后，原本喧闹无比的校舍也迅速归于寂静。再加上已经晚上八点，学生们早就回家了，使得学校感觉起来有点阴森。杳无人烟的走廊，无声的黑暗里，只剩逃生梯还点亮着绿色的灯光。筛落在走廊上的阴影令人不寒而栗，久美子听到细微的声响，停下脚步。<br>「呜呜……」<br>为什么会把钱包忘在分组练习的教室里呢。久美子一面前进，一面诅咒自己的粗心大意。幸好教职员办公室的灯还亮着，行政人员应该还没走吧。赶快借到钥匙，赶快拿回钱包。久美子下定决心，飞也似地冲向教职员室。<br>「打扰了……」<br>老师已经都回去了，职员室比平常还要昏暗。偌大的办公室，只剩某个角落还开着日光灯。谁还没回去呢？久美子视线来回巡逡地寻找还留在办公室里的人，突然间咖啡的香味扑鼻而来。<br>「你在干什么？」<br>久美子回头一看，手里拿着马克杯的泷惊讶地看着自己。橘色的杯子冒出白色的雾气。<br>「已经八点半啰，这个时间还在外面闲晃有点太晚了。」<br>「那、那个，我把钱包忘在分组练习的教室了。」<br>这句话让泷惊讶地叹了口气。<br>「黄前同学吹的是粗管上低音号吧，练习场所是三年三班的教室吗？」<br>「是、是的。」<br>「我明白了。我陪你，快点去拿回来吧。」<br>他把杯子放在桌上，拿出挂在墙上的教室钥匙。<br>「咦，可以吗？」<br>「什么东西可不可以？」<br>「不是，那个，陪我去拿……」<br>久美子的欲言又止让泷难以理解地歪着头。<br>「你想自己一个人去吗？」<br>「不、不是，我不是这个意思。只是，怕耽误到老师的工作……」<br>「哦，不要紧喔。我只是在准备明天的合奏。」<br>泷展颜一笑，露出和善的表情。合奏时的他与平常的他为何有这么大的落差呢？久美子无法不这么想。泷基本上是个很好相处的人，只要别扯到音乐。<br>泷与久美子走在静悄悄的走廊上。这还是第一次这样跟他说话。久美子心想，沉默地跟在顾问身后。<br>「社团活动开心吗？」<br>正在发呆的时候，泷先开口了。久美子赶紧点头。<br>「开、开心。」<br>「这样啊，那就好。事实上，我被训导主任骂了，说我让你们练习的时间太长了。」<br>「是吗？」<br>「是啊。因为三年级就要考试了，要我别把大家逼得太紧。不过，我也没放在心上就是了。」他微笑着说。<br>呃，还是稍微放在心上一点吧。久美子心想，但因为对方是长辈，她便吞了回去。<br>「黄前同学也得用功学习喔。」<br>「我、我会的。」<br>「不过我高中时代的化学糟到不能再糟了，所以也没资格说这种话。」<br>两人份的脚步声回荡在静悄悄的走廊上。几乎连一盏灯都没有的校舍，暗得伸手不见五指。久美子感到口干舌燥，为了排遣涌上心头的不安，抬头看着泷的脸。<br>「……老师真的认为我们可以进军全国吗？」<br>他似乎没料到久美子会有此一问，有些震惊地停下脚步。<br>「黄前同学，难道你认为去不了吗？」<br>「不、不是，我不是这个意思……」<br>「不可以在这个节骨眼失去信心喔！凡事都要凭着一股气势。」<br>泷再次迈开脚步。久美子跟着他，心想这个人真令人猜不透啊。丽奈就是喜欢泷的这种地方吗？<br>走到教室前，泷将钥匙插进钥匙孔里，转动右手，门发出机械性的「喀嚓」一声。<br>「好了，打开了。」<br>「谢、谢谢。」<br>久美子急忙打开教室里的灯。只见钱包还好端端地躺在练习时的座位上，赶紧拿起来收好。<br>「找到了。抱歉，给老师添麻烦了。」<br>「没事没事，一点也不麻烦。」<br>他看起来丝毫不以为意，再次锁好教室。久美子心不在焉地看着他大大的手、行云流水的动作，说出不经意浮现脑海的问题。<br>「老师为什么会成为管乐社的顾问？」<br>「你想知道吗？」<br>泷有些疑惑地垂下眉尾，脸颊微微泛红。很少看见他出现这种反应，久美子在好奇心的驱使下，用力地点头。<br>「想知道！」<br>泷沉思了半晌，终于下定决心似地耸耸肩。<br>「我父亲是管乐老师，大概是受到他的影响。」<br>「老师的父亲是泷透先生对吧？」<br>「哦，你知道啊。」<br>泷露出意外的表情。久美子避开他的视线说：「是丽奈告诉我的。」<br>「这么说来，黄前同学和她是好朋友呢。」<br>「啊，是的。她对我很好。」<br>是久美子说了什么可笑的话吗？只见泷呵呵笑了。<br>「我的父亲直到十年前都在这里当顾问，所以我分发到这所高中的时候还满高兴的。」<br>「这样啊。」<br>这倒是第一手消息。看着久美子惊讶的表情，泷愉悦地点点头：「就是这样。」原来北宇治高中的黄金时代是由泷的父亲一手打造的。<br>「老师从小就想当老师吗？」<br>泷静静地微笑着回答久美子的问题：<br>「没有，完全没有这个打算。我小时候是个梦想变来变去的小孩，看了漫画就想当漫画家，看了电影就想当导演，也曾经想当演员，甚至还想当陶艺家呢！」<br>「这、这还真是……了不起的志向啊。」<br>「可是……」<br>泷说到这里，露出意味深长的眼神。<br>「可是，最后还是选了这份工作。」<br>「……不后悔吗？」<br>「天晓得呢。」<br>走廊上响起笑声。他总是笑笑的。冷不防，久美子想到这件事。<br>「谢谢老师。」<br>回到教职员室，久美子先向泷道谢。「不客气。」泷微微颔首。放在桌上的咖啡已经凉透了。<br>「已经很晚了，回家路上要小心。」<br>「好的。」久美子点点头，握紧皮包。她将钱包硬塞进最里面的口袋，这次不能再搞丢了。<br>「啊，黄前同学。」<br>「什么事？」<br>泷叫住已经往回家的方向跨出脚步的久美子。回头一看，他正以严肃的表情直勾勾地盯着她看。校舍里黑漆漆的，唯有这个地方灯火通明。廉价的白炽光从办公室的窗户无声地往外延伸。他就站在那里，仿佛正要一脚踏进那片阴影。给人柔和印象的双眸，唯独此刻燃烧着锐利的光芒。<br>从他口中流泄出坚定的字句。<br>「我是认真的喔。我真的认为如果是这些成员，一定能打进全国大赛。」<br>久美子倒抽了一口气，顿时理解过来，这句话是刚才那个问题的答案。老师相信他们办得到。一想到这里，她内心深处泉涌而出一股温热的情绪。喉咙痒痒的。分不清自己的心情是欣喜还是羞耻，久美子坦率地对泷说：<br>「我，比赛会加油的！」<br>没有任何虚假的真心话，让顾问静静地绽出笑容。<br>随着比赛一刻一刻地逼近，社团内的气氛也变得充满紧张感。就连起初认为不可能演奏得好的指定曲，回过神来也已经会吹奏了，真是不可思议。演奏的完成度越来越高，泷的指导也从音程或节奏等基本内容，逐渐变成对表现手法的要求这种高难度的东西。为了达到泷的要求，大家无不拼命地卯足了劲。乍看之下，社团好像团结一心了，但是也有人逆势而为地硬是要制造对立。<br>「乐谱上不是标示了这里要富有感情地演奏吗？为什么旋律这么支离破碎？要更平滑地演奏才行。」<br>「是！」<br>泷不耐烦地用指尖敲打着乐谱，被他纠正的小号组成员全都打起精神来应声，脸上的表情却是无精打采的憔悴。这也难怪，已经是第十三次针对这部分的指导了，就连只是在一旁听着的久美子等人，也都开始失去耐性。<br>「要练到会为止。」<br>似是看穿了众人的想法，泷笑着先发制人。小号组的成员无不如临大敌地凝视着乐谱。<br>「打击乐器与小号再一次。」<br>「是！」<br>今天第十四次的演奏。在久美子听来没问题的音乐，泷的耳朵却能听出不同。他的听力非常可靠，就连音程细微的差异也能听得分明，但是轮到自己的演奏接受指导时，只会觉得战战兢兢。<br>「可以了。一个一个轮流吹吧。从中世谷同学开始。」<br>「是。」<br>遵照泷的指示，小号组的成员轮流演奏那一段。<br>「高坂同学，可以请你再吹一次吗？F的音有点高。」<br>泷的提醒让周围响起不怀好意的窃笑声。丽奈面无表情地应了声「好」，又吹了一次相同的段落。<br>「保持现在这样的音准就及格了。下一位，吉川同学。」<br>泷的指导已经移向下一位社员。刚才的笑声还萦绕在久美子耳际，阴魂不散。从透过甄选决定小号独奏人选的那一天起，丽奈与高年级之间的裂痕就越来越深，连其他的社员也被卷了进去，形成一股巨大的漩涡，搞得社团的气氛乌烟瘴气。为香织出头的高年级生与拥护丽奈的低生级生，一触即发的双方目前之所以还能勉强保持平衡，是因为心里有参加比赛这个共同目标吧。这样的话，当比赛结束以后，社团会变成怎样呢？久美子茫然地想着这件事，用布擦拭着乐器。<br>「那么，所有人从那里再吹一次。」<br>「是！」社员们有些自暴自弃地应声。<br>「真是气死人了！」<br>走在一旁的叶月毫不掩饰她的不开心，咬牙切齿地说。<br>「你是指香织学姐的事吗？」<br>绿辉天真烂漫地反问。这么单刀直入地提起这个话题，令久美子愣了一下。她急忙左顾右盼，还好其他人都已经回家了，不在学校里。久美子缩着脖子在无人的放学路上前进。<br>「小绿是怎么想的？」<br>「什么？你是指香织学姐派还是高坂同学派吗？」<br>「那还用说吗？当然是要支持高坂同学啦。我喜欢香织学姐，但是不喜欢她身边的人。」叶月不高兴地说。<br>「嗯，可是小绿觉得这也是没办法的事。让学妹抢去独奏的机会，任谁都会觉得很火大吧。因为这是香织学姐最后一次比赛了。」<br>「怎么，你是香织学姐派的吗？」<br>叶月的质问让绿辉猛摇头。<br>「我不是这个意思。如果想在比赛的时候拿高分，当然要让高坂同学独奏。放眼全国，能吹得像她那么好的人，大概也没几个了。只不过……」<br>绿辉说到这里，盛大地叹了一口气。「只不过？」久美子反问。<br>「我是说这样真的好吗？」<br>「什么意思？」<br>「小绿认为还有比比赛结果更重要的事。只用实力决定一切，总觉得有点悲哀。」<br>她淡淡地继续开口。久美子看着她低垂的纤长睫毛，静静地附和。<br>「小绿啊……国中三年一直是全国大赛的金奖。再加上圣女是女校，像这种明争暗斗的事非常多。大家在决定独奏或A部门成员的甄试上互不相让，不管是被学姐排挤的学妹，还是在背后说学姐坏话的学妹都有，而且还为数不少。虽然基本上大家的感情都还不错。」<br>「哇！好讨厌的感觉。」叶月脸色发青地说。<br>「小绿从那个时候就有一种想法。要是自己当初不是选择这所国中，而是读一般在地区大赛就止步的学校，加入那边的管乐社，大家虽以金奖为目标，但还是悠悠哉哉地参加社团活动，不晓得会怎样。或许与全国大赛无缘，但肯定也很快乐吧！」<br>「你是想说比赛的结果并不能代表一切吧？」<br>久美子问道。绿辉有一瞬间做沉思状地抱着胳膊，然后不假思索地点点头。挂在书包上的猫咪钥匙圈轻轻地摇晃。<br>「嗯！大概，就是这么回事。」<br>绿辉笑咪咪地回答，叶月对此投以目瞪口呆的视线。<br>「那当然也没错，但事情显然没有这么简单吧。比赛如果不能拿下好成绩，还是很没意思吧。」<br>「可是啊，我认为就算让香织学姐独奏，应该也能拿下不错的成绩喔。严格来说，是高坂同学吹得太好了，香织学姐其实也不差。」<br>「你果然还是认为，应该要由香织学姐独奏啰。」<br>「因为只要让香织学姐独奏，眼前的纠纷就能圆满落幕了，不是吗？高坂同学等到明年再独奏不就好了吗？」<br>「这么一来，高坂同学未免也太可怜了，为何非得把独奏的机会让给吹得没自己好的人。」<br>「小绿最讨厌这种思考模式了！有什么关系，就让给拼命努力的人嘛。」<br>「你要这么说的话，高坂同学也很努力练习啊。」<br>「可是会吵成这样的原因就出在高坂同学身上啊。」<br>「这又不是高坂同学的错！」<br>「话是这么说没错，但是除此以外没有其他解决方法了嘛！」<br>绿辉和叶月平常感情非常好，但也常会因为一些鸡毛蒜皮的事吵得不可开交。对于总是卡在两人之间当夹心饼干的久美子而言，实在是不堪其扰。<br>「对了！久美子是怎么想的？」<br>「对啊！久美子是怎么想的？」<br>两人异口同声地问她，久美子的脸下意识地绷紧了。像这种时候，最好不要赞同任一方的说法。久美子视线东飘西荡地想带开话题的同时，有个人闯入了她的视线范围内。<br>「啊！」<br>两人也随久美子望向同一个方向。<br>眼前是正从车站前的便利商店走出来的秀一。他一看到她们，脸色就变了。<br>「啊，是冢本。」<br>叶月说着，「喂！」地向他招手。若久美子记得没错，她明明在两个月前被他拒绝了，为什么还能这么若无其事地面对他呢。<br>他一看到久美子，马上逃也似地又躲回便利商店里。虽然知道他正避着自己，但表现得这么明显，不免令人生气。<br>「哇！久美子的表情好可怕！」<br>绿辉幸灾乐祸地伸出食指，戳了戳久美子的眉头。还满痛的。叶月则是在一旁偷笑。<br>「那个没骨气的家伙。」<br>「叶月你的表情也好狰狞！」<br>绿辉玩弄着久美子的脸，开心地嚷着。久美子挥开她的手，大大地叹了一口气。心想那家伙的态度固然令人火大，但也顺势带开话题，所以就算了。<br>「谢谢老师！」<br>社员们一致地鞠躬道谢。难得这天的练习在太阳还没下山的时候就结束了。理由非常简单，因为泷出差去了。已经很久不曾白天就能收工，久美子心情愉悦地经过走廊。<br>「啊，久美子，辛苦了。」<br>已经收拾好东西要回家的丽奈走过来。<br>「你要回去了？」<br>「嗯，久美子呢？」<br>「我再待一会儿就回去。」<br>「这样啊。那就明天见了。」<br>「嗯，明天见。」<br>丽奈笑着挥挥手。久美子也对她挥手道别。她的身影一消失，周围的学长姐们马上就开始交头接耳地讲悄悄话。<br>那家伙已经回去啦？哪有比学长姐先回去的。比赛快到了还是一派从容嘛。<br>令人不快的窃窃私语萦绕在耳边。久美子假装没听见，走向开放的教室。她一心只想尽快远离那个地方。最近总是这样。总是会有人聚集在丽奈经过的地方，在背后批评她。这也得忍到比赛结束吗？<br>北宇治高中的南校舍一共有四层楼，若爬楼梯上去，等于是相当大的运动量。久美子平常都在北校舍，但是今天想找个没人的地方练习，所以就跑来了。南校舍四楼的走廊没什么人，是最适合独自练习的场所。<br>「……咦。」<br>上楼的途中，耳边传来熟悉的旋律。久美子下意识地停下脚步，是小号柔和的音色，这个旋律是自选曲的独奏部分。<br>久美子躲在墙壁后面，悄悄地往走廊上看。看样子，已经有人先到了。香织正在久美子中意的地方看着乐谱练习，背脊伸得直挺，视线的前方不是谱面，而是遥远的方向。看得出来，她已经将独奏部分的乐谱背得滚瓜烂熟。<br>「……为什么？」<br>就在久美子不经意脱口而出的瞬间，有人从背后拍了拍自己的肩膀。久美子惊讶地回头看，抱着两瓶矿泉水的明日香正把食指抵在唇瓣上，微微一笑。明日香没有说话，轻轻地对她招手。久美子茫然地看着她从楼梯上走下来，猛然回过神，急忙跟在她背后。<br>「你都看到了？」<br>一抵达三楼，明日香就露出不怀好意的笑容。久美子有些慌张，不知道该怎么回答。<br>「对、对不起。很糟糕吗？」<br>「呵呵，我开玩笑的。」<br>明日香说完，在楼梯上坐了下来。她手里的矿泉水大概是为香织准备的，接下来打算两个人一起练习吧。<br>「久美子怎么会在这里？」<br>「我想在这里练习……」<br>「自主练习吗？不好意思啊，我们先来了。」<br>说是这么说，但她丝毫没有抱歉的样子。将黑发扎成一束的学姐伸了个大大的懒腰。<br>「吓了一跳吗？」<br>「咦？」<br>「我是指香织的事。她一直偷偷地在练习独奏的部分。要保守秘密喔！」<br>明日香微微地眯起眼。隔着透明的镜片，不难发现她的眼里没有一丝感情。<br>「香织学姐……果然还是……那个……」<br>「好像还不肯放弃呢。」<br>「这、这样啊。」<br>久美子不敢看她的表情，只好凝视自己的脚尖。失去安身之地的粗管上低音号，不知所措地依偎在久美子身旁。<br>「久美子和高坂同学很要好吧。」<br>「啊，嗯……」<br>「所以才会露出这么古怪的表情吗？别担心，反正正式上场的时候一定是由高坂同学独奏。」明日香以云淡风轻的口吻对她说。<br>「可、可是……」<br>「香织其实也很清楚高坂同学吹得比她好的事。尽管如此，她还是不肯死心。所以就让她练习吧。」<br>「不，我并没有要责怪她的意思，只是……」<br>「呵呵，你在同情她吗？觉得香织学姐很可怜？」<br>明日香的语气明显长满了刺，久美子不由得吞了一口口水。明日香拿起一瓶矿泉水，扭开瓶盖，里头的液体微微地摇晃着，阳光反射在透明的水面。<br>「周围的人都搞错了，香织并不是想博取大家的同情，也不是使性子想自己独奏。她只是想要个能让自己心服口服的结果。」<br>「心服口服……是吗？」<br>「是的。」<br>明日香说道，喝了一口水。雪白的喉咙从领口探出来，咕嘟咕嘟地上下震动。该问还是不该问？久美子迟疑了好一会儿，然后慢慢地开口。<br>「……学姐站在香织学姐那边吗？」<br>这时，明日香暂停喝水。随着瓶口离开唇畔，水滴在地板上晕染出黑色的阴影。她用手背粗鲁地擦拭嘴角，有些伤脑筋地笑了。<br>「你怎么会问这种问题？」<br>「夏纪学姐说明日香学姐是特别的……我只是有点意外。我还以为你这次也会保持中立……」久美子的质问让明日香夸张地耸耸肩。<br>「她未免也太看得起我了。」<br>「会吗？」<br>「会啊。不过啊，她说的倒也没错。」<br>「什么意思？」<br>明日香对歪着头疑惑的久美子嫣然一笑。<br>「我既不站在香织这边，也不站在高坂同学那边喔。因为我是副社长嘛，请不要询问我个人的意见。」<br>明日香说着，站了起来。意思是她的话已经说完了吗？<br>「那、那么，我不会告诉别人的，请告诉我。」<br>「告诉你什么？」<br>「明日香学姐个人的意见。」<br>没想到久美子会问得这么深入吧，明日香的瞳孔有一瞬间放大了，可是马上又被她一贯的笑容覆盖过去。她状甚愉悦地轻哼出声，食指贴在红润的唇瓣。<br>「你保证不说出去？」<br>「我、我尽量。」<br>「真老实。」<br>保特瓶在明日香手中发出哗啦哗啦的声响，白色泡沫浮现在透明水面上，转瞬间消失得无影无踪。她纤长的睫毛忙碌地上下颤动着，宛如黑曜石的瞳孔猛地瞥向久美子。<br>「老实说，我打从心底觉得无所谓喔。不管由谁独奏，都是无关紧要的小事。」<br>由于她的语气实在太过于冰冷无情，久美子不禁僵在当场。看到她的反应，明日香提起嘴角，轻拍久美子的肩膀，送客似地推了她的背一把。<br>比久美子还要修长的指尖，轻盈地在半空中挥舞。已经无法再从少女紧闭的口中问出什么了。久美子无言地鞠个躬。「再见。」明日香丢下这句，消失在楼梯的另一边。想必是要去找香织吧。久美子目送她离去后，也转身离开。<br>久美子默默地走下没有半个人的楼梯。明日香脸上肯定还挂着与平常无异的笑容吧。久美子想问她的背影：「你其实想站在香织学姐那边吧？」可是她问不出口。自己肯定还没有能力剥下她那张厚厚的面具。久美子轻声叹息。小号纤细的音色仍萦绕在耳边，久久不肯散去。<br>时间来到了比赛前一天。为了练习入场、演奏、退场，这天他们借用附近的小型音乐厅。黄檗山附近的市营音乐厅可以用很便宜的价格租借到，是学生的好帮手。<br>「吵、吵死了！」<br>叶月捂住耳朵大喊。B部门的人将于八月八日，也就是A部门正式比赛两天后的出场，今天的任务只是协助运搬乐器，以及欣赏A部门的演奏。或许是为了行动方便，叶月穿着运动服，对响彻音乐厅的警铃声露出厌烦的表情。<br>「不可以嫌吵喔。虽然真的很吵。」<br>梨子在背后露出为难的苦笑。打击乐器正在音乐厅里进行最后的调整。说到〈东海岸风情画〉最具震撼效果的乐器，莫过于最后响起的警铃声。也有学校在这个部分用上了警笛，但泷特地向其他学校借来了消防车专用的手摇式警铃。据他所说，声音的重量截然不同。由于警铃会响彻云霄，所以绝不容许失误。背负着这个重责大任的一年级打击乐器成员，正以一脸泫然欲泣的表情接受泷的指导。<br>「久美子，可别因为紧张而失败喔！」<br>明日香在一旁的座位露出坏心眼的微笑。久美子一面为吹嘴上油，以乖巧的表情点头。<br>「我、我会尽力的。」<br>「明天终于要正式比赛了！就连小绿也开始紧张起来了！」<br>绿辉乐不可支地大声嚷嚷。她真的不知紧张为何物耶，心脏肯定比任何人都大颗吧。<br>「冷静下来，又不是你们要独奏，好好地享受音乐就好了。」<br>夏纪笑嘻嘻说着风凉话，望向她们。卓也在她背后点头。<br>「……加油吧。」<br>「我会加油的。」<br>明明还只是彩排，为什么要鼓励自己？久美子思考着这个问题，尽可能胸有成竹地回应。<br>久美子看了其他的声部一眼，大家都冷静地进行必要的练习。乐器奏出的旋律此起彼落地相互交融，无数的声音粒子变成杂音，腾空而起。听在第三者耳中，或许会觉得是噪音，但是置身于漩涡当中时，却没有任何感觉，真是不可思议。<br>音乐厅只有舞台上亮着灯，观众席上空无一人。光是这么小的会场，心脏就跳得这么快，正式比赛的紧张感一定非同小可吧。久美子从以前就很不擅长应付大场面，会紧张得脑子里一片空白。<br>每年的比赛都在位于京都市的京都会馆举行。会场很大，比赛当天会挤满众多的学生。就连现在这一瞬间，会场也正在举行比赛吧。今天是京都大赛的第一天，究竟是哪所学校得到比较高的评价呢？既想知道，又不想知道。心情真复杂。<br>「好了，各位。为了确认打击乐的部分，从头演奏一遍吧。」<br>确定警铃没问题之后，泷站上指挥台。所有人迅速地开始移动。刚才的嘈杂就像骗人的一样，音乐厅瞬间安静下来。几乎要刺痛耳膜的寂静，沉甸甸地压在久美子的肩上。<br>「不好意思……」<br>冷不防，会场角落举起一只手。那个柔和的声线是久美子也很熟悉的声音。<br>「中世谷同学，什么事？」<br>泷望向香织。<br>「我希望能再进行一次小号的甄选。」<br>香织说道。这句话让社员们一口气喧闹起来。都到了这个节骨眼……久美子的心里一颤，往丽奈的方向望过去。她的表情与平常无异，唯有放在乐谱上的指尖微微颤抖着。<br>「可是没有足够的时间为小号组的全体成员进行测验喔。因为可以使用这个音乐厅的时间已经决定好了。」<br>泷的话让优子一马当先地站起来。<br>「我并不想独奏，所以我自动放弃。」<br>在她的带动下，其他的二、三年级也纷纷站起来表态。丽奈动也不动。或许是为了掩饰动摇，只是目不转睛地凝视着乐谱。泷垂下眼帘思索，最后叹了一口大气，看了音乐厅里一圈，方才的喧闹已如云雾般散去。<br>「我明白了。那么现在就由中世古同学与高坂同学，针对独奏的部分进行第二次甄选……可以吗？」<br>「可以！」<br>香织用力地点头。<br>说道自选曲〈东海岸风情画〉第二乐章的重头戏，一定是短号的独奏。美妙的旋律牵引着壮大的主旋律，正因为与第三乐章比起来算是比较慢的曲调，音色之优美才显得更加重要，临阵磨枪的技巧是行不通的。<br>「那么，请中世古同学先开始演奏。请与开头部分需要吹奏的同学一起演奏，可以吗？」<br>「可以。」<br>泷挥下指挥棒。香织细致又温柔的音符充满了整个音乐厅。不管是高音部分，还是很难吹得平滑的音符与音符的接缝处，全都完美无缺，连一个缺点也找不到。她的音色何其闪亮，令人怦然心动。久美子闭上双眼，沉醉其中。香织的演奏比之前提升好几个档次。从她的演奏中可以听出背后辛苦的努力痕迹。<br>「进步好多呢，我很惊讶。」<br>演奏结束，泷微笑赞许。香织紧绷的表情一口气绽放开来，其他人也自然而然地送上掌声。接下来要演奏的人会很吃亏吧，久美子心想，望向丽奈的方向。只见她按住心脏的地方，大口地深呼吸。丽奈也会紧张啊。这么理所当然的事，久美子居然现在才想到。<br>「那么，接着轮到高坂同学。准备好了吗？」<br>「好了。」<br>丽奈拿起短号。抬头挺胸的身影。直视前方的视线。泷的指挥棒一动，丽奈便深深地吸进一口气。<br>当第一个音符从号口发出的瞬间，久美子的耳朵明确地捕捉到与刚才的差异。脑门受到有如一记重拳般的冲击。高音振动着空气，穿透久美子的耳膜。那是充满张力的音色，但是又保有美丽的音频，不偏不倚地穿透整个音乐厅。明明看着同一套乐谱、重现出同一个音符，两人的演奏为何会有如此大的不同呢。那种令人麻痹的音色，让久美子不由自由地咽了一口口水，心脏颤抖，鸡皮疙瘩竖起。平滑的旋律几乎感觉不到音符的转换，每个音都缠绕着让人浑身发烫的余韵。<br>即使在演奏结束之后，音乐厅里依旧静得连一根针掉地上的声响也听得见。没有人动弹。没有人说话。空气里还残留着前一刻的演奏渣滓。<br>这未免太……久美子心想。这未免太狡猾了。这种演奏水准的人居然和自己同一个年级。<br>「谢谢你。」<br>泷的话让丽奈放下乐器。至此，社员才纷纷回过神，开始骚动了起来。仿佛忘了还在合奏中，众人七嘴八舌地讨论着演奏的感想。或许是太兴奋了，每张脸都泛着红潮。<br>「好了，请安静！」<br>泷拍了一下手。闹烘烘的社员终于安静下来。泷不知在乐谱上写了些什么，好半晌才慢条斯理地望向香织的方向，脸上带着笑，静静地问香织：<br>「中世古同学，你要独奏吗？」<br>倒抽一口气的声音此起彼落地响起。丽奈睁大了双眼，露出非常受伤的表情，眼神里充满了不甘心的神色。泷明明很清楚，横亘在丽奈与香织之间那道无法跨越的高墙。为了表示抗议，久美子瞪着泷。尽管如此，泷的表情还是泰然自若，温柔地看着香织。<br>沉默了几秒钟后，香织回答：<br>「不要。」<br>她低下头，泪水也从眼角滑落。<br>「……我无法胜任。」<br>丽奈惊讶地抬起头，香织一瞬也不瞬地盯着学妹。那视线如此强而有力，丽奈罕见地退缩了。<br>「我认为应该由你独奏。」<br>她的嗓音颤抖着，眼眶红通通的。这恐怕是香织的真心话，同时也是与真心相隔十万八千里的情绪。小号在她手中闪烁着不解世事的光芒。丽奈抿紧双唇，微微地低下头，长长的黑发随动作轻泄。<br>「上次……我说了狂妄的话，对不起。」<br>一旁的优子惊讶得目瞪口呆。<br>「没关系。」香织垂下眼帘，「因为你说的是事实。」<br>她的语气实在太真挚了，久美子忍不住想要移开视线。<br>她只是想要个能让自己心服口服的结果。<br>冷不妨，明日香的话在耳边响起。直到这一刻，久美子终于明白她那句话的意思。香织大概也知道，自己的演奏不如丽奈。尽管如此，依旧无法放弃。香织肯定只是想要好好地输一场，想要呈现出压倒性的差距，让自己输得心服口服。为了承认失败，她一路苦练到今天，苦练根本没有机会上场的独奏。<br>「高坂同学。」泷慢条斯理地喊着丽奈的名字。<br>「有。」丽奈反射性地应声，表情依旧绷得死紧。<br>「独奏由你负责。不是中世古同学，而是由你来独奏。」<br>只见丽奈的手指微微颤动，原本有些弯腰驼背的身影瞬间打直。<br>「好的。」她回答的语气里充满了觉悟与自信。<br>泷微微一笑，若无其事地将视线放在乐谱上。<br>「那么请重新打起精神，从头到尾再练一遍吧。」<br>在他的一声令下，合奏重新开始。<br>「你不会不甘心吗？」<br>国中最后的比赛。当时，丽奈是这么说的。平常冷静的她，唯有当时难得地表现出情绪。但久美子只是沉默地看着忍不住呜咽的她，一句话也说不出来。<br>国中时代，会加入管乐社纯粹是惰性使然。既没有运动细胞，也没有其他的兴趣。玩乐器之于她，已经变成一件理所当然的事，害怕从此与音乐断了牵系，所以才选择管乐社。她固然努力地进行社团活动的练习，但也没有多认真，只是因为身边的人都这么做，自己才跟着照做。这个就算被前辈排挤也无法舍弃的容身之处，对久美子而言并不是真的那么重要，只是害怕失去而已。<br>丽奈哭泣的时候，久美子并没有哭。因为久美子对结果并不执着。因为自己并没有特别努力。因为久美子尚未达到那个会流泪的阶段。当时之所以闪避丽奈的视线，就是由于留意到这样的自己。明明是国中生涯最后的比赛，她却……<br>久美子当时一点也不会觉得不甘心。<br>泷说这是最后的彩排。B部门的成员坐在小音乐厅的观众席。雪白的聚光灯集中在舞台上。音乐厅里的冷气开得很强，唯有这个地方热得要死。<br>「要当成是正式比赛来演奏。」<br>「是！」<br>美知惠握着码表站在后台。久美子抓紧金色的粗管上低音号，吸入一大口气。让肺部膨胀，然后又萎缩。<br>「京都府立北宇治高中管乐社。」<br>美知惠代替广播唱名。所有人一起上台，各自走到自己的位置就定位。久美子也把粗管上低音号放在膝盖上就座。<br>泷拿起指挥棒，久美子凝视着他。她耳边传来吸气的声音，瞬间的寂静后，小号的主旋律破空而起。长笛及独奏的旋律也加入演奏，一层一层地迭上去。低音号浑厚饱满的音色震动着空气，就快轮到上低音号了，久美子和明日香一起举起原本横放的乐器。<br>吹入气息，乐音响起。按压活塞，赋予音符变化。光是这么简单的作业就很快乐，但也很困难。久美子注视着指挥棒，拼命地追上曲子的步伐。长笛与单簧管以惊人的速度吹奏出一长串连音。双簧管与低音管的副旋律响起，主旋律从木管移到铜管，然后再回到木管。音频反复着收缩与膨胀的变化，进入最后的高潮。小号的主旋律凌驾于法国号华丽的音色、长号与粗管上低音号强而有力的旋律。激昂的渐强音节之中，所有的音量一口气提升到极限，然后戛然而止。<br>在还残留着指定曲余韵的状态下，社员们将注意力转移到自选曲上。<br>原本安静极致的空间，响起长号的和声，然后是长笛清澈的独奏，紧接着小号也开始独奏。缓缓前进的音乐融化在空气里，构成优美得令人屏息的音色。粗管上低音号适时加入，为其增添淡淡的色彩。声音与声音交织重迭，将音乐渐次往上推升，开始沸腾。演奏先迎来一次壮大的收尾，立刻进入第三乐章。<br>第三乐章由铜管乐器百花齐放的主旋律开始，再加入木管的连音。充满活力的音乐，与指定曲难以理解、令人摸不着头绪的主旋律形成对比。负责吹奏主旋律的乐器令人眼花撩乱地变来变去，交织出绵绵不绝的旋律。声音的每一个粒子都闪闪发光，撞击出轻快的节奏。欢腾的主旋律突然归于寂静，轻柔悠扬的音乐流淌在整个音乐厅里。十分协调的优美旋律，随即又被惊天动地的警铃声盖过。前一刻的静谧急转直下，场内再度回荡着巨大的音量。演奏朝向终点变得越来越慷慨激昂。音乐不断加速，声音的密度剧烈膨胀。他们维持住足以令场面沸腾的热度，全曲进入尾声。当泷的指挥棒宣告结束的瞬间，演奏来到最高潮。<br>「……很完美。」<br>这是泷第一次这么大方地称赞他们，所有人全都不敢置信地看着彼此，坐在前方观众席的B部门成员也纷纷起立鼓掌。久美子自己也认为这是一次完美的演奏。好痛快的感觉。演奏没有一丝错误，过去从未体验过的快感拂过久美子的颈项。她开心不已，演奏好快乐！<br>「明天的正式比赛也要以这种水准上场。没问题的，你们一定办得到。」<br>泷说到这里，把指挥棒放回台上，环视众人的脸。<br>「一定能参加全国大赛喔。」<br>泷自信满满地断言，嘴角浮现出睥睨一切的笑容。<br>要是能参加全国大赛就好了，久美子一直是这么想的。从国中的时候开始，她就一直这么想。但是，那也只是说说而已，从未真正想过要去实现它。因为希望越大，只会让自己丢脸。因为她认为怀抱一个无法实现的梦想，是非常愚蠢的行为……问题是，只把愿望挂在嘴边是不可能实现的。<br>北宇治高中一定能进军全国。<br>仿佛为了坚定自己的决心，久美子握紧拳头。<br>「是！」<br>社员们朝气蓬勃的声音回荡在雪白的聚光灯下。<br>比赛当天，穿着制服的社员全都如临大敌地坐上巴士。一早集合的久美子等人在音乐教室里进行了正式比赛前的最后一次彩排，把乐器装进卡车，检查是否忘记东西。打击乐器不仅重若千金，就连搬运的方法也有规定，光是搬上车就耗掉很多时间。<br>太阳祭的时候，大家明明七嘴八舌地吵得要死，今天的巴士却安静地吓人。是紧张的缘故吧，有些社员的脸色看起来几乎要倒下了。<br>「快看那边！又看到四叶计程车了！今天的演奏一定会成功的！」<br>一旁的绿辉天真无邪地望着窗外。<br>「呵呵，好想赶快演奏啊！小绿昨天太兴奋，根本睡不着！真是太期待了！」<br>「……小绿，你真的好厉害啊。」<br>「咦？有吗？」<br>「嗯，非常厉害喔。」<br>久美子的评语令她表示不解。她的表情就跟平常一样，没有丝毫紧张的神色。绿辉目不转睛地凝视着眼前的久美子，突然想到什么似地捏了一下久美子的脸。<br>「久美子，你该不会是在紧张吧？」<br>「并没有。」<br>「欸！少骗人了。」<br>绿辉放开久美子的脸。真不愧是要搬运低音大提琴那般巨大乐器的人，她的力气意外地大。久美子揉着隐隐作痛的脸颊，看着绿辉。察觉到久美子的视线，绿辉莞尔一笑。<br>「听好了，久美子之所以会紧张，是因为担心万一失败该怎么办。别想那些，这么想不就好了吗？想说要向大家展现绝妙的演奏技术，这样。」<br>「……小绿，你在拉琴的时候都是这么想的吗？」<br>「对呀！因为小绿拉得实在太好了，希望能得到更多人的赞赏！」<br>「是、是噢。」<br>「嗯！」<br>她斩钉截铁地说，心无城府地笑了。能这么抬头挺胸地形容自己，令久美子不禁有些羡慕。<br>绿辉发出愉悦的笑声，开始哼起指定曲，宛如小鸟轻柔的歌声谱出低音大提琴的旋律。在她的带动下，久美子也开始哼起粗管上低音号的主旋律。光靠低音组的两个人无法构成整首曲子，但或许是对她们的歌声产生反应，坐在后座的明日香开始大声地唱起来。香织也苦笑着开始哼起小号的旋律。起初还怯生生的歌声变得越来越大声，越来越肆无忌惮，开始在巴士里唱起大合唱。指定曲、自选曲、指定曲、自选曲……他们再三地重复着同一首歌，在抵达目的地之前，歌声一次也没有停下来过。<br>他们从卡车上卸下乐器，手脚俐落地进行正式上场的准备。久美子打开乐器盒，拿出自己的伙伴。用布擦得晶亮的粗管上低音号，沐浴在夏日的阳光下闪闪发亮。仔细想想，从小学四年级到现在，她都和粗管上低音号混在一起。七年了，七年来，自己一直与这个乐器并肩同行。<br>第一次听到「粗管上低音号」的名称时，觉得真是平凡的乐器啊。既不起眼，又不主流，看起来也不怎么帅气。尽管如此，久美子还是很喜欢粗管上低音号。虽然很不起眼，虽然很不主流，但音色极其温暖而优美。她也曾经好几次想要换吹别的乐器，但最后还是选择了上低音号。久美子喜欢粗管上低音号。不只是喜欢而已，是非常喜欢。此时此刻，她再次领悟到这件事。<br>「调好音了吗？」<br>明日香抱着上低音号走过来。闪烁着月光的银色乐器，在她的怀里绽放光辉。金色与银色。明明是同一种乐器，光是颜色不一样，就能给人截然不同的印象。<br>「啊，还没。」<br>「这样啊？那得动作快才行。」<br>「好的。」<br>久美子吹了几次长音，提高乐器的温度，开始调音。明日香在她调音的过程中一直站在久美子身边，等她完成调音。<br>「学姐，你会紧张吗？」<br>将调音器放回口袋，久美子问道。只见明日香推了推眼镜，有些难为情地伸了伸舌头。<br>「还好，只有一点点。」<br>「我从昨天就好紧张喔。小绿倒是跟平常一样。」<br>「她实在太强了。」<br>明日香哈哈大笑。<br>「这倒是。」久美子也表示同意。<br>「……总觉得有点舍不得呢！」<br>「舍不得什么？」<br>「这么快乐的时间就快要结束了。真希望比赛永远不要结束。这个夏天要是能一直持续下去就好了。」<br>明日香说到这里，嘴角浮现出自嘲的笑容，纤长的睫毛轻轻地往下垂。她垂下眼睛的模样看起来非常成熟，令久美子感到些许的寂寥。为了摆脱那份寂寥，久美子用力地左右摇头。<br>「学姐，你在说什么啊？」<br>「嗯？」<br>「今天可不是最后的比赛喔，我们还要去全国大赛呢。」<br>久美子的话让明日香瞪圆了双眼，然后噗哧一笑。白晰修长的美丽手指温柔地捶了久美子的肩膀一记。<br>「……说的也是，我们还有进军全国的目标呢。」<br>「就是说啊。」<br>「呵呵，一起加油吧。」<br>明日香言尽于此，轻轻地挥手。银白色的粗管上低音号融入她的手中，仿佛成了身体的一部分。<br>正式上场的时间逐渐接近，久美子等人往试音用的小音乐厅移动。会场已经开始比赛，所以能发出声音练习的场所相当有限。用来彩排的小音乐厅就在比赛会场的大音乐厅旁边，所以这里其实是正式上场前，最后可以发出声音练习的场所。<br>「各位，要合音啰！」<br>泷拍手示意。今天的他和平常不太一样，穿着一身笔挺的黑色西装，身影非常帅气，每次经过走廊的时候，都会引来其他学校的学生一阵尖叫声。<br>「没有时间合奏了，总之先检查最初的小节就好。」<br>「好！」<br>接下来又演奏了几次指定曲与自选曲的开头，北宇治高中的练习时间就结束了。<br>铜管乐器最可怕的，莫过于第一个音跑掉。越到高音，风险越大。要是一开始就出差错，就很难再重新振作起来。正因为如此，泷才会要求他们抓住重点练习最初的部分吧。<br>「只要表现出与平常一样的实力，你们就能晋级到下一个阶段。不能想着要表现出比练习的时候更强大的实力，就照平常的方式演奏，然后笑着回学校吧。」<br>「好！」<br>社员露出精悍的表情。泷心满意足地看着大家，缓缓地微笑。<br>「那么，小笠原同学，请以社长的身份对大家说最后一句话。」<br>「什么！我吗？」<br>突然被点到名的社长发出惊愕的叫声，视线求助地望向明日香，但明日香仿佛完全没接收到她眼里的求救讯号，竖起大拇指，意思是要她加油。<br>「啊，呃……」<br>小笠原不知所措地愣了一下，眼神有些狼狈地飘来飘去，然后终于下定决心似地，用力地握紧拳头。<br>「这、这些日子以来，大家真的都很努力。接下来只要在正式比赛的十分钟，充分地将这份努力发挥出来即可……那么各位，请跟我一起呼口号。」<br>她深深地吸进一口气。肺部慢慢地膨胀起来。<br>「北宇治，加油！」<br>「加油！」<br>团结一致的吆喝声在音乐厅里回荡着，激发出来的热量使空气亦为之震动。<br>「北宇治高中的参赛者，时间到了。」<br>女性工作人员推开门。从这扇门被推开的这一刻开始，就不能再发出声音了。眼前是昏暗的楼梯，只要爬上楼梯，就会抵达后台。周围的人开始陆陆续续地移动，久美子也混在人群里。不料有人拍了她的肩膀一下。<br>「比赛要加油喔！」<br>伴随这个声音，俐落地从她身边经过的是提着小号的丽奈。明明还要独奏，但她看起来十分镇定。今年一定不会再让她哭泣了，久美子心想，踏出脚步。<br>立华高中已经在舞台上开始演奏。虽然隔着布幕，但是从边缘还是可以窥见他们落落大方的英姿。他们的演奏已经换成自选曲，这也意味着北宇治高中就快上场了。众人全都无言地倾耳倾听他们的演奏，久美子站在角落，按着自己的心脏。<br>越靠近正式比赛，心跳的声音越来越响亮，已经不是「扑通、扑通」这种可爱的等级，而是「砰砰砰砰！」的噪音。国中的时候，正式比赛固然也很紧张，但是跟现在完全不是相同等级。后台很暗，只有舞台非常明亮。光是想到自己等一下就要站在那个地方，久美子的心脏便跳得飞快，不舒服的汗水从额头滴落，双手颤抖，几乎听不见台上的演奏。<br>咦，那段主旋律是怎么吹来着？指法要怎么按？<br>脑中突然变得一片空白，原本理所当然的东西全都凭空消失。一旦发现一个不安的点，就顿时有如野火燎原。明明记得很清楚的事，明明不用思考就能办到的事，突然都变得不会了。怎么办？忘记吹奏乐器的方法了！混乱的热流冲走紧贴着大脑里的冷静。立华高中的演奏已经来到最后的高潮，曲子差不多要告一个段落了。怎么办？不会吹奏了。这种感觉还是头一次。眼前变得一片黑暗。好想从舞台上逃走。脑中甚至闪过这样的念头。怎么办？怎么办？不安控制了意识。体内的热度全都集中到眼头。为了不让热度流失，久美子捂着自己的脸。<br>「喂！」<br>冷不防有人拉着她的袖子，久美子下意识地回头张望，只见秀一就站在眼前。感觉已经很久没有这样面对面说话了。<br>大概是顾虑到不能在后台发出声音，秀一凑近久美子的耳边，小声地低喃：<br>「你没问题吧。」<br>「我没事。」<br>久美子静静地摇头。他的眉间打了个死结，一脸不高兴的样子。<br>「你那可不是没问题的表情。」<br>「我只是有点紧张。」<br>「只是有点吗？」<br>秀一愣愣地叹了一口气。明明是他一直避着自己，此时此刻的举动却与平常无异。不知道为什么，久美子感到心浮气躁，默不作声地一脚踩下去。好痛！秀一只动了动嘴形。<br>「你干么啦。」<br>「没干么。」<br>「好过分的家伙。」<br>秀一耸耸肩。只见他嘴边绽放出些许笑意，久美子一句话也说不出来。因为她已经察觉到他这个举动的用意了。秀一用粗鲁的动作捶了久美子的背一记。指尖微微颤抖着。<br>「没问题的，那么认真地练习过了。」<br>说得很像回事，但他倒映在乐器上的表情看起来未免也太窝囊了。久美子看着，感觉有些可笑，绷得死紧的紧张感一下子松懈下来。热度重新回到冷冰冰的指尖，一度被不安击溃的脑筋终于又开始运转。<br>从布幕的另一边传来如雷贯耳的掌声。久美子在阴暗的视线范围内捕捉到秀一僵硬的表情，用力地抱紧了粗管上低音号。怀里的金色喇叭在一丝光线也没有的空间里闪闪发光。不要紧的，自己办得到。泉涌而出的自信令她非常温暖。为了将这种心情分享给对方，久美子悄悄地轻触秀一的手指。只见他倒抽了一口气，大吃一惊地转向这边。他们对上视线，重迭的指尖畏缩地交缠在一起。热气在彼此碰触到的肌肤之间传递。<br>「……接下来的演奏者是编号第三十三号，京都府立北宇治高中。」<br>广播响起，大家同一时间行动。久美子往粗管上低音号的位置、秀一往长号的位置，各自往该去的方向移动。会场的灯光暗下来，台上只剩笼罩全场的黑暗。<br>「演奏曲目是由尼格尔·赫斯作曲的〈东海岸风情画〉，指挥是泷升。」<br>随着广播的介绍，灯光照亮了舞台。泷低头致意，会场顿时响起如雷的掌声。他抬起头，站上指挥台。亮如白昼的灯光洒满整个舞台。这个场所总是有这样的魔力。灿烂耀眼，让人看不见任何其他东西─不管是观众，还是评审。它屏除了所有多余的东西，只留下音乐。<br>四周充满了寂静，一切杂音皆消失，众人的视线全都集中在舞台上，甚至让人有一股这个场所就是全世界的感觉。泷举起指挥棒，众人同时拿起乐器。音乐厅里的狂热全都集中于一点。火辣辣的紧张感几乎要烧穿喉咙。所有人把一切都献给接下来的十二分钟。好想赢，久美子打从心底这么想。怀中的粗管上低音号与她相互呼应似地眨了眨眼睛。<br>就在这一刻，指挥棒挥了下来。<br>承载着北宇治高中梦想的音乐，就此揭开序幕。</p><h2 id="尾声"><a href="#尾声" class="headerlink" title="尾声"></a>尾声</h2><p>几百张脸全都凝望着同一个方向，充满热度的空气席卷了整个会场，把少女们的脸颊染得红通通的。为了压抑不听使唤的急切心情，久美子慢慢地深呼吸。心脏扑通扑通地狂跳，握得死紧的掌心捏着一把汗水，指甲深深地陷进皮肤里，刻画出弦月般的痕迹。<br>「哇！好紧张！」<br>身旁的绿辉一派天真地大声嚷嚷。在她隔壁的叶月则是因为太紧张了，几乎就快哭出来的样子。<br>京都府管乐大赛。<br>直立式的看板上罗列着简单的文字。她记不得这是第几次看到这些字了，总之次数多到令人生厌。<br>「来了！」<br>所有人异口同声地发出了惊呼。抱着巨大纸张的男子慢条斯理地往前走。众人的视线全都集中在他们身上。心脏几乎要从胸腔里跳出来，脑袋也热得快要昏倒了。久美子捂住满是红晕的双颊，也跟着紧盯着那张纸看。<br>纸张缓缓地在男士们的手中摊开，纸上写着高中的学校名称，校名旁边写着金、银、铜的文字。自己的学校是……还来不及思考，久美子的背后先受到一阵冲击。<br>「久美子！」<br>她下意识地回过头，只见丽奈的双眼泛红，从背后紧抱住她，断了线的珍珠从她眼中纷纷落下。<br>「咦？」<br>看到她那表情的瞬间，心脏仿佛被狠狠地辗过。这次还是不行吗？又让她哭了吗？久美子只能吸气，一句话也说不出来。丽奈纤细的手臂缠绕在久美子的脖子上。<br>「关西！」<br>出乎意料的关键字让久美子忍不住反问：「……什么？」丽奈粗鲁地揉揉自己的眼睛，再次紧紧地抱住久美子。<br>「关西！我们可以去关西了！」<br>她的声音终于慢慢地传入耳中，大脑花了一点时间才理解到这句话的意思。久美子的瞳孔慢慢地放大，背后传来叶月欣喜若狂的尖叫声。<br>「哇！是关西大赛！」<br>仿佛受到传染，激动的欢呼声此起彼落地响起。久美子不由得看着丽奈的脸。她的脸颊红扑扑的，完全失去了平日的冷静。<br>「真不敢相信！是关西耶！关西！久美子！」<br>「嗯，真的。」<br>「我开心得快要死掉了！不骗你！」<br>她说到这里，脸上浮现出腼腆的笑容。看到她的笑容那一瞬间，久美子感觉力气一下子从脚底流失。丽奈瞪大眼睛看着她。<br>「喂，你没事吧？」<br>喉头好热，整个被勒紧的感觉夺走了久美子说话的能力。丽奈担心地窥探着她的表情。久美子开口想说话，却只能吐出静静的叹息。脑袋昏昏沉沉，手失去了力气。久美子求救地握紧了眼前少女的手，视线一片模糊，眼球表面笼罩着一层灼热的薄膜。<br>「……真的，真的太好了。」<br>久美子好不容易挤出这句话，抹了抹眼角，皮肤表面是一片闪闪发光的泪迹。<br>「丽奈，我真的好高兴。」<br>丽奈拼命点头。<br>「我也是！」<br>她叫道，再次抱紧了久美子。<br>社员们的七嘴八舌一时半刻停不下来。后来是泷看不下去，站在大家前面，用力地拍了一下手。激动的社员一起转往顾问的方向。副顾问美知惠一如往常地站在泷的身边，手里拿着面纸痛哭。泷环视所有社员，露出非常孩子气的微笑。<br>「不好意思打扰各位大团圆般的气氛，但是从明天开始，又要开始进行迎接关西大赛的练习了。我们的目标是全国大赛。这里并不是终点，请打起精神继续努力！」<br>泷眯着眼说。久美子这才猛然发现，他的眼眸有些湿润。感觉怪不自在的。好想赶快吹奏乐器。泉涌而出的欲求，震动了久美子的胸膛。<br>「那么，明天九点开始在音乐教室练习。下次也要获胜喔！」<br>这句话让久美子深深地吸进一口气。<br>「是！」<br>管乐社社员的声音响彻了整片夏日的蓝天。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;吹響吧！上低音號&lt;br&gt;Sound! Euphonium&lt;br&gt;歡迎加入北宇治高中管樂社&lt;/p&gt;
&lt;p&gt;作者&lt;br&gt;武田綾乃&lt;br&gt;译者&lt;br&gt;緋華璃&lt;/p&gt;</summary>
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="京吹" scheme="http://gyrojeff.moe/tags/%E4%BA%AC%E5%90%B9/"/>
    
  </entry>
  
  <entry>
    <title>200302-市地理课</title>
    <link href="http://gyrojeff.moe/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-03T02:54:40.000Z</published>
    <updated>2020-09-22T12:59:06.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-2-地理课"><a href="#3-2-地理课" class="headerlink" title="3/2 地理课"></a>3/2 地理课</h1><script type="math/tex; mode=display">人口\rightarrow 城市 \rightarrow产业区位与分布\rightarrow 地域文化\rightarrow地理信息技术</script><h2 id="专题16-人口增长（人口增长过程）"><a href="#专题16-人口增长（人口增长过程）" class="headerlink" title="专题16 人口增长（人口增长过程）"></a>专题16 人口增长（人口增长过程）</h2><h3 id="人口增长的基本指标"><a href="#人口增长的基本指标" class="headerlink" title="人口增长的基本指标"></a>人口增长的基本指标</h3><p>衡量人口<strong>自然变动</strong>的基本指标：</p><ul><li>出生率：一年内出生的婴儿数占总人数的比例</li><li>死亡率：一年内死亡数占总人数的比例</li><li>自然增长率：出生率减去死亡率就是自然增长率<a id="more"></a><script type="math/tex; mode=display">自然生长率 = 出生率 - 死亡率，\color{red}{单位：‰（千分比）}</script></li></ul><h3 id="自然增长率"><a href="#自然增长率" class="headerlink" title="自然增长率"></a>自然增长率</h3><ul><li><p>自然增长率$&gt;0$：正增长，人口总数增加</p></li><li><p>自然增长率$&lt;0$：负增长，人口总数减少</p></li><li><p>自然增长率$=0$：人口总数稳定</p></li></ul><h3 id="自然增长率与人口数量的关系"><a href="#自然增长率与人口数量的关系" class="headerlink" title="自然增长率与人口数量的关系"></a>自然增长率与人口数量的关系</h3><p>自然增长率相同的地区，人口基数越大，年净增长的人口数越多，反之越少。</p><h3 id="人口离开或进入一个地区的衡量指标"><a href="#人口离开或进入一个地区的衡量指标" class="headerlink" title="人口离开或进入一个地区的衡量指标"></a>人口离开或进入一个地区的衡量指标</h3><ul><li><p>迁入率：一定时间内迁入人口站总人数的比率</p></li><li><p>迁出率：一定时间内迁出人口站总人数的比率</p></li><li><p>机械增长率：迁入率减去迁出率</p></li></ul><script type="math/tex; mode=display">机械增长率 = 迁入率 - 迁出率，\color{red}{单位：‰（千分比）}</script><h3 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h3><script type="math/tex; mode=display">\begin {align}\color{red}{自然生长率} = 出生率 - 死亡率 \\\color{red}{机械增长率} = 迁入率 - 迁出率\end {align}</script><p>单位：千分比（$‰$）</p><script type="math/tex; mode=display">人口增长率 = 机械增长率 + 自然增长率</script><h3 id="世界人口的增长历史过程"><a href="#世界人口的增长历史过程" class="headerlink" title="世界人口的增长历史过程"></a>世界人口的增长历史过程</h3><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/1.jpg" class=""><script type="math/tex; mode=display">缓慢 \rightarrow 较快 \rightarrow 迅速</script><p>人口数量激增，导致“人口爆炸”</p><p>根据人口自然变动特征，将人口发展分为四个阶段：</p><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/2.jpg" class=""><ul><li>工业化之前：<strong>高</strong>出生率，<strong>高</strong>死亡率，<strong>低</strong>自然增长率，人口规模<strong>很小</strong></li><li>工业化初期：<strong>高</strong>出生率，死亡率<strong>急剧下降</strong>，自然增长率<strong>上升</strong>，人口规模<strong>迅速扩大</strong></li><li>工业化中后期：出生率<strong>快速下降</strong>，死亡率<strong>缓慢下降</strong>，自然增长率<strong>下降</strong>，人口规模<strong>扩大趋缓</strong></li><li>后工业化时期：<strong>低</strong>出生率，<strong>低</strong>死亡率，<strong>低</strong>自然生长率，人口规模<strong>稳定/缩小</strong></li></ul><p>可以从<strong>出生率、死亡率、自然增长率、人口规模</strong>等方面分析出这四个阶段的显著特征。</p><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/3.jpg" class=""><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/4.jpg" class=""><p>读图表：</p><ul><li>时间</li><li>地点</li><li>范围</li></ul><h3 id="我国的人口增长"><a href="#我国的人口增长" class="headerlink" title="我国的人口增长"></a>我国的人口增长</h3><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/5.jpg" class=""><ul><li>我国人口死亡率降低的主要影响因素：</li></ul><ol><li>科学技术提高，医疗水平完善</li><li>社会保障制度的健全和完善</li><li>人民的生活水平提高</li><li>社会稳定和平</li></ol><p>$\Rightarrow \color{red}{人寿命增加}$</p><ul><li><p>生育观念的改变</p></li><li><p>妇女解放运动</p></li><li>孩子的培养成本上升</li></ul><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/6.jpg" class=""><img src="/2020/03/03/200302-%E5%B8%82%E5%9C%B0%E7%90%86%E8%AF%BE/7.jpg" class=""><h3 id="小结-1"><a href="#小结-1" class="headerlink" title="小结"></a>小结</h3><script type="math/tex; mode=display">人口增长\rightarrow \begin {cases}人口增长\begin{cases}自然增长\rightarrow 自然增长率 \\机械增长\rightarrow 机械增长率(迁入迁出情况)\end {cases}\\人口发展模式\begin {cases}发展阶段\rightarrow 四个阶段 \\ 影响因素 \rightarrow 经济、文化等\end {cases}\\ 我国的人口增长\begin {cases}基本国情 \\ 增长趋势\end {cases}\end {cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-2-地理课&quot;&gt;&lt;a href=&quot;#3-2-地理课&quot; class=&quot;headerlink&quot; title=&quot;3/2 地理课&quot;&gt;&lt;/a&gt;3/2 地理课&lt;/h1&gt;&lt;script type=&quot;math/tex; mode=display&quot;&gt;
人口\rightarrow 城市 \rightarrow产业区位与分布\rightarrow 地域文化\rightarrow地理信息技术&lt;/script&gt;&lt;h2 id=&quot;专题16-人口增长（人口增长过程）&quot;&gt;&lt;a href=&quot;#专题16-人口增长（人口增长过程）&quot; class=&quot;headerlink&quot; title=&quot;专题16 人口增长（人口增长过程）&quot;&gt;&lt;/a&gt;专题16 人口增长（人口增长过程）&lt;/h2&gt;&lt;h3 id=&quot;人口增长的基本指标&quot;&gt;&lt;a href=&quot;#人口增长的基本指标&quot; class=&quot;headerlink&quot; title=&quot;人口增长的基本指标&quot;&gt;&lt;/a&gt;人口增长的基本指标&lt;/h3&gt;&lt;p&gt;衡量人口&lt;strong&gt;自然变动&lt;/strong&gt;的基本指标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;出生率：一年内出生的婴儿数占总人数的比例&lt;/li&gt;
&lt;li&gt;死亡率：一年内死亡数占总人数的比例&lt;/li&gt;
&lt;li&gt;自然增长率：出生率减去死亡率就是自然增长率</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Geography" scheme="http://gyrojeff.moe/tags/Geography/"/>
    
  </entry>
  
  <entry>
    <title>200302-市物理课</title>
    <link href="http://gyrojeff.moe/2020/03/03/200302-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/"/>
    <id>http://gyrojeff.moe/2020/03/03/200302-%E5%B8%82%E7%89%A9%E7%90%86%E8%AF%BE/</id>
    <published>2020-03-03T01:35:00.000Z</published>
    <updated>2020-09-22T12:59:08.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="3-2-物理课"><a href="#3-2-物理课" class="headerlink" title="3/2 物理课"></a>3/2 物理课</h1><h2 id="曲线运动"><a href="#曲线运动" class="headerlink" title="曲线运动"></a>曲线运动</h2><ol><li>曲线运动：轨迹是曲线的运动</li><li>曲线运动的条件：受到与速度方向不在一直线上的力</li><li>速度方向：曲线上某点的切线方向</li><li>曲线运动的实质是变速运动</li><li>曲线运动的质点所受的合外力指向曲线的凹面<a id="more"></a></li></ol><h2 id="圆周运动"><a href="#圆周运动" class="headerlink" title="圆周运动"></a>圆周运动</h2><ol><li>定义：质点沿圆周所做的运动</li><li>圆周运动是曲线运动的一种，轨迹是圆，是周期性运动。</li><li>条件：受到向心力的作用<ul><li>向心力：始终指向圆心的力</li><li>向心力由某个力，某个力的分力，或某几个力的合力提供</li><li>向心力是效果力</li></ul></li></ol><h2 id="描述圆周运动的快慢"><a href="#描述圆周运动的快慢" class="headerlink" title="描述圆周运动的快慢"></a>描述圆周运动的快慢</h2><ol><li><p>线速度$v$</p><ul><li><p>大小：指点经过的圆弧长度$s$与所用的时间$t$的比值</p></li><li><p>定义式：</p><script type="math/tex; mode=display">v = \frac {s}{t}</script></li><li><p>方向：质点所在圆周位置的切线方向</p></li><li><p>单位：$\text{m/s}$</p></li></ul></li><li><p>匀速圆周运动</p><ul><li>任意相等时间内通过的圆弧长度大小相等。</li><li>质点的线速度大小不变。</li><li>特点：轨迹为圆、速率不变、周期性</li><li>匀速圆周运动是变速运动，速率不变，速度变化</li></ul></li></ol><script type="math/tex; mode=display">物体运动性质\begin {cases}合外力为零或不受外力 \rightarrow \color{red}{物体做匀速直线运动或静止} \\合外力不为零 \xrightarrow{合外力方向、速度方向} \begin {cases}同一直线上\rightarrow \color{red}{变速直线运动} \\不在同一直线上\rightarrow \color{red}{曲线运动}\end {cases}\end {cases}</script>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;3-2-物理课&quot;&gt;&lt;a href=&quot;#3-2-物理课&quot; class=&quot;headerlink&quot; title=&quot;3/2 物理课&quot;&gt;&lt;/a&gt;3/2 物理课&lt;/h1&gt;&lt;h2 id=&quot;曲线运动&quot;&gt;&lt;a href=&quot;#曲线运动&quot; class=&quot;headerlink&quot; title=&quot;曲线运动&quot;&gt;&lt;/a&gt;曲线运动&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;曲线运动：轨迹是曲线的运动&lt;/li&gt;
&lt;li&gt;曲线运动的条件：受到与速度方向不在一直线上的力&lt;/li&gt;
&lt;li&gt;速度方向：曲线上某点的切线方向&lt;/li&gt;
&lt;li&gt;曲线运动的实质是变速运动&lt;/li&gt;
&lt;li&gt;曲线运动的质点所受的合外力指向曲线的凹面</summary>
    
    
    
    <category term="市教委网课" scheme="http://gyrojeff.moe/categories/%E5%B8%82%E6%95%99%E5%A7%94%E7%BD%91%E8%AF%BE/"/>
    
    
    <category term="Physics" scheme="http://gyrojeff.moe/tags/Physics/"/>
    
  </entry>
  
  <entry>
    <title>[转载][汉化]吹响吧!上低音号 欢迎来到北宇治高中吹奏社[序章+第一章]</title>
    <link href="http://gyrojeff.moe/2020/03/02/%E8%BD%AC%E8%BD%BD-%E6%B1%89%E5%8C%96-%E5%90%B9%E5%93%8D%E5%90%A7-%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7-%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E5%8C%97%E5%AE%87%E6%B2%BB%E9%AB%98%E4%B8%AD%E5%90%B9%E5%A5%8F%E7%A4%BE-%E5%BA%8F%E7%AB%A0-%E7%AC%AC%E4%B8%80%E7%AB%A0/"/>
    <id>http://gyrojeff.moe/2020/03/02/%E8%BD%AC%E8%BD%BD-%E6%B1%89%E5%8C%96-%E5%90%B9%E5%93%8D%E5%90%A7-%E4%B8%8A%E4%BD%8E%E9%9F%B3%E5%8F%B7-%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E5%8C%97%E5%AE%87%E6%B2%BB%E9%AB%98%E4%B8%AD%E5%90%B9%E5%A5%8F%E7%A4%BE-%E5%BA%8F%E7%AB%A0-%E7%AC%AC%E4%B8%80%E7%AB%A0/</id>
    <published>2020-03-02T07:26:23.000Z</published>
    <updated>2020-03-09T11:51:19.000Z</updated>
    
    <content type="html"><![CDATA[<p>本文转载自轻度之国，原文地址：<a href="https://www.lightnovel.cn/thread-831215-1-1.html">https://www.lightnovel.cn/thread-831215-1-1.html</a><br>侵删。以下为原文内容（排版后）</p><h2 id=""><a href="#" class="headerlink" title=""></a><a id="more"></a></h2><p>吹响吧！上低音号　欢迎来到北宇治高中吹奏乐社<br><br>宝岛社文库<br><br>作者：武藤绫乃<br><br>监督：zegao<br><br>翻译：wdr550，zegao，某动物的口条，Euphoric_Field，战隼，曹三俗，琉星雪，冰之zero<br><br>=========================================================<br><br>轻之国度：<a href="https://www.lightnovel.cn/">https://www.lightnovel.cn/</a><br><br>仅供个人学习交流使用，禁作商业用途<br><br>下载后请在24小时内删除，LK不负担任何责任<br><br>翻译完成前禁止转载<br><br>=========================================================<br></p><p>=========================================================<br></p><p>8.1<br></p><p>大家好我是本次联翻的监督zegao<br><br>这次和组里一起联翻的是宝岛社文库的《吹响吧！上低音号》系列第一卷。<br><br>据说这文库比较高冷，迟迟没有中文版代理出现，所以我就决定招募试试看，没想到组里大家反响还挺热烈，挺轻松就抓够了苦力（雾<br><br>本来预定能早一点开，不过因为火纹if的发售以下略……（カザハナ太可爱了！）<br><br>总而言之，希望各位病入高黄的读者多多支持m(_ _)m<br></p><hr><h2 id="序章"><a href="#序章" class="headerlink" title="序章"></a>序章</h2><p>几百张面孔一致凝视着同一个方向。盘旋在广场上方的灼热空气把少女们的脸颊染成红色。为了抑制住焦躁的心情，久美子缓缓地吐了一口气。心脏咚咚的跳动声敲击着鼓膜，紧握的手掌中黏着汗水，陷入皮肤的指甲在手心印出新月形的痕迹。<br>「我快紧张死了。」<br>身旁的梓一副耐不住性子的模样，忍不住嘀咕道。我也是——久美子一边答着，一边使劲睁大眼睛。<br>京都府吹奏乐大赛——<br>立式看板上简短地如是写道。自就读初中以来，久美子来过三次这间演奏厅。关西大赛——这是她三年来努力的目标。久美子的拳头也在不觉中越攥越紧。<br>「来了！」<br>不知哪里传来叫声。抱着一张大纸榜的男生们缓缓前进，吸引了所有人的视线。胸中心脏彷若跳蚤似的跳个不停，旋绕在脑中的热气几乎要让久美子晕倒。她把双手捂在涨红的脸颊上，也盯着那张纸看。<br>男生们缓缓打开榜单。榜上排列着几间初中的名字，旁边写着金、银和铜等文字。没等久美子开始找自己的学校，梓就发出了欢呼：<br>「是金！」<br>或许是被其所感染，到处都响起了尖叫声。太好了！金奖！有学校欢声沸腾，就有学校静如死水。所谓比赛结果这严酷的事实，就这样被猛然丢到了眼前。久美子看到旁边气氛像在举办葬礼的学校，一瞬间迟疑了该不该老实感到高兴。<br>「久美子！发什么呆呢！我们得了金奖，金奖呀！」<br>突然被梓抱住，久美子终于也忍不住笑了出来。<br>「……嗯，太好了。」<br>「我要去和麻美报告。她紧张到跑去洗手间躲了。」<br>「我知道了，退场的时候别迟到。」<br>「明白！」<br>留下开朗的回应后，梓便向大厅深处跑了出去。绑成一束的黑发随着动作摇摆。久美子轻轻松开紧握的拳头，再次眺望写着结果的榜单。自己初中的名字旁边确实写着金奖。<br>虽说是不能晋级关西大赛的废金，不过得了金奖就算及格了。她瞥了顾问老师的脸一眼，只见对方也满意地拍着手。太好了，是金奖！久美子的心中渐渐涌上得奖的实感。她安心地舒了口气，却突然觉得膝盖一软。我也是够紧张的，她又想。<br>太好了——她打算和吹同一个乐器的成员这样说时，在视野中感到了一丝不协调。为了寻找原因四处张望的她，无意间和丽奈对上了视线。紧握着小号的丽奈没有一丝笑容，只是一脸茫然地站在原地。<br>「都高兴哭了？」<br>对于久美子提心吊胆的提问，丽奈只是沉默地摇摇头。她那透着强韧意志的大眼睛蒙着一层泪水形成的薄膜。<br>「……心。」<br>「咦？」<br>这次，丽奈对再度发问的久美子清清楚楚地说道：<br>「我不甘心，快不甘心死了。为什么大家拿个金奖就这么高兴？咱们的目标不是全国大赛吗！」<br>眼泪开始从她眼中扑簌扑簌地掉。久美子立刻逃避似地移开了目光。脸颊热到快烧起来了，她对为金奖所安心的自己感到可耻。<br>「……你真觉得能进全国大赛？」<br>丽奈胡乱擦擦眼角，不屑地哼了一声。浅桃色的嘴唇焦躁地开开阖阖，就像在责备久美子似的。<br>「难道你甘心吗？」<br>丽奈抛出的话语直接刺中了久美子的心脏。<br>「我不甘心，非常不甘心。」<br>这个痛切的宣言，深深烙进了久美子的大脑。</p><p>初中生涯最后的比赛。<br>一想到那个时候的事情，久美子总是会回想起她的眼睛。一回忆起那双眼睛，久美子就会分外想要逃离那个夏天。</p><h2 id="一-请多关照-上低音号"><a href="#一-请多关照-上低音号" class="headerlink" title="一　请多关照 上低音号"></a>一　请多关照 上低音号</h2><p>藏青色裙子裁至膝盖上方，裙下一双双白皙的腿在体育馆整然排列，有的纤细，有的粗壮。穿着立领制服的少年们兴奋不已，纷纷向其投以热情的视线。少女们丝毫不以为意，并不吝惜让光洁的肌肤暴露在目光之下。久美子一面心不在焉地看着他们，一面低头比了比自己——身着藏青色水手服，体态寒酸。为什么自己会相信只要上高中胸部就会变大的传言呢？她瞥了一眼身旁少女布料都藏不住的丰满曲线，静静叹了口气。<br>京都府立北宇治高中以制服可爱闻名。这宇治市中唯一的水手服，在其他学校口碑也不错。学业水平中上，在升学成绩上没有特别突出。久美子之所以会选择这所学校，就是因为制服。既然能去的学校水平都差不多，那当然是制服可爱的比较好——明明为这不纯的动机选择了学校，但谁又能想到，这身制服自己穿来竟然并不怎么可爱。久美子近来总在烦恼，要是自己能再天生丽质一些就好了。<br>「接下来是校歌齐唱。请全体起立。」<br>周遭一齐对教导主任的指令作出了动作。为了让自己赶上这股浪潮，久美子也站起身来。台上挂着一张海报，上面为新生写着校歌的歌词。初中时代几乎没几个学生会开口唱校歌，不知道高中又会如何。久美子为了不让自己心情动荡，便悄悄环视周围。附近的新生们看起来都有些不安，大概也在窥视彼此的表情吧。<br>台下，吹奏乐社成员们面色认真地拿好了乐器。举着指挥棒的是一个表情可怖的女生。萤光灯之下，金色的上低音号闪耀着光芒。见状，久美子吞了一口唾沫。指挥抬起手来，瞬间，乐器一齐扬起了头。闪闪发光的小号们笔直转向久美子的方向。部员们换气的声音清晰可闻。指挥棒一瞬间猛然对向上方，接着往下挥落。<br>「……这也太惨了。」<br>话语在无意识中从自己口中冒出。跃入耳中的是无可救药的不谐和音。五音不全、节拍拖拉。指挥棒的动作和乐器的乐音完全合不到一起。久美子还在考虑上高中后要不要继续参加吹奏乐社，就这种水平还是算了吧。别说关西大赛了，这副样子连要在京都大赛上得个金奖都不可能。<br>久美子如是想着，音乐依旧在继续。虽然从墙边能听到老师们的歌声，但学生这边似乎谁都没唱出口。演奏终于结束后，学生们都入了座。典礼顺利进行着，但久美子的脑中已经充满了对接下来校园生活的不安与期待。要参加哪个社团呢？能交到朋友吗？班主任会是个怎么样的人？<br>「接下来是新生致词。请新生代表，高坂丽奈上台。」<br>耳熟的名字进入耳中，让久美子猛得抬起头。「是！」凛然的声音在体育馆中响起，一位身着水手服的美少女站了起来。她有着艳丽的黑长发、水汪汪的大眼睛。绷得直挺挺的背脊展现出她的自信。<br>高坂丽奈。<br>久美子和她同间初中，也同属吹奏乐社。成绩优异，也颇受教师好评的她，能成为新生代并没什么新鲜。但聪明如她应该能进入更好的学校才对，为什么选了这间呢。总不会和自己一样是因为制服而选的吧。就在久美子百思不得其解之时，丽奈忽然转向了这里。彷若黑曜石的眼眸，目不转睛地盯着这边。难不成她看到我了？两人的视线明确地交会，这短短的一瞬间，对久美子而言却相当漫长。丽奈的嘴角忽然放松下来，若无其事地把视线移回了正前方。她动起嘴唇，从中流泄出流畅的演讲词。久美子在脑海中回味着「新生代表」这个漂亮头衔，轻轻叹了口气。</p><p>「喂！你叫什么？」<br>刚进到一年三班的教室落座，久美子便被人搭话道。往旁边一看，一位短发的少女正对着自己咧嘴笑。从薄唇的缝隙可以窥见洁白的牙齿，太阳晒出的小麦色肌肤暗示她曾属运动社团，是和自己不曾有过交集的类型。久美子为了藏住动摇，暧昧地微微一笑：<br>「黄前久美子。」<br>「久美子是吧？我是加藤叶月。加藤或者叶月随你怎么叫都行。」<br>叶月从座位上探出身子说道。虽然心里觉得这人真是自来熟，但久美子还是向她转过了身。<br>「那，久美子你是哪间初中的？不是东中吧？」<br>「我是北中的。」<br>「北中？真稀奇！」<br>叶月惊讶地睁大了双眼：<br>「北宇治这边啊，不知为啥到处都是东中的人。我也是东中毕业的，但满学校的熟脸，根本没有上了高中的感觉。」<br>「那你有很多朋友咯？多好啊，真羡慕你。」<br>「不不不，完全不好。没什么能比初中那些老底被人揭出来更糟了。想在高中换个形象肯定也会以尴尬收场。」<br>「不至于吧。」<br>「真就是这样，所以我才忍着没有染发。」<br>「其实我真的挺想染个红发什么的」，叶月说着，用手指玩起了自己的头发。这早已经超过上高中改变形象的范畴了吧——虽然久美子这样想，但并没有说出口。<br>「说来，我刚才就注意到了，你为什么讲标准语？」<br>「唔……我以前住在东京，大概是这个原因吧。」<br>「哦？没被关西腔同化？」<br>「因为家人都讲标准语，所以没怎么受影响。啊，倒是好多朋友说要被标准语同化了。」<br>「嗯哼？那我可得小心别被带跑了。」<br>叶月托着腮若无其事地说道。她的右脸颊被撑着，露出了一个彷若笑容的表情。久美子开口正打算说些什么，但老师偏巧就在这时进入了教室。那是个将白发在脑后绑成一束，无形中透着一股威严的女性，大概刚过五十岁吧。她瞪视教室一圈，重重地咳了一声说：<br>「全部坐好。」<br>这不大但魄力十足的声音，让喧闹的教室一下子安静了下来。刚刚还在闹腾的学生们，一个个都赶忙回到了按名册顺序安排的座位上。啊……真恐怖！叶月小声低语道。<br>「都上高中了还在教室里大吵大闹，实在不值得夸奖。高中不是义务教育了，给我有点高中生的自觉。」<br>刚才热烈的空气骤然冷却。老师似乎无奈似地叹了口气，削瘦的手指拿起粉笔，在绿色的黑板上写出白色的文字。<br>「我是一年三班的班主任松本美知惠，教音乐，也是吹奏乐社的副顾问。」<br>吹奏乐社——听到这个词，旁边的叶月打了个激灵。<br>「话先说在前，我自负是这所学校里最严厉的老师。我不打算放任你们，你们可先做好觉悟。」<br>说罢，美知惠不紧不慢地拿出了一个黑色资料夹。<br>「先来点名，被点到的要清楚回答──麻井雄大。」<br>「到！」<br>「石川有纪！」<br>「到！」<br>初中点名时即使被叫到名字，大家也只会有一搭没一搭地举个手。但升上高中之后，似乎就要好好回应了。是因为学生长大更遵守规矩，还是因为这位老师很恐怖呢？<br>「──黄前久美子。」<br>「啊……到！」<br>差点就走神听漏了。因为慌张回应的久美子，教室里的空气和缓了些。叶月嘻嘻笑着投来视线。羞耻让久美子下意识地藏住自己的脸。<br>「──加藤叶月。」<br>「到！」<br>「川岛……lvhui？」<br>美知惠的脸上第一次露出了困惑。在卡壳的她面前，一位头发如猫毛般纤细柔顺的娇小少女战战兢兢地举起了手。<br>「不、不好意思，那个念作sapphire，写作‘绿辉’，念作sapphire。」<br>Sapphire？教室里嘈杂起来。女生似乎对自己的名字很不好意思，愈发羞怯起来，纤细的背脊缩得小小的。<br>「失礼了，川岛绿辉(sapphire)，对吧。以后我会注意。」<br>说罢，美知惠马上就开始点起下一个名字，嘈杂的教室也立刻再次安静下来。话说回来，蓝宝石啊……不是美少女可不敢用这种名字。久美子如是想着，再次把视线投向了前方的少女。遗憾的是，从后面没办法看到她的脸。<br>叶月似乎很惊讶地低语道：<br>「Sapphire吗……这名字真酷呀！」<br>她的审美观有点特别啊，没错──久美子心想。<br>那么今天就到这里。明天有摸底考试，希望各位好好努力。<br>班主任以这句话为第一天的高中生活画上了句号。怎么办，考完试之后我就再没学习过……久美子不禁叹了口气。<br>「久美子，你家住哪？我们一起回家吧！」<br>就在久美子收拾书包的时候，已经准备完毕的叶月来到她面前说到。一个小号形状的钥匙圈挂在黑色的皮制书包上。<br>「我住在平等院附近，方向一样吗？」<br>「一样，我都坐京阪线到黄檗。」<br>「这样啊，那咱们住得挺近的。」<br>说着，久美子也站起了身。她的书包上没有任何装饰品，因为她不太喜欢这种乱七八糟的玩意儿。<br>「叶月，你中学是玩管乐的？看你挂了个喇叭。」<br>久美子指着她的钥匙圈。叶月一面乾笑一面摇摇头。<br>「没，我参加的是活力十足的网球社。」<br>「看你气质倒也比较像运动系社团的。」<br>「因为我皮肤黑吧。练习晒的，原本要白一点儿。」<br>叶月笑着挽起袖子给久美子看。褐色的肌肤过了分界线后变得白皙，这就是所谓的运动服晒痕吧。<br>「啊，不过上高中后我打算加入吹社，总觉得很有趣的样子。」<br>「是吗？我初中就是吹社的。」<br>「真的？高中还打算继续吗？」<br>还没决定好──久美子刚开口想要回答，却被另一个声音打断：<br>「那个，你们两位都打算加入吹社吗？」<br>叶月与久美子两人把头转向声音的源头。站在那里的是刚才那位猫毛少女。名字听过一遍怕是就不会忘了。川岛绿辉──名字有些与众不同的她，五官看起来十分面善。<br>「啊，Sapphire！」<br>叶月毫无恶意地叫道。瞬间，对方的脸活像熟透的章鱼一般涨红起来。<br>「那、那个，不好意思，呃，请不要叫我的名字。」<br>「咦～～为什么？」<br>「因为我很讨厌自己的名字。太丢人了。」<br>「Sapphire多帅啊！我就很喜欢啊！」<br>「或许有人觉得帅，但一般又不会这么读，真的让我觉得太丢脸了。」<br>绿辉说着低下了头。久美子也打从心底同意她的意见。如果自己也有这样的名字，完全就是名不符实了。<br>「所以，希望你们叫我绿。」<br>「绿啊！OK我知道了！」<br>叶月点点头，用力拍了拍绿辉的后背。这或许她只是想来个亲密接触，但绿辉纤细的身躯却被拍得踉踉跄跄。<br>「那绿住在哪里？一起回去吧！」<br>「这样方便吗？」<br>绿辉请示似地瞥了这边一眼。久美子露出笑容——当然方便——并重重点了个头。</p><p>离开校舍后，周遭还留有一丝春寒。围绕校庭栽种的樱树上花瓣已经开始凋零，嫩绿的新芽悄悄从纤细的树枝上展露面容。来往的学生似乎对凋谢的樱花鲜有兴趣，并无一人驻足留意。穿着一样制服的他们，在久美子看来表情也都是一个样。<br>「我初中是圣女的，小学、初中我都读的私立。」<br>绿辉把书包搭在肩上，轻声笑道。圣女中等学园──久美子下意识地对这个耳熟能详的名字产生了反应：<br>「圣女不是管乐超厉害的学校嘛！」<br>久美子的话让叶月吃了一惊：<br>「真的？」<br>「真的是个很厉害的学校，也是全国大赛的常客。」<br>「咦～！那不是超厉害嘛！」<br>闻言绿辉害羞地搔了搔头。蓬松的头发在日照下呈现出茶色。<br>「不是我厉害，只是顾问老师很厉害罢了。」<br>「顾问老师和演奏有关系吗？我看大家都是随便吹啊。」<br>「并不是随便吹的。就和教练会影响运动社团的水平一样，有优秀指导的话吹社也会变强。」<br>「哦？是这样啊……」<br>叶月对久美子的说明佩服似地点了点头。鞋底踩到的小石子发出声响。涂着柏油的道路很是平滑，看不见一棵野草。<br>「绿是玩什么乐器的？」<br>「我啊，自始至终都在拉低音提琴。」<br>「低音提琴？那是什么？」<br>听到叶月的问题，绿辉像是拗气似地鼓起脸颊：<br>「就是类似大型小提琴的乐器！可帅了！」<br>「呃，是、是吗？」<br>似乎为绿辉的气场所迫，叶月点了点头。低音提琴啊——久美子一面侧眼看着两人的互动，一面自言自语道。绿辉的身高比久美子矮了十厘米，差不多一米五。实在无法想象她要如何去演奏将近两米高的乐器。<br>「久美子呢？」<br>「咦？」<br>「久美子是演奏什么乐器的？你初中时是玩管乐的吧？」<br>久美子走神的时候，绿辉不声不响地凑到她身边问道。她那窥探自己表情的神态如同小动物一般可爱。<br>「我是吹Eupho的。」<br>「噢～！Eupho！」<br>「啥？UFO？」<br>听了久美子的话，绿辉双目放光，叶月则一脸诧异。估计她根本就不知道Eupho这种乐器存在吧。久美子已经对叶月这样的反应见多不怪了。<br>「不是UFO，是Eupho，全称是粗管上低音号，一种低音乐器……也罢，本来就是种非常冷门的乐器。」<br>「嗯哼～？我还是想吹比较显眼的乐器，比如小号、萨克斯之类的。」<br>「会这样想也是难免，毕竟低音乐器大多都朴素得很。我在加入吹社之前也是想要吹长笛来着。」<br>绿辉苦笑道。确实，感觉比起低音提琴她更适合长笛。<br>「绿你上高中后还是打算加入吹社吗？」<br>「嗯，对啊？」<br>听到这毫不迟疑回答，久美子稍稍有些语塞，叶月则兴奋得目光炯炯：<br>「这样啊！那咱们以后就是一个社团的了。」<br>「但是，这个学校的吹社……怎么说呢，那个……」<br>绿辉像是看穿了含糊其词的久美子的心思，代她说出了后面的话：<br>「演奏水平很差吧。」<br>「是吗？我听着还凑合啊。」<br>叶月百思不解。<br>高中吹奏乐社的演奏水平正在逐年上升。在久美子这类有经验的人耳中，即使是同样的演奏，或许也和叶月这种门外汉听到的并不相同。<br>对于叶月的反应，绿辉笑了笑：<br>「我觉得那种水准能不能在府大赛拿个银奖都难说。别说晋级关西大赛了，怕是连废金都拿不到。」<br>「废金是什么？」<br>「晋级关西大赛的学校是从获得金奖的学校中选出来的，于是乎，那些没能晋级的金奖我们就叫它废金。」<br>光是听到废金这个词，久美子感觉就有点扫兴。她为了转移话题向绿辉问道：<br>「绿你以前是圣女的吧？你能忍受咱们学校那种水平吗？」<br>说得也是……眼前的少女困扰地搔了搔脸颊，自言自语着陷入了思考。<br>「总之，我只要能演奏乐器就好了，那种水平也无所谓。只要像平常一样开开心心就可以了。」<br>「这样啊！」<br>「久美子你也打算加入吹社吗？」<br>「咦？」<br>这个理所当然的问题倒让久美子语塞起来。她还没决定好要加入哪个社团，但又不想让这件事情被别人知道。一时间，三人之间陷入了微妙的沉默。叶月为了打破这股沉默，便用手臂揽住久美子的肩头：<br>「久美子也会加入吹社吧？」<br>叶月天真地询问道。被人用这种表情问话，谁又忍心否定呢。久美子硬挤出一个笑容，放弃似地点点头：<br>「呃、嗯……打算加入。」<br>或许是对这个回答感到满足，绿辉的嘴角漾起微笑。<br>「太好了～我还担心能不能在社团里交到朋友呢！」<br>「咱们三个一起加入吧！」<br>叶月活泼地如是宣告道。看到两人的笑容，久美子感觉自己的判断或许并不算错。随波逐流大概也有随波逐流的好处吧。想是这么想，但一想起入学典礼上吹奏乐社的演奏，久美子还是偷偷叹了口气。</p><p>走出京阪线宇治车站，前方便是宇治桥。站在桥上，一座座架向塔之岛的红色桥梁尽收眼底。早晨散步其间，风光明媚，颇有些观光胜地的姿色。过了桥左转可以走到平等院大街。街上老字号茶店和和式点心店鳞次栉比，让久美子甚是中意。单是闻着乘风飘来的培茶香气，久美子就感到一阵满足。沿着石板路走就可以看到平等院的入口，不过想往里走需要买票，所以看不到本殿。<br>「你跑北宇治去了啊。」<br>与之同时，一个未曾料想的冲击排在了心情愉悦的久美子背上。似乎是后背被推了一把。拼命稳住快要摔倒的身子后，久美子回头看去：<br>「喂，突然来一下想干嘛！」<br>「没什么，只是偶然看到。」<br>一脸不以为意作出回答的，是久美子的青梅竹马塚本秀一。他身高一米八，体型纤瘦，初中就和久美子同属吹奏乐社，不知为何还连续三年同班。上高中后因为文理分班，终于就没有再同班了。<br>「你也没说过要去北宇治啊。」<br>「没说又如何？」<br>「一般都会说吧？好不容易上了同一间高中。」<br>「嚯～？平常都会说啊……」<br>久美子别有深意地冷笑一声，转身就往回走。平等院大街延伸出的竹子路沿宇治河铺建，可以走到久美子所住的公寓。<br>「等等我！」<br>秀一有些慌张地加快步伐的追到久美子旁边。他和久美子住在同一幢公寓楼里。<br>「你在生什么气？」<br>「我在生什么气？你这问题是认真的？」<br>久美子完全不看秀一，这样回道。秀一皱着眉头抱着胳膊思考了一会儿：<br>「确实没什么头绪啊。」<br>「哦是吗，那再也不见。」<br>秀一赶忙抓住打算就这样离去的久美子的手臂。<br>「等下等下等下！别无视我啊！」<br>「你先道了歉再说那个。」<br>「呜，怎么这么冷漠啊。」<br>「我可没有冷漠。」<br>「还说没有！」<br>秀一哭笑不得地叹了口气。穿着黑色立领制服的他比初中时更高了，以前个头明明比久美子还小的。想到自己非得抬头才能看到对方的脸，心头火起的久美子狠狠地往秀一背上拍了下去。好痛——秀一假装很痛，如此呻吟道。<br>「你初三的时候和我说过‘别跟我说话你个三八’吧？」<br>「那、那次啊……那次是事出有因啊，事出有因。」<br>秀一明显对久美子的话感到动摇，大概是想起自己的言行了吧。哈？久美子又往他背上打了一下。<br>「事出有因？什么因？」<br>「因为你当着其他男生的面，突然问我去不去你家吃饭嘛。那个，处在思春期正中的我为了掩饰害羞就……」<br>「这什么理由啊？跟我一起吃饭让人知道有什么问题吗？」<br>「没，倒不是有什么问题……就是很不好意思啊。」<br>「啊好吧我知道了不用解释了请离我远点。」<br>「别一口气说那么一大串好吗！到底怎么啦？都已经一年了，你也该原谅我了吧。我妈很难过唉，说是因为最近你都不来我家了。」<br>「你道歉我就考虑一下。」<br>「好好好我道歉，对不起对不起。」<br>「唔，真想揍你。」<br>久美子藏不住自己的愤怒，皱起了眉头。秀一双手合十，不断地道着歉。一个大男生缩成一团持续道歉实在太滑稽，久美子也终于放弃似地长长叹了口气：<br>「行了行了，还不够麻烦的。」<br>「噢！你原谅我了？」<br>「我可没那么说。」<br>「啊，是吗，抱歉。」<br>看对方态度这么好，久美子哼了一声鼻子。她把装着课本的书包换到左肩上，放慢步伐轻轻耸了耸肩：<br>「……你高中打算参加什么社团？」<br>可能是换了话题后终于安心，秀一表情明显和缓了下来。他那大概是他母亲买来、品味欠佳的运动鞋踏在石板路上，发出清脆的声响。<br>「我现在正头疼着呢。」<br>「反正又会参加吹社吧？」<br>「别那么说啊，好像我很没创意一样！那你又要加哪个？<br>「我？我……大概是吹社吧。」<br>「又是吹社？你也没资格说别人吧？」<br>「其实我本来不想加的。」<br>久美子撅起嘴唇。<br>「那你为什么还是加了？」<br>秀一窥探着久美子的表情。她只是错开视线暧昧地笑了笑，并没直接回答。然而青梅竹马仅凭这些就看透了一切：<br>「难不成又是那样？顺着周围就定了？」<br>「……怎么说呢，差不多吧。」<br>「你也改稍微改改这个性格了吧？总把自己的意见藏在心里多别扭啊。」<br>「我知道。」<br>被这么一说教，久美子便不再开口。总觉得有点没意思。<br>「不过算了，你要是去吹社那我也去。要吹什么乐器好呢……」<br>秀一若无其事地说着，使劲伸了个懒腰。袖口处白皙的手腕若隐若现。久美子没来由地觉得那有点像猫。<br>「经么轻率就作出决定没问题吗？社团。」<br>「没问题。反正我不擅长运动，也没有多少选择。」<br>「…………好吧。」<br>她尽可能装出无所谓的样子，低语道。新买的焦茶色平底便鞋沐浴在夕阳下，反射着微弱的光芒。眼前的少年羞涩地笑了笑，接着就开始胡扯起别的话题来。对了，我们班上有个超级大美女——听到这句话，久美子狠狠往他背上踹了一脚。</p><p>社团活动真正开始，是在入学典礼过了大概两周，四月末的时候。想要加入吹奏乐社的人们聚集在音乐室里，一个个都面带不安地坐在位子上。学长学姐模样的社员们则在外围围成一个圈，入学典礼上那位表情可怖的女生也身在其中。<br>「社长，估计不会再有人来了。」<br>一位抱着单簧管的学生低声对女生说道。久美子转头环视四周，在座的学生不到三十人，其中也有几个熟面孔。<br>「这样啊，不过也差不多了？」<br>被称作社长的少女若有所思地点着下巴说道。她的脖子上挂着一个大号的萨克斯——上低音萨克斯。只见她走到教室前方，深深吸了一口气说：<br>「呃……大家幸会。我是这个吹奏乐社的社长，名叫小笠原晴香，负责上低音萨克斯，和想加入萨克斯部门的人交集应该会比较多。」<br>小笠原说罢露出了一个微笑。与社长身份相符，她的声音也显得很有底气。<br>「我们吹奏乐社是个历史悠久的社团，直到十多年前还都是颇有名气的豪强，也参加过全国大赛……当然，现在已经完全看不出来了。」<br>音乐室的墙上挂满了吹奏乐社的光辉历史。连续出线关西大赛、全国大赛金奖……裱框封装的照片已经颇显老旧，被尘封的过往似乎隐隐透着悲凉。<br>「呃，还有，其实今年社里要换顾问了。去年的顾问梨香子老师今年要开始休产假，所以会有一位新的顾问老师过来，不过我们也还对那位老师知之甚少——就是开学典礼跟大家照过面的那位泷老师，说是今天可能得晚点来。另外，副顾问美知惠老师有监护人说明会，所以今天不会来社里。先提醒一年级各位一句：那位老师相当可怕，小心别惹到她。」<br>美知惠老师正是久美子的班主任。看来果然是个恐怖角色。<br>「今天的任务是分配乐器。教室里站着这些学长学姐，就是各乐器部门的代表。接下来他们会为大家介绍乐器，各位高中才开始的同学可以当作参考。另外，有过经验的同学请事先报告一下。乐器跟人也有适合不适合一说，所以我们会根据互相的契合度进行分配。就算没分到自己想要的乐器，也请大家不要抱怨。」<br>小笠原说罢便招呼站在周围的老社员往自己这边来。第一个站到前面的是一位手持小号的美少女。她那清爽的黑发和丽奈别无二致，但外形给人的印象却完全相反。那娇弱梦幻的外观，想必能激起所有男生的保护欲吧。女生礼貌而拘谨地打了个招呼，然后向小笠原那边探了一眼。不知是不是紧张，她的脸颊上隐隐透着一抹嫣红。<br>「我是小号部门的领队中世古香织。小号算是铜管乐器中的明星，我想不用我多说大家也知道。部门里现在有六人，大家关系很融洽。小号独奏机会多、旋律也比较丰富，绝对很有意思。无论大家有没有经验，我们都非常欢迎。请务必考虑一下小号！」<br>待她说完，大家纷纷鼓起掌来。香织之后，老社员们又对其他乐器逐个进行了介绍。长号、圆号、长笛、萨克斯、单簧管、双簧管、打击乐器……长笛、萨克斯之类的热门无论谁去说明都能集中大量人气，冷门乐器则是越冷人气就越少。虽然初中吹的是上低音号，不过到了高中挑战一下别的也不错——久美子一边想着，一边把视线移向了窗外。音乐室位处北校舍三层最靠边位置，可以很清楚的看到操场。操场上，棒球社和足球社社员们正在喊着莫名其妙的口号跑着步。久美子不太擅长和体育系社团的人接触，因为搞不懂他们在想什么。<br>「接下来是上低音号的介绍。」<br>小笠原的声音让久美子猛然回神。一位抱着银色上低音号的高挑美女登上前台，脸上的红框眼镜尤为引人注目。这就是入学典礼上挥舞指挥棒的那个人。可能是眼睛细长的缘故，女生多少给人以知性的印象。只见她用食指扶了扶眼镜，然后扬起嘴角说：<br>「我是低音部的领队，田中明日香。乐器就如大家所见，负责上低音号。」<br>上低音号？一位像是门外汉的学生困惑地问道。「没错！」——明日香似乎对这种反应早有预料，重重地点了点头。<br>「所谓上低音号，就是装配了活塞阀的降B调大号。这种乐器的历史现在并不明确，一说它是改良自魏玛首席演奏家Ferdinand Sommer发明的Sommerophone，后来得以传播开来；一说它是将比利时人阿道夫•萨克斯创造的活塞式低音萨克号号管加粗，后来在英国发展成了现在的样子。这种乐器最初名叫Euphonion，来源于希腊语的‘euphonos（悦耳的声音）’。恰如其名，上低音号不但拓展了低音部，音色还颇为柔和，可谓是非常优秀的乐器！上低音号在日本的历史没有什么明确的说法，但源头是明治三年Euphonion从英国传入日本。当初，军乐队的学员们都接受英式教育，不过明治三年海陆军分离后，海军军乐队接受英式教育——后来是德式教育，陆军军乐队则导入了法式教育。所以相当于上低音号的乐器，在海军中有euphonion或bariton，陆军中有petit bass或者小低音号等等各种各样的叫法。从大量遗留下来的图片来看，法式乐器上低音萨克号的使用率最高，但在一段时间内，海军、音乐学校、各种乐队和学校教育下的吹奏乐社团，也会根据指导者的方针使用德式bariton或euphonium。二战战败后，因为美国校园乐团在国内的普及，现在日本普遍称之为上低音号或者悠风宁号，至于乐器本身，最大众的则成了英国发展来的活塞式上低音号。然后——」<br>「行了行了，别再说了！明日香，要把维基上的东西拿来晒我倒没意见，可你至少也得归纳得简洁点嘛！」<br>本以为得持续到海枯石烂的田中明日香演讲会，被社长以一语打断。从学长学姐那不动声色的表情来看，这似乎也就是这位田中明日香的正常发挥。话说到一半就被打断的明日香不满地嘟起嘴来：<br>「怎么这样！我还完全没传达出上低音号的魅力呢！」<br>「不不不，早就足够了。好了下一位，有请大号的负责人！」<br>「我还没说完啊……」<br>虽然不满，明日香还是一脸别扭地退到了边上。为什么会由她来做部门领队呢……久美子心中浮现了这个理所当然的疑问。<br>「……我是大号的负责人，后藤卓也……」<br>继明日香之后走上前台的是一位又高又壮的大块头男生。和口若悬河的前者相比，这位男生则显得阴沉得多。戴着黑框眼镜的他抱着一个有刚才上低音号几倍大的乐器。那正是最大号的铜管乐器——大号。<br>「大号是低音，旋律没什么花样……非常朴素。另外，很沉。大概有十来公斤……管长大概六米。列队演出的时候会用苏萨号……那个也很沉……」<br>「………」<br>「………」<br>「哎，没了？」<br>小笠原吃惊得瞪大了眼。卓也则有些尴尬地挠了挠头：<br>「是，没了……」<br>「我说后藤！你一点大号的魅力都没传达出去啊！就由我田中明日香来替你把大号来介绍——」<br>「得了得了，你给我安静。」<br>明日香活力十足地举手自荐，却被小笠原一口否决。<br>「其实低音部还有种乐器叫低音大提琴，可惜去年的三年级毕业之后，社里就没人负责了。谁要是有经验请务必报名，因为再这么下去就不妙了。」<br>顺带一提，这个就是低音提琴！说着明日香将乐器搬了过来。看到这个比她身体还要高大的乐器，没见过的人都纷纷发出了惊叹。<br>「有人有经验吗？」<br>小笠原环视着教室问道。话音刚落，教室中央就战战兢兢地举起了一只手。是绿辉。<br>「那、那个，我初中是拉低音提琴的。」<br>看见这一幕，明日香的眼睛简直放出了光。她把乐器推给社长，三两步凑到绿辉跟前。而绿辉似乎是被对方的气势所吓倒，瞠目结舌地愣在了原地。明日香一把抓住绿辉的手紧紧握住，然后将五官端正的脸庞凑向绿辉。黑发披到肩上挡住了她的表情。<br>「那你要来吗？」<br>那声音低沉中透着一股妖艳，连久美子都心跳加速了一瞬。绿辉一脸陶醉地望着学姐的脸，然后猛然回神。红潮瞬间涌上她的面颊。<br>「是、是的！那、那个，不嫌弃的话，我求之不得！」<br>「真的？太棒了！帮了大忙了。」<br>明日香脸上绽开毫无阴霾的笑容，刚才那股严肃劲儿完全不见了踪影。原来如此，这就是她掌握人心的诀窍啊——久美子私下里想。<br>「那晴香，这姑娘我就收下了。」<br>「啊，行行行。知道了知道了。」<br>社长将乐器放到地板上摆摆手，然后拿起了放在钢琴上的笔记本。笔记本上写有「社员名簿」的字样，经年使用后已经磨得有些破破烂烂了。<br>「那接下来其他分部就开始招人吧。一个人一个人地问太麻烦，请大家去找心仪乐器的代表处报名。没被选上的话再去第二志愿。大概就这样，麻烦各位了。」<br>听了小笠原的简短指示，一年级学生纷纷动作起来。<br>「久美子，你打算选什么乐器？」<br>坐在身后的叶月凑过脸来问道。<br>「唔……选什么好呢……」<br>久美子一面含糊回应，一面向明日香那边望了过去。决定选低音大提琴的绿辉被明日香扯着脸颊，似乎成了后者的玩具。站在一旁的卓也则一脸愕然地试图把明日香拉开。<br>「那个学姐真有意思。」<br>叶月愉快地笑道。<br>「低音那边好像都挺个性的。」<br>「可能本来也是吧？没准对乐器的喜好也能显出性格来。」<br>「是不是呢？」<br>「比起绿叶我还是更愿意当红花，还是小号那种拉风的比较好一点。」<br>说着，叶月指向了香织那边。聚集到小号周围的女生，感觉都打扮得很华丽。<br>「那我也去排队了。」<br>说罢，她便露出一个亲切的微笑，排进了报名小号的队伍里。绝大多数学生都已经去到了自己想报名的地方，在教室中央左右徘徊的几乎只有久美子一个。怎么办——久美子静静叹了口气。她并没有特别想选某种乐器的强烈欲求。随便找个被分剩下的乐器算了，那样还能省得头疼。仿佛在探寻目的地一般，久美子将目光投向了自己的手心。细细的手纹就好像是不知名小镇的地图一样。<br>「你在犹豫选什么乐器？」<br>突然被搭话，久美子猛然抬头。发现明日香的面庞近在咫尺，她吓得差点跳了起来。<br>明日香用手指推了一下眼镜，然后毫无忌讳地直直盯着这边。怎、怎么了？久美子不由得后退了一步。<br>「我们那分部，除了刚才那姑娘之外还没人报名呢。」<br>「啊，是吗……」<br>久美子坦率回应，明日香却皱起了眉。这位学姐在久美子面前抱起双臂，做作地叹了口气说：<br>「我们那分部，除了刚才那姑娘之外还没人报名呢。」<br>「啊，是。刚才听到了。」<br>「我们那分部，除了刚才那姑娘之外还没——」<br>「那个，你为什么要一句话重复三遍呢？」<br>久美子耐不住性子地打断对方，问道。明日香眯起眼睛，拨了一下自己的头发。<br>「你可真是迟钝啊。我是在拉你入伙啊？」<br>「拉、拉我入伙？」<br>「没错，拉你入伙。」<br>对上低音号有兴趣吗？她缓缓露出一个笑容。<br>「现在我们分部上低音号和大号还有剩。每年都冷冷清清的很让人头疼……如何，要不要来报个名？」<br>「上低音号？」<br>「对，上低音号。」<br>就在久美子不知该如何回答的时候，绿辉小步走了过来。只见她胸前的白色缎带微微晃动。<br>「久美子你也来低音部？」<br>「咦——」<br>「好开心啊！毕竟没有认识的人很寂寞嘛！」<br>对吧？绿辉歪着头说道。看来在她眼里，久美子加入低音部是板上钉钉的事。<br>「……知道了，那我就选上低音号了。」<br>「好嘞！抓到社员了！」<br>明日香说着打了个响指。<br>「同是低音部，以后也请多指教了，久美子！」<br>绿辉一脸天真地微笑道。明日香在她身后低喃道：<br>「……这丫头挺好使的嘛。」<br>「学姐，你又打什么算盘呢？」<br>久美子脱口问道。明日香回头看着她，满面笑容地回答道：<br>「嗯？什么都没有啊？」<br>「……是吗。」<br>看来这位学姐不好对付。<br>「那么，别的同学都去报名各自希望的乐器了，咱们就等第二志愿吧。」<br>「让第一志愿落选的人加入大号组？」<br>「没办法嘛，又没人报名。大号和上低音号每年都是这样……为什么啊，明明很帅的。」<br>初中时代低音乐器也没什么人气。打算加入吹奏乐社的新生们，果然还是偏好那些帅气显眼的乐器。说来，久美子当时之所以决定加入小学的管乐团，也是因为想吹长号。爵士乐中，随着乐音拉动拉管的动作让久美子很是憧憬——虽然最后阴差阳错地被分了个上低音号。<br>望向叶月那边，正赶上她在做契合度测试。铜管乐器有一种名叫号嘴的零件，大小随对应乐器各不相同。大号和小号的号嘴放到一块儿，就好象大人和小孩一样。不同于木管乐器，演奏铜管乐器需要在接触着号嘴的情况下震动嘴唇，通过嘴唇的震动让铜管发出声音。<br>但是，这个吹气的动作是铜管乐器新手的第一道坎。虽然习惯了就很简单，但要吹出声音也有窍门，光像吹竖笛那样吹气是不行的。明明在吹却吹不出声音会给人很大压力，所以也有不少人显得十分忐忑。<br>「啊啊啊，就是不出声！」<br>架着乐器的叶月不满地嘟起了嘴。旁边，分部领队香织在使劲儿地给她加着油。喇叭口处，传来的只有叶月呼呼的吐气声。等她吹出声音估计还得花上个一天左右。<br>「香织学姐好温柔啊。」<br>绿辉敬佩地点了点头。那当然——不知为何明日香倒是骄傲了起来：<br>「她可是我们吹社的女神，可以说是万人迷了。」<br>「万人迷……主要是哪些人？」<br>虽然大致能猜到答案，但久美子还是畏畏缩缩地问道。<br>「看你问的，当然是女生们啦！」<br>明日香咯咯笑着回答道。这样啊——久美子也暧昧地笑着点了点头。<br>吹奏乐社算是一种特殊的空间。一般来讲男女比例只有一比九，严格来说女生常常还要更多。在这种空间里，同性之间会萌生出崇拜之情。这种时候，集中了大家名为「羡慕」的灼热视线的人大体分为两种：凝缩了淑女气质的可爱女生，抑或是强化了男子气概的帅气女生。遗憾的是，吹奏乐社里的男生大多不会被当作男生看待，所以不会成为崇拜的对象。吹奏乐社的男生身处女生堆里却找不到女朋友，原因也是这个……以上，都是久美子自以为是的想法。<br>「田中学姐……也很有人气就是了。」<br>背后突然响起的声音，吓得久美子反射性地叫出了声。回过头去，只见卓也正面无表情地站在旁边。<br>「田中学姐……这位，是确定选上低音号了？」<br>卓也并不看向这边，径直朝明日香问道。是啊？明日香点点头。<br>「‘田中学姐’……也就是说，后藤学长是田中学姐的学弟了？」<br>绿歪了歪头。<br>「没错没错，这小子才刚高二。你们好好相处啊。」<br>闻言久美子赶忙低头行礼：<br>「啊，我是黄前久美子，今后请多多指教。」<br>「……我是后藤。」<br>语毕，他就再度陷入了沉默。明日香嬉皮笑脸地说：<br>「后藤这人认生，话不多。别放心上。」<br>「啊，好的。」<br>就在久美子点头的瞬间，一段小号声穿透了整个教室。悠扬的高声留下柔和的余韵，压倒性的魄力与其他声音有着天壤之别。教室里的视线一齐集中向了声音的主人。<br>而那个人脸上的表情没有丝毫变化，只是缓缓把小号从唇边放了下去。<br>「……这样可以了吗？」<br>高坂丽奈说道。刚才那段似乎是在做测试。啊、嗯——香织有些被吓住似地点点头。<br>「高坂同学水平这么高，感觉来咱们学校都有点浪费了。你初中是哪里的？」<br>小笠原钦佩地问道。北中。丽奈笑也不笑地回答。<br>「社团之外我也报了班。」<br>「原来如此，怪不得这么厉害。我有点吓了一跳。」<br>「谢谢夸奖，我很高兴。」<br>丽奈点头行礼，脸上看不出一丝喜悦。难得她礼数这么周到，表情却总在拖后腿。<br>「总之大家都吹过一遍了，现在就来决定小号组的成员。呃，名额有三个……那就高坂、吉泽和系田了。落选的同学请去参加二次募集。就这样，快点动起来动起来。」<br>听到这句话，没被选上的学生们便纷纷犹豫地再度徘徊起来。叶月当然也身在其中。看着这一幕，叶月失落地低声道：<br>「叶月没法吹小号了……」<br>「可惜。」<br>「嗯？小绿，你跟那姑娘是朋友？」<br>听到二人的对话，明日香静静凑过身来问道。看着她脸上的笑容，久美子有了种不祥的预感。然而绿辉似乎没想太多，只是坦率地点了点头：<br>「是呀，怎么了？」<br>「原来如此原来如此……」<br>明日香扶着下巴，向久美子投来别有深意的视线：<br>「她初中应该不是吹社的把？刚才也完全不会吹。」<br>「说是网球社的。」<br>「哦？那肺活量应该没问题。」<br>说完她把手搭到了绿辉的肩头上。仅仅这个动作，就让绿辉的脸上泛起了一丝红润。<br>「我说小绿啊，和那姑娘一个分部，你不觉得会很开心吗？」<br>「觉得！」<br>「目前还没人报名大号，要真找不到人就麻烦了……你不觉得那姑娘很适合大号吗？看她应该也很有体力。」<br>「的确，叶月说不定挺适合大号的。」<br>「那你要不要试着拉拢一下她？我身为学姐去说总有点强迫的感觉，身为朋友的你去说，她想拒绝也不会有顾虑。」<br>「明白！我这就去找叶月谈！」<br>兴奋回应后，绿辉便一溜烟地跑向叶月，抱住了正在失落的她。这会儿看叶月还在对小号恋恋不舍，恐怕过几分钟他就得沦陷了。<br>「……学姐，你已经彻底把绿玩弄在股掌之间了啊。」<br>听到久美子的话，明日香呵呵笑道：<br>「今年有这么多直率可爱的学妹加入，真是令人高兴。」<br>「这么多……难道我也被算在里面了？」<br>「当然。」<br>说着，明日香用指尖推了一下眼镜。在薄薄镜片的那一头，感情深藏不露的黑色眼瞳直直地看着久美子：<br>「久美子，我看好你哦～」</p><p>后来又过了一个多小时，全员的乐器才全部确定好。低音部集结了久美子、叶月和绿辉的一年三班三人组。丽奈在小号组占据一席，秀一则出现在了长号组——明明初中他是吹圆号的。<br>「既然乐器都决定好了，接下来我想决定一下以后社团活动的方针。」<br>小笠原环视音乐室一周，说道。今天似乎是第一次全员集会，教室里已经挤满了人。二三年级的学生们懒懒散散地聊着天。容纳了八十人的空间里，交头接耳声凝聚成噪音，扰乱着平静的空气。<br>「大家安静点，现在在开会！」<br>小笠原话说一半，声音就被喀啷啷的开门声盖了过去。<br>「哎呀，大家都到了啊。」<br>「泷老师！」<br>社长开心地叫道。<br>这位教师瘦高个，衬衫之下身材匀称。那给人以柔和印象的甜蜜面具，瞬间便抓住了女生们的心。反射着点点灯光的整洁短发，双唇间隐约可见洁白的牙齿，无一不为他清爽的形象再添光彩。泷升，年龄三十四岁，二年五班班主任，任教音乐。<br>「喔，今年有不少新生加入嘛。能有三十人？」<br>「总共二十八个。」<br>「那空缺的乐器也能分配到人了，太好了。」<br>说着，泷面眯起眼睛：<br>「先做一下自我介绍。开学典礼时我跟大家打过招呼，应该有不少人已经认识我了。我是泷升，今年刚来到这所学校，任音乐教师。本来我觉得吹奏乐社的顾问应该由任副顾问多年的松本老师来当，但因为她本人的希望，这个职务落到了我的肩上。今后就请各位多多指教了。」<br>说罢他态度诚挚地鞠了一躬。久美子从没见过对晚辈行此大礼的人。音乐室中回响着学生们的掌声。泷抬起头，嘴角微微和缓下来：<br>「每年这个时期，我都要拜托学生们一件事。」<br>说着他往黑板上写起字来。排列在绿色空间中的白色字迹异常工整，简直就如电脑打印的一般。<br>「我的信条是重视学生的自主性。为了在接下来一年中当好大家的指导者，我想先请各位确定一下今年的目标。」<br>出线全国大赛——泷用食指指向黑板上的文字说：<br>「这是大家去年的目标吧。」<br>「……不，那个，老师……」<br>听了泷的话，小笠原稍显难为情地挠了挠头：<br>「该怎么说呢，那个目标相对而言更像个口号……大家并不是真心有那个打算……」<br>「哦？原来如此。那这个就不算数了。」<br>满不在乎地说着，泷在黑板上画了一个大大的叉。两条笔直的线将文字划掉——久美子看到这一画面没来由地感到了一阵窒息。她轻轻叹了口气。不甘心，感觉就像自己的梦想被否定了一样。她忽地回忆起了初中时的自己。真是蠢透了，明明初中时自己并没真正想去全国大赛的——久美子在内心自嘲道。<br>「不过这样不好啊。根本不打算达成的目标，是这世上最没用的东西了。」<br>泷皱着眉头抱起了胳膊：<br>「决定目标之后，我就会向着目标行动。如果大家真的想去全国大赛，那练习自然也会更为严格，反之，如果大家只是想出场创造一些快乐回忆，那练习就没必要太苛刻。我个人两边都可以，所以请大家按照自己的意志来决定。」<br>「让我们决定就行？」<br>社长似乎有些不知所措。泷笑着点了点头。‘自己决定’这个听着好听的说法实际有多麻烦，这位大人是否知道呢。久美子轻叹一声，然后悄悄探了探周围的表情——为了不让自己的意见脱离大众。<br>小笠原的视线四处游移，最后像是终于找到了救命稻草似地，停在了明日香的身上。明日香露出一个坏笑，那样子仿佛在说「就交给我低音部长吧」。<br>「真没办法，那我来做书记好了。」<br>说着她站起身来。不愧是副社长——教室后面有人低语道。<br>「明日香学姐是副社长？」<br>邻座的叶月对久美子耳语道。好像是——久美子一面回应，一面看向了明日香。<br>「不过，这目标要怎么决定？」<br>「要不就那样，少数服从多数？」<br>「少数服从多数啊……」<br>听到明日香的建议，小笠原沉吟了一会儿。久美子知道她在担心什么。<br>少数服从多数，即民主主义的构成原理，集团做决断时的标准解决办法。久美子对此相当不适应。从呱呱坠地那一刻起，她就不得不参加了无数次举手表决。多数派强势，少数派弱势。在数字化做的力量面前，久美子渺小的声音根本不值一提。久美子不会将心中的不情愿告诉他人，因为害怕被对方疏远。每次放空大脑假装多数派，久美子都会对狡猾的自己感到厌恶。<br>「除此之外也没什么办法了吧？」<br>明日香说。确实——小笠原回答。<br>「那就这样吧，三下五除二把这事儿解决掉。」<br>不知对哪里中意，绿辉在久美子身后小声重复了一遍「三下五除二」这个词。小笠原沉默地犹豫了一会儿，但最后还是嘟囔了一句「也没办法」，扫视了教室一周说：<br>「呃……那就少数服从多数了。」<br>「我来负责统计！」<br>明日香得意地自荐道。<br>「今年要选择哪个目标，请大家根据各自的希望举手表决。选项有两个，其一是参加全国大赛，其二是悠悠闲闲出个场就行。」<br>听了小笠原的话，久美子用手拄住了脸。话已至此，该选什么其实早就已经定好了。大人提示了两个选择，孩子们必须从中挑出最为正确的一个。世人所谓的正确，社会所谓的正确——经过这种自然淘汰，每个人的心中都能筛出应选的答案。<br>「那首先，希望以全国大赛为目标的人请举手。」<br>话音一落，社员们一齐举起了手。抹有指甲油的桃色指甲在荧光灯下熠熠生辉。留这么长指甲很难吹乐器吧——想着，久美子也举起了手。明日香看几乎所有人都举了手，就没再往黑板上记录。估计是因为结果已经显而易见了吧。<br>「接下来，去了京都大赛就可以的人。」<br>这次，教室里只孤零零地举起了一只手。那只从藏青色袖口伸出的白皙手掌，高高地举在上方。看到那只手的主人，小笠原目瞪口呆。<br>「葵……」<br>在惊讶地瞪大了眼睛的她对面，久美子也一样屏住了呼吸。<br>斋藤葵。<br>映入眼帘的，是一个久美子再熟悉不过的人。<br>「呃，那后者只有葵一个。」<br>明日香说着做了记录。一条画不成正字的斜线出现在黑板上。小笠原的表情痛苦地扭曲，但这只是一瞬间。片刻之后，她便拨了下刘海恢复到往常表情，向黑板那边瞥了一眼。明日香似乎从中有所察觉，眯起了双眼。<br>「根据表决的结果，今年我们要以全国大赛为目标努力练习。」<br>听到社长的话，社员们纷纷鼓起了掌。可能是满足于这个结果，泷也一脸平静地拍了拍手。只见他静静站起身，挥手打断正要开口的明日香，环视了教室一周：<br>「刚才这个目标，是在座各位自己的选择。有人反对，可能也有人并不打心里赞同。但是，这是大家的决定。我会尽力帮大家达成目标，但请不要忘记，我能做的也只是对各位进行指导而已。各位自己若是不努力，梦想就永远不可能实现。」<br>清楚了吗？<br>这句话令教室陷入了沉默。为什么谁都不说话呢——久美子感到一阵难受。这时候，泷拍了下手：<br>「怎么都在发呆？你们的回答呢？」<br>听顾问抬高音调，大家这才稀稀落落地给出了回应。该不会……久美子心想——<br>该不会，这个社团连回应顾问都还没习惯吧？<br>「回应得太慢了。我再问一遍……各位，你们都清楚了吗？」<br>这一次，大家齐声作出了回答。<br>那今天就到这里，各位辛苦了。<br>以社长凛然的声音为信号，一天的社团活动宣告结束。辛苦啦。辛苦。久美子一面听着四处的寒暄声，一面焦急地寻找着某位女生的背影。肺部被焦躁所支配，嗓子感觉火辣辣的。一发现那个背影，久美子便马上伸出手去：<br>「等一下，小……斋藤学姐！」<br>闻言，葵不慌不忙地转过身来。披肩的黑发缓缓划出一道弧线。葵向这边望了一眼，然后动摇似地睁大了眼睛：<br>「……久美子？」<br>「久违……了。」<br>看着这位敬语生硬的高一新生，高三生不禁莞尔。她轻轻把久美子的手从自己肩上拿开，看向窗外问道：<br>「……要一起回去吗？」<br>听到这个提议，久美子使劲点了点头。</p><p>「小葵，原来你在北宇治啊。」<br>听到久美子的问题，葵微微笑了笑。她住得和久美子家很近，比久美子大两岁。小学时两人经常因为住得近一起玩，不过在葵上了初中之后，两人的交流就少了起来。小时久美子一直得要仰视着葵，不过现在两人的身高基本一致。不，说不定久美子还要高上一点。葵用指尖拨开从小就引以为豪的美丽黑发，以非常成熟的动作耸了耸肩：<br>「本来我想去堀山高中的，但是没考上。」<br>「啊，这样啊。」<br>堀山高中是京都数一数二的超级升学名校。葵从过去就非常优秀，现在似乎也是如此。<br>「啊对了，你是学姐，我不说敬语没问题吗？」<br>听到久美子的话，葵摆了摆手：<br>「没事没事。听你对我说敬语感觉也挺不舒服的。啊，不过在大家面前还是说敬语吧。」<br>「嗯，明白。」<br>久美子坦率地点了点头。见状，葵捂着嘴角优雅地笑了笑。搭在肩上的书包因沉重而吱嘎作响。<br>「小葵，你刚才为什么要举手？」<br>「刚才？」<br>「就是问打不打算去全国的时候。」<br>反正没人用真心回答，何苦非要在那时候举手呢？<br>听到久美子的问题，葵静静垂下了目光。两个人影映在黑色的柏油路面上。尚带寒意的春风从二人之间吹过。久美子下意识地按住了裙边。制服才刚买来不久，上面还没有一丝褶皱。<br>「算是制造口实吧。」<br>葵说。<br>「口实？」<br>久美子问道。葵愉悦地点点头，又重复了一遍：<br>「没错，口实。」<br>葵的书包上挂着一个不知道算不算可爱的吊饰。那歪扭兔子的廉价眼瞳直直地盯着久美子。<br>「等退社的时候我就可以说，我已经坦白过自己的意见了。」<br>「小葵你要退社？」<br>久美子不禁提高了声调。看着双目圆睁的她，葵苦笑道：<br>「谁知道呢？现在我还没想好。」<br>「为什么？难得能坚持到现在。」<br>「你想啊，毕竟……」<br>葵斩钉截铁地说：<br>「毕竟靠社团是上不了大学的。」<br>这句以无谓态度包装的深刻发言，隐隐透出了些许的焦躁与自嘲。书包里面，未曾翻过翻过的参考书咔嗒咔嗒作响。<br>「小葵你想去哪所大学？」<br>「谁知道呢？还没决定好。」<br>这是说谎——久美子直觉。你复习了吗？完全没有——她的话就好比这种轻浮的对话一样毫不可信。这是学生特有的，保护自尊心的脆弱防线。久美子假装没有察觉，暧昧地笑道：<br>「这样啊。」<br>「久美子你也注意一点比较好。」<br>三年时间真是一眨眼就过去了。<br>葵这句分外刺耳的话，在久美子的鼓膜边留下了久久的余响。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;本文转载自轻度之国，原文地址：&lt;a href=&quot;https://www.lightnovel.cn/thread-831215-1-1.html&quot;&gt;https://www.lightnovel.cn/thread-831215-1-1.html&lt;/a&gt;&lt;br&gt;侵删。以下为原文内容（排版后）&lt;/p&gt;
&lt;h2 id=&quot;&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;headerlink&quot; title=&quot;&quot;&gt;&lt;/a&gt;</summary>
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="京吹" scheme="http://gyrojeff.moe/tags/%E4%BA%AC%E5%90%B9/"/>
    
  </entry>
  
  <entry>
    <title>310-02-ACOJ-1873-限制数字</title>
    <link href="http://gyrojeff.moe/2020/03/01/310-02-ACOJ-1873-%E9%99%90%E5%88%B6%E6%95%B0%E5%AD%97/"/>
    <id>http://gyrojeff.moe/2020/03/01/310-02-ACOJ-1873-%E9%99%90%E5%88%B6%E6%95%B0%E5%AD%97/</id>
    <published>2020-03-01T15:00:35.000Z</published>
    <updated>2020-09-14T23:56:59.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="310-02-ACOJ-1873-限制数字"><a href="#310-02-ACOJ-1873-限制数字" class="headerlink" title="310-02-ACOJ-1873-限制数字"></a>310-02-ACOJ-1873-限制数字</h1><h2 id="题目描述："><a href="#题目描述：" class="headerlink" title="题目描述："></a>题目描述：</h2><p>一个长度为n的大数，用$S_1,..S_n$表示，其中$S_i$表示数的第i位，$S_1$是数的最高位。<br>现告诉你一些限制条件，每个条件表示为四个数，$l_1,r_1,l_2,r_2$，即两个长度相同的区间，表示子串$S_{l_1} … S_{r_1}$与$S_{l_2} … S_{r_2}$完全相同。<br>给定限制条件后，问满足以上所有条件的数有多少个。</p><a id="more"></a><h2 id="题解："><a href="#题解：" class="headerlink" title="题解："></a>题解：</h2><p>首先考虑没有限制的情况是怎么样的，在没有限制的情况之下，所有的可能的情况应该是第一位数字有九种可能性（不可以是0），其余的各位都有十种可能性，将每位的种数相乘（小学问题）</p><p>而现在加上了限制条件，无非就是某几位的可能型变得一样了。</p><p>这个时候我们就可以使用<strong>并查集</strong>，如果某两个数字应该是相同的，那么就合并，最后的答案应该就是并查集的个数的$10$连乘（这里没有考虑首位为$9$的情况，这在后文会考虑到）。</p><p>但是很遗憾，单独直接使用并查集肯定会超时，时间复杂度为$O(n^2)$。而解决这一问题的方法就是使用二进制优化这一手段。</p><p>这里还是使用倍增的思想，我们可以对并查集的每个组编号。而且并查集的储存方式也要进行改变。</p><p>定义：</p><p>$f[i][j]$是起点为$i$区间$2^j$，即$1&lt;&lt;j$的区间</p><p>$fa[i]$表示第$i$个区间的父亲（并查集所需要的数组）</p><p>$s[i]$表示以$i$为编号的区间的起点位置（代码中需要知道所以要存）</p><p>步骤：</p><ol><li><p>读入 + 预处理数组（这非常好做）</p></li><li><p>读入限制条件 —&gt; 对“大区间”进行处理把区间简化为尽量少项数的$2^i$之和</p></li><li><p>下放约束条件：前面只对“大区间”进行了$merge$</p><p>现在要<strong>从大到小，对每个区间拆分为两个区间，两两$merge$</strong></p><p>举个形象的例子：$[3,6]$与$[9,12]$这两个区间在并查集当中是合并的，但是$[3,4],[9,10]$和$[5,6],[11,12]$并没有被合并，这就是下放的意义，因为我们最后统计的是长度为$1$的区间的并查集当中的个数</p></li><li><p>最后第一位的$ans=9$，然后从第二位开始遍历，求答案。</p></li></ol><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1e5</span> + <span class="number">5</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> P = <span class="number">1e9</span> + <span class="number">7</span>;</span><br><span class="line"><span class="comment">// s[i]表示以i为编号的区间的起始位置, fa[i]表示i的并查集的父亲, f[i][j]是i为起点1&lt;&lt;j为长度的区间的编号</span></span><br><span class="line"><span class="keyword">int</span> f[maxn][<span class="number">25</span>], fa[maxn * <span class="number">25</span>], s[maxn * <span class="number">25</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, m, cnt;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">pre_work</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt;= log2(n) + <span class="number">1</span>; j ++)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">f[i][j] = ++ cnt;</span><br><span class="line">fa[cnt] = cnt;</span><br><span class="line">s[cnt] = i;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">get</span><span class="params">(<span class="keyword">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (x == fa[x]) <span class="keyword">return</span> x;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">return</span> fa[x] = get(fa[x]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y, <span class="keyword">int</span> k)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> p = get(f[x][k]), q = get(f[y][k]);</span><br><span class="line"><span class="keyword">if</span> (p &gt; q) swap(p, q);</span><br><span class="line">fa[q] = p;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">pre_work();</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> l1, l2, r1, r2; <span class="built_in">cin</span> &gt;&gt; l1 &gt;&gt; r1 &gt;&gt; l2 &gt;&gt; r2;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = log2(r1 - l1 + <span class="number">1</span>); k &gt;= <span class="number">0</span>; k --)</span><br><span class="line"><span class="comment">// 判断这次的区间长度不会超过, 不然下一个k</span></span><br><span class="line"><span class="keyword">if</span> (l1 + (<span class="number">1</span> &lt;&lt; k) - <span class="number">1</span> &lt;= r1) &#123;</span><br><span class="line">merge(l1, l2, k);</span><br><span class="line">l1 += (<span class="number">1</span> &lt;&lt; k); l2 += (<span class="number">1</span> &lt;&lt; k);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">// 约束条件下放</span></span><br><span class="line"><span class="keyword">int</span> tmp, tmps;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = log2(n) + <span class="number">1</span>;  k; k --)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i + (<span class="number">1</span> &lt;&lt; k) - <span class="number">1</span> &lt;= n; i ++) &#123;</span><br><span class="line">tmp = get(f[i][k]); tmps = s[tmp];</span><br><span class="line">merge(i, tmps, k - <span class="number">1</span>); merge(i + (<span class="number">1</span> &lt;&lt; (k - <span class="number">1</span>)), tmps + (<span class="number">1</span> &lt;&lt; (k - <span class="number">1</span>)), k - <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">9</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">2</span>; i &lt;= n; i ++)</span><br><span class="line"><span class="keyword">if</span> (fa[f[i][<span class="number">0</span>]] == f[i][<span class="number">0</span>])</span><br><span class="line">ans = (ans * <span class="number">10</span>) % P;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这段代码值得注意：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">merge</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y, <span class="keyword">int</span> k)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> p = get(f[x][k]), q = get(f[y][k]);</span><br><span class="line"><span class="keyword">if</span> (p &gt; q) swap(p, q);</span><br><span class="line">fa[q] = p;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>由于$k$是一样的，所以区间序号上，$p,q$“同阶”，就意味着$x&lt;y\rightarrow p&lt;q;~x=y \rightarrow p=q;~x &gt; y \rightarrow p &gt; q$</p><p>在合并区间的过程中，<strong>为了保证父亲区间永远在前面</strong>（因为先统计了第一位的$9$），所以必须要以这个逻辑来写。</p><p>下面为<strong>错误</strong>方法，请勿模仿（去掉了高亮）：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">void merge(int x, int y, int k) &#123;</span><br><span class="line">int p &#x3D; get(f[x][k]), q &#x3D; get(f[y][k]);</span><br><span class="line">if (p &lt; q) fa[q] &#x3D; p;</span><br><span class="line">else fa[p] &#x3D; q;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;310-02-ACOJ-1873-限制数字&quot;&gt;&lt;a href=&quot;#310-02-ACOJ-1873-限制数字&quot; class=&quot;headerlink&quot; title=&quot;310-02-ACOJ-1873-限制数字&quot;&gt;&lt;/a&gt;310-02-ACOJ-1873-限制数字&lt;/h1&gt;&lt;h2 id=&quot;题目描述：&quot;&gt;&lt;a href=&quot;#题目描述：&quot; class=&quot;headerlink&quot; title=&quot;题目描述：&quot;&gt;&lt;/a&gt;题目描述：&lt;/h2&gt;&lt;p&gt;一个长度为n的大数，用$S_1,..S_n$表示，其中$S_i$表示数的第i位，$S_1$是数的最高位。&lt;br&gt;现告诉你一些限制条件，每个条件表示为四个数，$l_1,r_1,l_2,r_2$，即两个长度相同的区间，表示子串$S_{l_1} … S_{r_1}$与$S_{l_2} … S_{r_2}$完全相同。&lt;br&gt;给定限制条件后，问满足以上所有条件的数有多少个。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="并查集" scheme="http://gyrojeff.moe/tags/%E5%B9%B6%E6%9F%A5%E9%9B%86/"/>
    
  </entry>
  
  <entry>
    <title>310-01-ACOJ-0864-奶牛赛跑</title>
    <link href="http://gyrojeff.moe/2020/03/01/310-01-ACOJ-0864-%E5%A5%B6%E7%89%9B%E8%B5%9B%E8%B7%91/"/>
    <id>http://gyrojeff.moe/2020/03/01/310-01-ACOJ-0864-%E5%A5%B6%E7%89%9B%E8%B5%9B%E8%B7%91/</id>
    <published>2020-03-01T14:48:16.000Z</published>
    <updated>2020-09-22T12:59:04.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="310-01-ACOJ-0864-奶牛赛跑"><a href="#310-01-ACOJ-0864-奶牛赛跑" class="headerlink" title="310-01-ACOJ-0864 : 奶牛赛跑"></a>310-01-ACOJ-0864 : 奶牛赛跑</h1><h2 id="题目大意："><a href="#题目大意：" class="headerlink" title="题目大意："></a>题目大意：</h2><p>有$n$头奶牛，在一个圆形的赛跑场地里赛跑。所有奶牛同时从起点出发，奶牛的速度都是匀速的，其中第$i$头牛的速度为$v_i$，跑道的长度为单位$1$。当跑得最快那头奶牛跑完$k$圈之后，比赛就结束了。</p><p>有时候，跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈，从而在一些时刻超过慢的奶牛。这就是最令观众激动的套圈事件了。请问在整个比赛过程中，套圈事件一共会发生多少次呢？</p><a id="more"></a><h2 id="题解："><a href="#题解：" class="headerlink" title="题解："></a>题解：</h2><p>对于这道题，很显然可以直接求解（小学问题），然后要考虑的是如何降低计算的时间复杂度（原来是$O(n^2)$。</p><p>由于每一个奶牛的追击追击次数可以显然得到：$\lfloor \frac {(v_i - v_j)}{v}k\rfloor$，所以要求的就是$\sum_{1≤j&lt;i≤n}\lfloor\frac {v_i - v_j}{v}k\rfloor$。</p><p>那么采用整数与小数分离的思想计算：（对于负数向下取整是更小，所以对于$-0. ~…$向下取整为$-1$）</p><script type="math/tex; mode=display">\begin {align*}&\frac {(v_i-v_j)} {v} k = A + \alpha \\\Rightarrow~&\frac {v_ik}v - \frac {v_jk}v = A_i + \alpha_i - (A_j + \alpha_j) \\\Rightarrow~&\sum_{1≤j<i≤n}\lfloor\frac {v_i - v_j}{v}k\rfloor = \sum_{1≤j<i≤n}(A_i - A_j)+\sum_{1≤j<i≤n}\lfloor\alpha_i - \alpha_j\rfloor \\&\sum_{1≤j<i≤n}(A_i - A_j) \\=~&\sum_{1≤i≤n}[(i - 1)A_i - (n - i)A_i] = \sum_{1≤i≤n}(i - 1 - n + i) A_i = \sum_{1≤i≤n}(2i - 1 - n)A_i \\\end {align*}</script><p>而可以发现$\sum_{1≤j&lt;i≤n} \lfloor \alpha_i - \alpha_j\rfloor$就是求$\alpha$序列的逆序对个数。</p><p>而对于求逆序对同样可以进行优化（因为小数求逆序对需要进行离散化，很烦），令$\alpha_i’ = v_i \times k \mod v_n$，这非常好证明。</p><h2 id="正解："><a href="#正解：" class="headerlink" title="正解："></a>正解：</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, k;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000005</span>;</span><br><span class="line"><span class="keyword">int</span> v[maxn];</span><br><span class="line"><span class="keyword">int</span> A[maxn], a[maxn];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> id, val;</span><br><span class="line">&#125; B[maxn];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> T[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">lb</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(node a, node b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (a.val == b.val) <span class="keyword">return</span> a.id &lt; b.id;</span><br><span class="line"><span class="keyword">return</span> a.val &lt; b.val;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">int</span> i, <span class="keyword">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span> (i &lt;= n + <span class="number">100</span>) &#123;</span><br><span class="line">T[i] += d;</span><br><span class="line">i += lb(i);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">sum</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">ans += T[i];</span><br><span class="line">i -= lb(i);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) <span class="built_in">cin</span> &gt;&gt; v[i];</span><br><span class="line">sort(v + <span class="number">1</span>, v + <span class="number">1</span> + n);</span><br><span class="line"><span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">A[i] = v[i] * k / v[n]; a[i] = v[i] * k % v[n];</span><br><span class="line">ans += (<span class="number">2</span> * i - <span class="number">1</span> - n) * A[i];</span><br><span class="line">B[i] = (node) &#123;i, a[i]&#125;;</span><br><span class="line">&#125;</span><br><span class="line">sort(B + <span class="number">1</span>, B + <span class="number">1</span> + n, cmp);</span><br><span class="line"><span class="comment">//for (int i = 1; i &lt;= n; i ++) cout &lt;&lt; B[i].id &lt;&lt; &quot; &quot; &lt;&lt; B[i].val &lt;&lt; endl;</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> p = sum(B[i].id - <span class="number">1</span>);</span><br><span class="line">ans -= (i - <span class="number">1</span> - p);</span><br><span class="line">add(B[i].id, <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;310-01-ACOJ-0864-奶牛赛跑&quot;&gt;&lt;a href=&quot;#310-01-ACOJ-0864-奶牛赛跑&quot; class=&quot;headerlink&quot; title=&quot;310-01-ACOJ-0864 : 奶牛赛跑&quot;&gt;&lt;/a&gt;310-01-ACOJ-0864 : 奶牛赛跑&lt;/h1&gt;&lt;h2 id=&quot;题目大意：&quot;&gt;&lt;a href=&quot;#题目大意：&quot; class=&quot;headerlink&quot; title=&quot;题目大意：&quot;&gt;&lt;/a&gt;题目大意：&lt;/h2&gt;&lt;p&gt;有$n$头奶牛，在一个圆形的赛跑场地里赛跑。所有奶牛同时从起点出发，奶牛的速度都是匀速的，其中第$i$头牛的速度为$v_i$，跑道的长度为单位$1$。当跑得最快那头奶牛跑完$k$圈之后，比赛就结束了。&lt;/p&gt;
&lt;p&gt;有时候，跑得快的奶牛可以比跑得慢的奶牛多绕赛场几圈，从而在一些时刻超过慢的奶牛。这就是最令观众激动的套圈事件了。请问在整个比赛过程中，套圈事件一共会发生多少次呢？&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="BIT" scheme="http://gyrojeff.moe/tags/BIT/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
  </entry>
  
  <entry>
    <title>310-01-ACOJ-0488-统计节点</title>
    <link href="http://gyrojeff.moe/2020/03/01/310-01-ACOJ-0488-%E7%BB%9F%E8%AE%A1%E8%8A%82%E7%82%B9/"/>
    <id>http://gyrojeff.moe/2020/03/01/310-01-ACOJ-0488-%E7%BB%9F%E8%AE%A1%E8%8A%82%E7%82%B9/</id>
    <published>2020-03-01T14:46:39.000Z</published>
    <updated>2020-09-14T23:56:52.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="310-01-ACOJ-0488-统计节点"><a href="#310-01-ACOJ-0488-统计节点" class="headerlink" title="310-01-ACOJ-0488-统计节点"></a>310-01-ACOJ-0488-统计节点</h1><h2 id="题目大意："><a href="#题目大意：" class="headerlink" title="题目大意："></a>题目大意：</h2><p>给定一棵有$n$个结点的树，给定树上$m$个点，称作标兵，再给定一个距离范围$k$。求树上有多少点，其本身不是标兵，且到每个标兵的距离都不超过$k$。每条边的长度固定为$1$。</p><h2 id="题解："><a href="#题解：" class="headerlink" title="题解："></a>题解：</h2><p>对于这道题，要统计距离所有标兵的距离都不超过$k$的个数。换言之，就是统计节点，对于每一个满足要求的节点，要有其距离最远的标兵的距离不超过$k$。</p><p>有了这个想法，不妨构造出叶子节点均为标兵的且包含所有标兵的最小生成树。现在求这棵子树上的直径，或者说是这颗子树上的距离最远的两个端点。</p><p>所以题目就转换为统计所有节点，节点满足距离这两个端点都不超过$k$。（证明略，反证法，而且任意一条子树的直径都是可行的）。</p><a id="more"></a><h2 id="代码："><a href="#代码：" class="headerlink" title="代码："></a>代码：</h2><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"><span class="keyword">int</span> n, m, k;</span><br><span class="line"><span class="keyword">int</span> t_point[maxn], head[maxn], dist_1[maxn], dist_2[maxn], dist_3[maxn];</span><br><span class="line"><span class="keyword">bool</span> isImPoint[maxn];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span></span><br><span class="line">    <span class="keyword">int</span> to, next;</span><br><span class="line">&#125; g[maxn &lt;&lt; <span class="number">1</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v)</span> </span>&#123;</span><br><span class="line">    g[ecnt] = (edge) &#123;v, head[u]&#125;;</span><br><span class="line">    head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa, <span class="keyword">int</span> P)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line">        <span class="keyword">int</span> v = g[e].to;</span><br><span class="line">        <span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">        <span class="keyword">if</span> (P == <span class="number">1</span>) dist_1[v] = dist_1[u] + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (P == <span class="number">2</span>) dist_2[v] = dist_2[u] + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">if</span> (P == <span class="number">3</span>) dist_3[v] = dist_3[u] + <span class="number">1</span>;</span><br><span class="line">        dfs(v, u, P);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m &gt;&gt; k;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) &#123;</span><br><span class="line">      <span class="built_in">cin</span> &gt;&gt; t_point[i];</span><br><span class="line">      isImPoint[t_point[i]] = <span class="literal">true</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">      <span class="keyword">int</span> u, v; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v;</span><br><span class="line">      add_edge(u, v); add_edge(v, u);</span><br><span class="line">    &#125;</span><br><span class="line">dfs(<span class="number">1</span>, <span class="number">0</span>, <span class="number">1</span>);</span><br><span class="line"><span class="keyword">int</span> node_first = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++)</span><br><span class="line"><span class="keyword">if</span> (dist_1[t_point[i]] &gt;= dist_1[node_first]) node_first = t_point[i];</span><br><span class="line">dfs(node_first, <span class="number">0</span>, <span class="number">2</span>);</span><br><span class="line"><span class="keyword">int</span> node_second = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++)</span><br><span class="line"><span class="keyword">if</span> (dist_2[t_point[i]] &gt;= dist_2[node_second]) node_second = t_point[i];</span><br><span class="line">dfs(node_second, <span class="number">0</span>, <span class="number">3</span>);</span><br><span class="line"><span class="keyword">int</span> cnt = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="keyword">if</span> (isImPoint[i]) <span class="keyword">continue</span>;</span><br><span class="line"><span class="keyword">if</span> (dist_2[i] &lt;= k &amp;&amp; dist_3[i] &lt;= k)</span><br><span class="line">cnt ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; cnt &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;310-01-ACOJ-0488-统计节点&quot;&gt;&lt;a href=&quot;#310-01-ACOJ-0488-统计节点&quot; class=&quot;headerlink&quot; title=&quot;310-01-ACOJ-0488-统计节点&quot;&gt;&lt;/a&gt;310-01-ACOJ-0488-统计节点&lt;/h1&gt;&lt;h2 id=&quot;题目大意：&quot;&gt;&lt;a href=&quot;#题目大意：&quot; class=&quot;headerlink&quot; title=&quot;题目大意：&quot;&gt;&lt;/a&gt;题目大意：&lt;/h2&gt;&lt;p&gt;给定一棵有$n$个结点的树，给定树上$m$个点，称作标兵，再给定一个距离范围$k$。求树上有多少点，其本身不是标兵，且到每个标兵的距离都不超过$k$。每条边的长度固定为$1$。&lt;/p&gt;
&lt;h2 id=&quot;题解：&quot;&gt;&lt;a href=&quot;#题解：&quot; class=&quot;headerlink&quot; title=&quot;题解：&quot;&gt;&lt;/a&gt;题解：&lt;/h2&gt;&lt;p&gt;对于这道题，要统计距离所有标兵的距离都不超过$k$的个数。换言之，就是统计节点，对于每一个满足要求的节点，要有其距离最远的标兵的距离不超过$k$。&lt;/p&gt;
&lt;p&gt;有了这个想法，不妨构造出叶子节点均为标兵的且包含所有标兵的最小生成树。现在求这棵子树上的直径，或者说是这颗子树上的距离最远的两个端点。&lt;/p&gt;
&lt;p&gt;所以题目就转换为统计所有节点，节点满足距离这两个端点都不超过$k$。（证明略，反证法，而且任意一条子树的直径都是可行的）。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="最小生成树" scheme="http://gyrojeff.moe/tags/%E6%9C%80%E5%B0%8F%E7%94%9F%E6%88%90%E6%A0%91/"/>
    
  </entry>
  
  <entry>
    <title>307-15-背包的二进制优化</title>
    <link href="http://gyrojeff.moe/2020/03/01/307-15-%E8%83%8C%E5%8C%85%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BC%98%E5%8C%96/"/>
    <id>http://gyrojeff.moe/2020/03/01/307-15-%E8%83%8C%E5%8C%85%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E4%BC%98%E5%8C%96/</id>
    <published>2020-03-01T13:12:17.000Z</published>
    <updated>2020-09-14T23:56:49.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-15-背包的二进制优化"><a href="#307-15-背包的二进制优化" class="headerlink" title="307-15-背包的二进制优化"></a>307-15-背包的二进制优化</h1><h2 id="P2851-USACO06DEC-最少的硬币The-Fewest-Coins"><a href="#P2851-USACO06DEC-最少的硬币The-Fewest-Coins" class="headerlink" title="P2851 [USACO06DEC]最少的硬币The Fewest Coins"></a>P2851 [USACO06DEC]最少的硬币The Fewest Coins</h2><div data-v-1162f790="" data-v-1e7c6884=""><!----> <div data-v-796309f8="" data-v-1162f790="" class="card problem-card padding-default"><div data-v-a277ed48="" data-v-1162f790="" data-v-796309f8=""><!----> <!----> <h3 data-v-a277ed48="" class="lfe-h3">题目描述</h3> <div data-v-6156e5d2="" data-v-a277ed48="" class="marked"><p>Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always pays for his goods in such a way that the smallest number of coins changes hands, i.e., the number of coins he uses to pay plus the number of coins he receives in change is minimized. Help him to determine what this minimum number is.</p><p>FJ wants to buy T (1 ≤ T ≤ 10,000) cents of supplies. The currency system has N (1 ≤ N ≤ 100) different coins, with values V1, V2, ..., VN (1 ≤ Vi ≤ 120). Farmer John is carrying C1 coins of value V1, C2 coins of value V2, ...., and CN coins of value VN (0 ≤ Ci ≤ 10,000). The shopkeeper has an unlimited supply of all the coins, and always makes change in the most efficient manner (although Farmer John must be sure to pay in a way that makes it possible to make the correct change).</p><a id="more"></a><p>农夫John想到镇上买些补给。为了高效地完成任务，他想使硬币的转手次数最少。即使他交付的硬 币数与找零得到的的硬币数最少。</p><p>John想要买价值为T的东西。有N(1&lt;=n&lt;=100)种货币参与流通，面值分别为V1,V2..Vn (1&lt;=Vi&lt;=120)。John有Ci个面值为Vi的硬币(0&lt;=Ci&lt;=10000)。</p><p>我们假设店主有无限多的硬币， 并总按最优方案找零。<strong>注意无解输出-1。</strong></p></div> <h3 data-v-a277ed48="" class="lfe-h3">输入格式</h3> <div data-v-6156e5d2="" data-v-a277ed48="" class="marked"><p>Line 1: Two space-separated integers: N and T.</p><p>Line 2: N space-separated integers, respectively V1, V2, ..., VN coins (V1, ...VN)</p><p>Line 3: N space-separated integers, respectively C1, C2, ..., CN</p></div> <h3 data-v-a277ed48="" class="lfe-h3">输出格式</h3> <div data-v-6156e5d2="" data-v-a277ed48="" class="marked"><p>Line 1: A line containing a single integer, the minimum number of coins involved in a payment and change-making. If it is impossible for Farmer John to pay and receive exact change, output -1.</p></div> <h3 data-v-a277ed48="" class="lfe-h3">输入输出样例</h3> <div data-v-36768c72="" data-v-a277ed48="" class="sample-wrap sample"><div data-v-89a1e792="" data-v-36768c72="" class="input"><strong data-v-89a1e792="">输入 #1</strong> <button data-v-f3e1ca6a="" data-v-89a1e792="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-89a1e792="">3 705 25 505 2 1</pre></div> <div data-v-89a1e792="" data-v-36768c72="" class="output"><strong data-v-89a1e792="">输出 #1</strong> <button data-v-f3e1ca6a="" data-v-89a1e792="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-89a1e792="">3</pre></div></div> <h3 data-v-a277ed48="" class="lfe-h3">说明/提示</h3> <div data-v-6156e5d2="" data-v-a277ed48="" class="marked"><p>Farmer John pays 75 cents using a 50 cents and a 25 cents coin, and receives a 5 cents coin in change, for a total of 3 coins used in the transaction.</p></div></div></div></div><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>这道题其实就是一个背包问题，这个背包分为两部分：</p><ol><li>希望付的钱用最少的硬币的<strong>多重背包</strong>问题</li><li>希望找钱找的最少的硬币的<strong>完全背包</strong>问题</li></ol><p>而两个问题结合起来，就是找到付相同的钱两个问题之和的最小值就是答案。</p><p>但是在做背包之前会发现一个问题：就是不知道最大的可能金额会是多少，因为时间复杂度是$O(nCV_{\max})$，在这里，可以使用鸽笼原理来证明$V_{\max} = t + \max_i{V_i}^2$。</p><p>证明：</p><p>设货币面值为$V_{1}\le V_{2}\le \dots V_{n}$，$(V_{max}=V_{n})$那么当老板需要找$V_{max}^2$的钱时，至少需要$V_{max}$枚硬币。设一个前缀和数组为$S_{0}\ S_{1}\ S_{2}\dots S_{n}\ (S_{0}=0)$，其中共有$V_{max}+1$个元素。根据抽屉原理，至少有两个前缀和与$V_{max}$同余，则它们的差$=x\times V_{max}(x$为正整数且$x\ge 1)$。显然当$V_{max}$的数量足够时，将这一部分替换成$x$个面值为$V_{max}$是最优的（不要纠结真正采用的方案）。对于$V_{n-1}$，同理。所以在$V_{max}^2$的范围内一定可以找出最优方案，对于更大的$t+V_{max}^2$也一定可以 。</p><p>还有一点需要注意的就是这里的部分背包的时间复杂度就算在限制了最大金额之后，肯定还是会超时，所以需要寻找更好地解决方法，即使用<strong>二进制优化</strong>。</p><p>简单的来讲就是使用二进制将所有组合全部考虑到，这不难理解。其实它就等于是打乱了原来方程计算的顺序，但达到了原来计算的效果并且只需要花费$\log n$的时间。</p><p>以下为代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxT = <span class="number">10000</span>+<span class="number">10</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100</span>+<span class="number">5</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxv = <span class="number">120</span>;</span><br><span class="line"><span class="keyword">int</span> f[maxT + maxv * maxv],g[maxT + maxv * maxv];<span class="comment">//f[i]、g[i]分别表示John和店长付i元钱最少需要用的硬币 </span></span><br><span class="line"><span class="keyword">int</span> v[maxn], c[maxn];<span class="comment">//如题意所示 </span></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">max</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y)</span> </span>&#123; <span class="keyword">return</span> x &gt; y ? x : y; &#125;</span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">min</span><span class="params">(<span class="keyword">int</span> x, <span class="keyword">int</span> y)</span> </span>&#123; <span class="keyword">return</span> x &lt; y ? x : y; &#125;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">    <span class="keyword">int</span> n, t;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;t);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;v[i]);</span><br><span class="line">    <span class="keyword">int</span> sum = <span class="number">0</span>,mx = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;c[i]);</span><br><span class="line">        sum += c[i] * v[i];</span><br><span class="line">        mx = max(mx, v[i] * v[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (sum &lt; t)<span class="comment">//买不起，退了 </span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;-1\n&quot;</span>);</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">memset</span>(g, <span class="number">0x3f</span>, <span class="keyword">sizeof</span>(g));</span><br><span class="line">    <span class="built_in">memset</span>(f, <span class="number">0x3f</span>, <span class="keyword">sizeof</span>(f));</span><br><span class="line">    g[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">    f[<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = v[i]; j &lt;= mx; j ++)<span class="comment">//Rob找j元钱所用的最小钱数 </span></span><br><span class="line">            g[j] = min(g[j], g[j - v[i]] + <span class="number">1</span>);</span><br><span class="line">    <span class="comment">// 实际上应该是g[i][j]=min(g[i-1][j], g[i][j-v[i]+1])</span></span><br><span class="line">    <span class="comment">// g[i][j]表示考虑到第i个物品支付j元的最少硬币数 </span></span><br><span class="line">    <span class="comment">// 但是因为第一维存储的信息用不到</span></span><br><span class="line">    <span class="comment">// 且更新前g[i][j]记录的就是g[i-1][j]的信息 </span></span><br><span class="line">    <span class="comment">// 所以可以只用一维 </span></span><br><span class="line">    <span class="comment">// 其实就是一个完全背包</span></span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">    &#123; </span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j=<span class="number">1</span>;j&lt;=c[i];j&lt;&lt;=<span class="number">1</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> k = t + mx; k &gt;= j * v[i]; k --)</span><br><span class="line">           <span class="comment">//倒过来更新（实际上是拆分成01背包的形式） </span></span><br><span class="line">                f[k] = min(f[k], f[k - j * v[i]] + j);</span><br><span class="line">            c[i] -= j;<span class="comment">//相当于用拆分的物品进行了一次更新，要从数量中减去 </span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span> (c[i]) <span class="comment">// 还有剩余的没更新 </span></span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> k = t + mx; k &gt;= c[i] * v[i]; k --)</span><br><span class="line">                f[k] = min(f[k], f[k - c[i] * v[i]] + c[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 就是二进制优化的多重背包问题</span></span><br><span class="line">    <span class="keyword">int</span> ans = <span class="number">0x3f3f3f3f</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = t; i &lt;= t + mx; i ++)</span><br><span class="line">        ans = min(ans, f[i] + g[i - t]);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans == <span class="number">0x3f3f3f3f</span> ? <span class="number">-1</span> : ans);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-15-背包的二进制优化&quot;&gt;&lt;a href=&quot;#307-15-背包的二进制优化&quot; class=&quot;headerlink&quot; title=&quot;307-15-背包的二进制优化&quot;&gt;&lt;/a&gt;307-15-背包的二进制优化&lt;/h1&gt;&lt;h2 id=&quot;P2851-USACO06DEC-最少的硬币The-Fewest-Coins&quot;&gt;&lt;a href=&quot;#P2851-USACO06DEC-最少的硬币The-Fewest-Coins&quot; class=&quot;headerlink&quot; title=&quot;P2851 [USACO06DEC]最少的硬币The Fewest Coins&quot;&gt;&lt;/a&gt;P2851 [USACO06DEC]最少的硬币The Fewest Coins&lt;/h2&gt;&lt;div data-v-1162f790=&quot;&quot; data-v-1e7c6884=&quot;&quot;&gt;&lt;!----&gt; &lt;div data-v-796309f8=&quot;&quot; data-v-1162f790=&quot;&quot; class=&quot;card problem-card padding-default&quot;&gt;&lt;div data-v-a277ed48=&quot;&quot; data-v-1162f790=&quot;&quot; data-v-796309f8=&quot;&quot;&gt;&lt;!----&gt; &lt;!----&gt; &lt;h3 data-v-a277ed48=&quot;&quot; class=&quot;lfe-h3&quot;&gt;题目描述&lt;/h3&gt; &lt;div data-v-6156e5d2=&quot;&quot; data-v-a277ed48=&quot;&quot; class=&quot;marked&quot;&gt;&lt;p&gt;Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always pays for his goods in such a way that the smallest number of coins changes hands, i.e., the number of coins he uses to pay plus the number of coins he receives in change is minimized. Help him to determine what this minimum number is.&lt;/p&gt;
&lt;p&gt;FJ wants to buy T (1 ≤ T ≤ 10,000) cents of supplies. The currency system has N (1 ≤ N ≤ 100) different coins, with values V1, V2, ..., VN (1 ≤ Vi ≤ 120). Farmer John is carrying C1 coins of value V1, C2 coins of value V2, ...., and CN coins of value VN (0 ≤ Ci ≤ 10,000). The shopkeeper has an unlimited supply of all the coins, and always makes change in the most efficient manner (although Farmer John must be sure to pay in a way that makes it possible to make the correct change).&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="背包" scheme="http://gyrojeff.moe/tags/%E8%83%8C%E5%8C%85/"/>
    
  </entry>
  
  <entry>
    <title>307-13-子集枚举DP</title>
    <link href="http://gyrojeff.moe/2020/03/01/307-13-%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BEDP/"/>
    <id>http://gyrojeff.moe/2020/03/01/307-13-%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BEDP/</id>
    <published>2020-03-01T13:05:42.000Z</published>
    <updated>2020-09-22T12:59:03.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-13-14-子集枚举DP"><a href="#307-13-14-子集枚举DP" class="headerlink" title="307-13-14-子集枚举DP"></a>307-13-14-子集枚举DP</h1><h2 id="P3959-宝藏"><a href="#P3959-宝藏" class="headerlink" title="P3959 宝藏"></a>P3959 宝藏</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>参与考古挖掘的小明得到了一份藏宝图，藏宝图上标出了$n$个深埋在地下的宝藏屋， 也给出了这$n$个宝藏屋之间可供开发的$m$条道路和它们的长度。</p><p>小明决心亲自前往挖掘所有宝藏屋中的宝藏。但是，每个宝藏屋距离地面都很远， 也就是说，从地面打通一条到某个宝藏屋的道路是很困难的，而开发宝藏屋之间的道路 则相对容易很多。</p><p>小明的决心感动了考古挖掘的赞助商，赞助商决定免费赞助他打通一条从地面到某 个宝藏屋的通道，通往哪个宝藏屋则由小明来决定。</p><p>在此基础上，小明还需要考虑如何开凿宝藏屋之间的道路。已经开凿出的道路可以 任意通行不消耗代价。每开凿出一条新道路，小明就会与考古队一起挖掘出由该条道路 所能到达的宝藏屋的宝藏。另外，小明不想开发无用道路，即两个已经被挖掘过的宝藏 屋之间的道路无需再开发。</p><p>新开发一条道路的代价是：$L \times K$</p><p>$L$代表这条道路的长度，$K$代表从赞助商帮你打通的宝藏屋到这条道路起点的宝藏屋所经过的 宝藏屋的数量（包括赞助商帮你打通的宝藏屋和这条道路起点的宝藏屋） 。</p><p>请你编写程序为小明选定由赞助商打通的宝藏屋和之后开凿的道路，使得工程总代 价最小，并输出这个最小值。</p><a id="more"></a><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行两个用空格分离的正整数$n,m$，代表宝藏屋的个数和道路数。</p><p>接下来$m$行，每行三个用空格分离的正整数，分别是由一条道路连接的两个宝藏 屋的编号（编号为$1  \sim n$），和这条道路的长度 $v$。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>一个正整数，表示最小的总代价。</p><div data-v-44182ca5="" data-v-e7be449e="" class="sample-wrap sample" show-idx="true"><div data-v-c1761324="" data-v-44182ca5="" class="input"><strong data-v-c1761324="">输入 #1</strong> <button data-v-6b5ddc32="" data-v-c1761324="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-c1761324="">4 5 1 2 1 1 3 3 1 4 1 2 3 4 3 4 1  </pre></div> <div data-v-c1761324="" data-v-44182ca5="" class="output"><strong data-v-c1761324="">输出 #1</strong> <button data-v-6b5ddc32="" data-v-c1761324="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-c1761324="">4</pre></div></div><div data-v-44182ca5="" data-v-e7be449e="" class="sample-wrap sample" show-idx="true"><div data-v-c1761324="" data-v-44182ca5="" class="input"><strong data-v-c1761324="">输入 #2</strong> <button data-v-6b5ddc32="" data-v-c1761324="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-c1761324="">4 5 1 2 1 1 3 3 1 4 1 2 3 4 3 4 2  </pre></div> <div data-v-c1761324="" data-v-44182ca5="" class="output"><strong data-v-c1761324="">输出 #2</strong> <button data-v-6b5ddc32="" data-v-c1761324="" type="button" class="copy-btn lfe-form-sz-middle" style="border-color: rgb(52, 152, 219); color: rgb(52, 152, 219); background-color: rgba(52, 152, 219, 0);">    复制  </button> <pre data-v-c1761324="">5</pre></div></div><h3 id="说明-提示"><a href="#说明-提示" class="headerlink" title="说明/提示"></a>说明/提示</h3><p><img src="https://cdn.luogu.org/upload/pic/10868.png" alt="img"></p><p>【样例解释1】</p><p>小明选定让赞助商打通了1 11 号宝藏屋。小明开发了道路$1 \to 2$，挖掘了$2$号宝 藏。开发了道路$1 \to 4$，挖掘了$4$号宝藏。还开发了道路$4\to 3$，挖掘了$3$号宝 藏。工程总代价为：$1×1+1×1+1×2=4$</p><p>【样例解释2】</p><p>小明选定让赞助商打通了$1$号宝藏屋。小明开发了道路$1\to 2$，挖掘了$2$号宝 藏。开发了道路$1 \to 3$，挖掘了$3$号宝藏。还开发了道路$1\to 4$，挖掘了$4$号宝 藏。工程总代价为：$1×1+3×1+1×1=5$</p><p>【数据规模与约定】</p><p>对于$20\%$的数据： 保证输入是一棵树，$1≤n≤8$，$v≤5000$且所有的$v$都相等。</p><p>对于$40\%$的数据：$ 1≤n≤81$，$0≤m≤10000$，$v≤5000$且所有的$v$都相等。</p><p>对于$70\%$的数据： $1≤n≤8$，$0≤m≤1000$，$v≤5000$</p><p>对于$100\%$的数据： $1≤n≤12$，$0≤m≤1000$，$v≤500000$</p><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>我们可以想到，将整张图分为一块一块的（分层图），类似于下面这样的金字塔的形状：</p><img src="/2020/03/01/307-13-%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BEDP/image-20190722222654915.png" class=""><p>这样做的意义是我们只允许每层的元素与上一层相连，就达到了题目的用意，这样每个节点的$L\times K$就是$w(u,v) \times lv,~u\in S<em>{lv-1},~v\in S</em>{lv}$，其中$lv0$的只能有一个节点，就是赞助商免费送的根，总结下来可以得到下面这张构图的结论：</p><img src="/2020/03/01/307-13-%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BEDP/image-20190722223224745.png" class=""><p>定义$f(lv,S)$，$S$为一个点集，$f(lv,S)$表示的是截至到$0\sim lv$层中所有点分别为$S$的这$lv + 1$层的总共的花费是多少。那么会有以下的式子：（枚举$T$为$S$的真子集）</p><script type="math/tex; mode=display">f(lv,S) = \min_{T\subset S} \Big \{ f(lv - 1,S-T) + lv \times b\sum_{u\in T}\min_{a\in S-T}w(u, a)\Big \}</script><p>但是仔细观察上式，还是存在问题，就是$\sum<em>{u\in T}\min</em>{a\in S-T}w(u,a)$的部分，其会出现下图的情况（单单对于$P9$而言的图）：</p><img src="/2020/03/01/307-13-%E5%AD%90%E9%9B%86%E6%9E%9A%E4%B8%BEDP/image-20190722223809879.png" class=""><p>换句话说，其可能不止访问上一层的，还会访问更加上面的点。但是我们分析后会发现，这无伤大雅，因为我们假设访问上面的点为$u$，层数为$lv’$，且$lv’ &lt; lv - 1$，则此时的费用为：</p><script type="math/tex; mode=display">L'\times K = w(u,P_9) \times lv > w(u,P_9)\times (lv' + 1)</script><p>很好理解，这种状态不是最优的，所以在方程迭代的过程中，这种状态会被更好地状态所替代。</p><p>接下来，就是研究方程的边界问题：</p><script type="math/tex; mode=display">f_{i\in V} (0,\{i\}) = 0,~f_{S \subset V,~|S| ≥2}(0,S) = \infty</script><p>或者我们可以化为：</p><script type="math/tex; mode=display">f(i,S) = \begin {cases}~0~~~~~~~i\in V,S=\{i\} \\\infty~~~~~~\text{otherwise}\end {cases}</script><p>接下来我们可以思考一下这个方程的实现，因为表示集合与判断属于或者包含的关系并不是一件简单的事情。最终，我们想到可以使用二进制数来表示集合，例如$1,~2,~3,~7,~8$都有，$4,~5,~6$没有的集合可以表示为：</p><script type="math/tex; mode=display">\begin {align*}S=(&~11000111~)_2 \\&\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow\downarrow \\&~87654321\end {align*}</script><p>用这种思想，我们可以得到以下的结论：</p><ol><li><p>要判断$T$是否为$S$的子集，只需要判断：</p><p>$(S~|~T)==S$即可。</p></li><li><p>如果要判断$e$是否在集合$S$当中，只需要判断</p><p>$(S ~|~(1~\text{&lt;&lt;}~e)) == S$即可。</p></li><li><p>想要求$S-T$这个集合：</p><p>$S-T=S~\text{^}~T$。</p></li><li><p>迭代递归求子集：</p><p>$T = (T-1) ~\&amp;~ S$，其中$T$为子集$S$为全集，$T$的初始值为$S$，这样可以枚举$S$的所有子集，时间复杂度为$O(3^n)$而不是$O(4^n)$。</p></li></ol><p>所以可以基于方程，给出代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 1e9;</span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line">ll n, m, w[<span class="number">13</span>][(<span class="number">1</span> &lt;&lt; <span class="number">12</span>) + <span class="number">5</span>], f[<span class="number">13</span>][(<span class="number">1</span> &lt;&lt; <span class="number">12</span>) + <span class="number">5</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="keyword">if</span> (n == <span class="number">1</span> &amp;&amp; m == <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; <span class="number">0</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; <span class="number">13</span>; i ++)</span><br><span class="line">        <span class="keyword">for</span> (ll s = <span class="number">0</span>; s &lt; (<span class="number">1</span> &lt;&lt; n); s ++)</span><br><span class="line">            w[i][s] = inf;</span><br><span class="line">    <span class="keyword">while</span> (m --&gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ll u, v, len; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; len;</span><br><span class="line">        u --; v --;</span><br><span class="line">        w[u][<span class="number">1</span> &lt;&lt; v] = min(w[u][<span class="number">1</span> &lt;&lt; v], len);</span><br><span class="line">        w[v][<span class="number">1</span> &lt;&lt; u] = min(w[v][<span class="number">1</span> &lt;&lt; u], len);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">for</span> (ll s = <span class="number">1</span>; s &lt; (<span class="number">1</span> &lt;&lt; n); s ++) &#123;</span><br><span class="line">            ll lb = s &amp; (-s);</span><br><span class="line">            w[i][s] = min(w[i][s - lb], w[i][lb]);</span><br><span class="line">        &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (ll s = <span class="number">0</span>; s &lt; (<span class="number">1</span> &lt;&lt; n); s ++)</span><br><span class="line">            f[i][s] = inf;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll j = <span class="number">0</span>; j &lt; n; j ++)</span><br><span class="line">        f[<span class="number">0</span>][<span class="number">1</span> &lt;&lt; j] = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll lv = <span class="number">1</span>; lv &lt; n; lv ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (ll s = <span class="number">0</span>; s &lt; (<span class="number">1</span> &lt;&lt; n); s ++) &#123;</span><br><span class="line">            <span class="keyword">for</span> (ll t = s - <span class="number">1</span>; t &gt; <span class="number">0</span>; t = (t - <span class="number">1</span>) &amp; s) &#123;</span><br><span class="line">                ll sum = <span class="number">0</span>;</span><br><span class="line">                <span class="keyword">for</span> (ll x = <span class="number">0</span>; x &lt; n; x ++)</span><br><span class="line">                    <span class="keyword">if</span> ((t | (<span class="number">1</span> &lt;&lt; x)) == t) sum += w[x][s ^ t];</span><br><span class="line">                f[lv][s] = min(f[lv][s], f[lv - <span class="number">1</span>][s ^ t] + lv * sum);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    ll ans = inf;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++)</span><br><span class="line">        ans = min(ans, f[i][(<span class="number">1</span> &lt;&lt; n) - <span class="number">1</span>]);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P3052-USACO12MAR-摩天大楼里的奶牛Cows-in-a-Skyscraper"><a href="#P3052-USACO12MAR-摩天大楼里的奶牛Cows-in-a-Skyscraper" class="headerlink" title="P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper"></a>P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper</h2><div class="lg-content-left"><div class="lg-article am-g"><h3>题目描述</h3><p>A little known fact about Bessie and friends is that they love stair climbing races. A better known fact is that cows really don't like going down stairs. So after the cows finish racing to the top of their favorite skyscraper, they had a problem. Refusing to climb back down using the stairs, the cows are forced to use the elevator in order to get back to the ground floor.</p><p>The elevator has a maximum weight capacity of W (1 &lt;= W &lt;= 100,000,000) pounds and cow i weighs C_i (1 &lt;= C_i &lt;= W) pounds. Please help Bessie figure out how to get all the N (1 &lt;= N &lt;= 18) of the cows to the ground floor using the least number of elevator rides. The sum of the weights of the cows on each elevator ride must be no larger than W.</p><p>给出n个物品，体积为w[i]，现把其分成若干组，要求每组总体积&lt;=W，问最小分组。(n&lt;=18)</p><h2>输入输出格式</h2><strong>输入格式：</strong><br><p></p><p>* Line 1: N and W separated by a space.</p><p>* Lines 2..1+N: Line i+1 contains the integer C_i, giving the weight of one of the cows.</p><p></p><strong>输出格式：</strong><br><p></p><p>* A single integer, R, indicating the minimum number of elevator rides needed.</p><p>one of the R trips down the elevator. </p><p></p><h3>输入输出样例</h3><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>4 10 5 6 3 7 </pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>3 </pre></div></div><h2>说明</h2><p>There are four cows weighing 5, 6, 3, and 7 pounds. The elevator has a maximum weight capacity of 10 pounds.</p><p>We can put the cow weighing 3 on the same elevator as any other cow but the other three cows are too heavy to be combined. For the solution above, elevator ride 1 involves cow #1 and #3, elevator ride 2 involves cow #2, and elevator ride 3 involves cow #4. Several other solutions are possible for this input.</p></div><div class="lg-article-sub am-g" id="sub" style="display: none;"></div></div><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>这道题使用一种另类的贪心想法，<font color="#FF0000">这种贪心的转移状态比较特殊</font>，在这里设了两个转移方程，分别为：</p><script type="math/tex; mode=display">\left [\begin {matrix} f(S) \\g(S) \end {matrix}\right ] = \min_{u\in S}\begin {cases}\left [\begin {matrix} f(\complement _S\{u\}) \\g(\complement_S\{u\}) +w(u) \end {matrix}\right ] ~~~~~~~~~~&g(\complement_S\{u\}) + w(u) ≤C\\\left [\begin {matrix} f(\complement_S\{u\})  + 1 \\w(u) \end {matrix}\right ]&\text{otherwise}\end {cases}</script><p>其中是将</p><script type="math/tex; mode=display">\left [\begin {matrix} f(S) \\g(S) \end {matrix}\right ]</script><p>定义为一个关于$S$矩阵。$f(S)$代表以$S$为集合的牛已经关闭的电梯的数量，即电梯不再对牛开放，已经完成运送了，$g(S)$表示这集合$S$当中，除了$f(S)$中已经被送走的牛，剩下的牛的重量。<font color="#FF0000">注</font>：其中，一定存在$g(S) &lt; C$（没有一头的重量超过$C$）。</p><p>有了上述定义，这个方程非常容易理解，所以只需要进行子集枚举的背包就可以了，故时间复杂度为$O(n3^n)$。</p><p>AC代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="built_in">pair</span>&lt;<span class="keyword">int</span>, <span class="keyword">int</span>&gt; f[<span class="number">1</span> &lt;&lt; <span class="number">23</span>];</span><br><span class="line"><span class="keyword">int</span> n, c, w[<span class="number">1</span> &lt;&lt; <span class="number">23</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; c;</span><br><span class="line">    <span class="keyword">int</span> all = (<span class="number">1</span> &lt;&lt; n) - <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; w[i];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> s = <span class="number">1</span>; s &lt;= all; s ++) &#123;</span><br><span class="line">        f[s] = <span class="built_in">make_pair</span>(n, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> u = <span class="number">0</span>; u &lt; n; u ++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (s &amp; (<span class="number">1</span> &lt;&lt; u)) &#123;</span><br><span class="line">                <span class="keyword">int</span> x = f[s ^ (<span class="number">1</span> &lt;&lt; u)].first;</span><br><span class="line">                <span class="keyword">int</span> y = f[s ^ (<span class="number">1</span> &lt;&lt; u)].second;</span><br><span class="line">                <span class="keyword">if</span> (y + w[u] &lt;= c) &#123;</span><br><span class="line">                    f[s] = min(f[s], <span class="built_in">make_pair</span>(x, y + w[u]));</span><br><span class="line">                &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                    f[s] = min(f[s], <span class="built_in">make_pair</span>(x + <span class="number">1</span>, w[u]));</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; f[all].first + (f[all].second ? <span class="number">1</span> : <span class="number">0</span>) &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-13-14-子集枚举DP&quot;&gt;&lt;a href=&quot;#307-13-14-子集枚举DP&quot; class=&quot;headerlink&quot; title=&quot;307-13-14-子集枚举DP&quot;&gt;&lt;/a&gt;307-13-14-子集枚举DP&lt;/h1&gt;&lt;h2 id=&quot;P3959-宝藏&quot;&gt;&lt;a href=&quot;#P3959-宝藏&quot; class=&quot;headerlink&quot; title=&quot;P3959 宝藏&quot;&gt;&lt;/a&gt;P3959 宝藏&lt;/h2&gt;&lt;h3 id=&quot;题目描述&quot;&gt;&lt;a href=&quot;#题目描述&quot; class=&quot;headerlink&quot; title=&quot;题目描述&quot;&gt;&lt;/a&gt;题目描述&lt;/h3&gt;&lt;p&gt;参与考古挖掘的小明得到了一份藏宝图，藏宝图上标出了$n$个深埋在地下的宝藏屋， 也给出了这$n$个宝藏屋之间可供开发的$m$条道路和它们的长度。&lt;/p&gt;
&lt;p&gt;小明决心亲自前往挖掘所有宝藏屋中的宝藏。但是，每个宝藏屋距离地面都很远， 也就是说，从地面打通一条到某个宝藏屋的道路是很困难的，而开发宝藏屋之间的道路 则相对容易很多。&lt;/p&gt;
&lt;p&gt;小明的决心感动了考古挖掘的赞助商，赞助商决定免费赞助他打通一条从地面到某 个宝藏屋的通道，通往哪个宝藏屋则由小明来决定。&lt;/p&gt;
&lt;p&gt;在此基础上，小明还需要考虑如何开凿宝藏屋之间的道路。已经开凿出的道路可以 任意通行不消耗代价。每开凿出一条新道路，小明就会与考古队一起挖掘出由该条道路 所能到达的宝藏屋的宝藏。另外，小明不想开发无用道路，即两个已经被挖掘过的宝藏 屋之间的道路无需再开发。&lt;/p&gt;
&lt;p&gt;新开发一条道路的代价是：$L \times K$&lt;/p&gt;
&lt;p&gt;$L$代表这条道路的长度，$K$代表从赞助商帮你打通的宝藏屋到这条道路起点的宝藏屋所经过的 宝藏屋的数量（包括赞助商帮你打通的宝藏屋和这条道路起点的宝藏屋） 。&lt;/p&gt;
&lt;p&gt;请你编写程序为小明选定由赞助商打通的宝藏屋和之后开凿的道路，使得工程总代 价最小，并输出这个最小值。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
  </entry>
  
  <entry>
    <title>307-09-矩阵</title>
    <link href="http://gyrojeff.moe/2020/03/01/307-09-%E7%9F%A9%E9%98%B5/"/>
    <id>http://gyrojeff.moe/2020/03/01/307-09-%E7%9F%A9%E9%98%B5/</id>
    <published>2020-03-01T12:56:35.000Z</published>
    <updated>2020-09-22T12:59:01.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-09-10矩阵乘法与快速幂"><a href="#307-09-10矩阵乘法与快速幂" class="headerlink" title="307-09-10矩阵乘法与快速幂"></a>307-09-10矩阵乘法与快速幂</h1><hr><h2 id="矩阵乘法"><a href="#矩阵乘法" class="headerlink" title="矩阵乘法"></a>矩阵乘法</h2><p>定义矩阵$A$，$B$，其中$A$的大小为$a \times b$，$B$的大小为$b \times c$，对于矩阵$C=AB$中的每一个元素$C(i.j),~i\in [1, a],~j\in [1,c]$，存在以下：</p><script type="math/tex; mode=display">C(i,j) = \sum_{k=1}^bA(i,k) \times B(k,j)</script><a id="more"></a><h2 id="矩阵乘法的结合律"><a href="#矩阵乘法的结合律" class="headerlink" title="矩阵乘法的结合律"></a>矩阵乘法的结合律</h2><p>矩阵乘法存在结合律，首先定义矩阵$A<em>{a\times b},~B</em>{b\times c},~C_{c\times d}$，存在$(AB)C = A(BC)$。证明：</p><p>对于$i\in [1, a],~j\in [1,d]$，有：</p><script type="math/tex; mode=display">\begin {align}((AB)C)(i,j) &= \sum_{l=1}^c(\sum_{k=1}^b A(i,k)\times B(k,l))\times C(l,j) \\                         &= \sum_{k=1}^b \sum_{l=1}^c A(i,k)\times B(k,l) \times C(l,k) \\                         &= \sum_{k=1}^b A(i,k)\times (\sum_{l=1}^c B(k,l)\times C(l,k)) \\                         &= (A(BC))(i,j)\end {align}</script><p>由此，可以证明，矩阵的乘法具有结合律。</p><h2 id="Floyd-算法"><a href="#Floyd-算法" class="headerlink" title="Floyd 算法"></a>Floyd 算法</h2><p>Floyd算法的主要目的是在一张图上求任意两点之间的最短路，而最短路的核心思想其实可以由一个方程来表达：</p><script type="math/tex; mode=display">dis[i][j] = \min_{j \in [1,n]}\{dis[i][j],~ dis[i][k] + dis[k][j]\}</script><p>其表示$i \rightarrow j$的最短路。</p><p>但是它的初始化值得注意，其应该初始化为一个<strong>图论</strong>的<strong>单位矩阵</strong>，即主对角线的值为$0$，其余值均为$\infty$的一个“单位矩阵”，可以如下定义：</p><script type="math/tex; mode=display">dis[i][j] = \begin {cases}\infty ~~~~~~~&i≠j \\~0 &i=j\end {cases}</script><p>为了实现上述思想，以下为代码实现：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = <span class="number">1</span>; k &lt;= n; k ++)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++)</span><br><span class="line"><span class="keyword">if</span> (m[i][k] + m[k][j] &lt; m[i][j])</span><br><span class="line">m[i][j] = m[i][k] + m[k][j];</span><br></pre></td></tr></table></figure><p><strong>注：</strong>Floyd算法的k的那层循环必须在最外面，否则有些值无法被更新。</p><h2 id="快速幂"><a href="#快速幂" class="headerlink" title="快速幂"></a>快速幂</h2><p>如果我们要计算$a^n$，则会将$a$乘$n$次，时间复杂度为$O(n)$，而这太浪费时间了，为此，有了快速幂之中算法，快速幂可以将时间复杂度降为$O(\log n)$，其本质就是将指数化为一个$2$进制数来进行记忆化的乘法，现在假设有一个需求要求$a^{13}$，我们可以试着将$13$化为二进制：$13=(1101)_2$，也就是说：</p><script type="math/tex; mode=display">a^{13} = a^{2^3+2^2+2^0}</script><p>换言之，如果我们要计算$a^k$，我们只需要找到：$2^{k_1} + 2^{k_2} + …+2^{k_m}=n$，这样可以进行递推，很快地完成整个运算过程：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="function">ll <span class="title">quick_pow</span><span class="params">(<span class="keyword">int</span> a, <span class="keyword">int</span> n)</span>  </span>&#123;</span><br><span class="line">ll ans = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">while</span> (n &gt; <span class="number">0</span>) &#123;</span><br><span class="line"><span class="comment">// n的最后一位是否为1，若为1就进行</span></span><br><span class="line"><span class="keyword">if</span> (n &amp; <span class="number">1</span>)</span><br><span class="line">ans = ans * a;</span><br><span class="line">n &gt;&gt;= <span class="number">1</span>;</span><br><span class="line">a = a * a;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="矩阵乘法结合律的应用"><a href="#矩阵乘法结合律的应用" class="headerlink" title="矩阵乘法结合律的应用"></a>矩阵乘法结合律的应用</h2><p>前文已经证明了矩阵的乘法具有结合律，而既然有结合律那么自然可以使用快速幂求一个矩阵的幂运算，对于基于乘法的快速幂算法而言，需要修改的是运算符和初始化值。</p><p>在矩阵乘法中的初始化值也比较重要，当然这一步也可以忽略，因为执行$n-1$次其实也可以达到目的。但是还有一种更为优美的写法，就是初始化一个单位矩阵$A_0$：</p><script type="math/tex; mode=display">A_0(i,j) = \begin {cases}0~~~~~~~i≠j \\1~~~~~~~i=j\end {cases}</script><p>这样做的原因是对于任意一个矩阵$A$而言，存在$AA_0=A$。</p><p>代码（模板P3390）：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">105</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> P = <span class="number">1000000007</span>;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">matrix</span> &#123;</span></span><br><span class="line">    ll m[maxn][maxn];</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line">ll n, k;</span><br><span class="line"></span><br><span class="line"><span class="function">matrix <span class="title">matrix_multi</span><span class="params">(matrix a, matrix b)</span> </span>&#123;</span><br><span class="line">    matrix ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++) &#123;</span><br><span class="line">            ans.m[i][j] = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> k = <span class="number">1</span>; k &lt;= n; k ++) &#123;</span><br><span class="line">                ans.m[i][j] = (ans.m[i][j] % P + (a.m[i][k] * b.m[k][j]) % P) % P;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">matrix <span class="title">quick_matrix_pow</span><span class="params">(matrix a, ll t)</span> </span>&#123;</span><br><span class="line">    matrix ans;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (i == j) ans.m[i][j] = <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">else</span>        ans.m[i][j] = <span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span> (t &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (t &amp; <span class="number">1</span>)</span><br><span class="line">            ans = matrix_multi(a, ans);</span><br><span class="line">        a = matrix_multi(a, a);</span><br><span class="line">        t &gt;&gt;= <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line">    matrix a;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%lld&quot;</span>, &amp;a.m[i][j]);</span><br><span class="line">    matrix ans = quick_matrix_pow(a, k);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= n; j ++)</span><br><span class="line">            <span class="built_in">cout</span> &lt;&lt; ans.m[i][j] &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="使用矩阵乘法（快速幂）求斐波那契数列"><a href="#使用矩阵乘法（快速幂）求斐波那契数列" class="headerlink" title="使用矩阵乘法（快速幂）求斐波那契数列"></a>使用矩阵乘法（快速幂）求斐波那契数列</h2><p>斐波那契数列：</p><script type="math/tex; mode=display">f(n)=f(n-1)+f(n-2),~f(1)=f(2)=1</script><p>如果使用递归，$dp$，记忆化，等的方式，时间复杂度仍然至少为$O(n)$。</p><p>现在购下一个矩阵$A$，使得如下等式成立：</p><script type="math/tex; mode=display">A\left(\begin {matrix}f(n) \\f(n-1)\end {matrix}\right)=\left(\begin {matrix}f(n+1) \\f(n)\end {matrix}\right)</script><p>由于$f(n+1)=f(n)+f(n-1)$，所以设</p><script type="math/tex; mode=display">A=\left(\begin{matrix}x&y\\z&w\end{matrix}\right)</script><p>则：</p><script type="math/tex; mode=display">\begin {align}\left(\begin{matrix}x&y\\z&w\end{matrix}\right)\left(\begin{matrix}f(n) \\f(n-1)\end{matrix}\right) = \left(\begin{matrix}f(n)+f(n-1) \\ f(n)\end{matrix}\right)=\left(\begin{matrix}xf(n) + yf(n-1) \\zf(n)+wf(n-1)\end{matrix}\right)\end {align}</script><p>所以可以得到结论：</p><script type="math/tex; mode=display">\begin{cases}x=1 \\y=1 \\z=1 \\w=0\end {cases}</script><p>所以我们可以得到结论：有斐波那契数列前后连续的两项组成的一个列向量的矩阵乘上一个矩阵</p><script type="math/tex; mode=display">A=\left(\begin{matrix}1&1\\1&0\end{matrix}\right)</script><p>可以得到由斐波那契数列的后一项和当前项组成的另外一个列向量。</p><p>可以得到以下的推论：</p><script type="math/tex; mode=display">\left(\begin{matrix}1&1\\1&0\end{matrix}\right)\left(\begin{matrix}f(n) \\f(n-1)\end{matrix}\right) = \left(\begin{matrix}f(n+1) \\ f(n)\end{matrix}\right)</script><p>由于前文证明的矩阵乘法的结合律，可以得到结论：</p><script type="math/tex; mode=display">\left(\begin{matrix}f(n+1) \\ f(n)\end{matrix}\right) =\left(\begin{matrix}1&1\\1&0\end{matrix}\right)^{n-1}\left(\begin{matrix}f(2) \\f(1)\end{matrix}\right)</script><p>由此可以通过矩阵乘法的快速幂解决斐波那契数列的第$n$项求解，且时间复杂度为$O(\log n)$。</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> P = <span class="number">1000000007</span>;</span><br><span class="line"></span><br><span class="line">ll n;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">matrix</span> &#123;</span></span><br><span class="line">    ll a11, a12, a21, a22;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function">matrix <span class="title">matrix_multi</span><span class="params">(matrix a, matrix b)</span> </span>&#123;</span><br><span class="line">    matrix ans;</span><br><span class="line">    ans.a11 = ((a.a11 * b.a11) % P + (a.a12 * b.a21) % P) % P;</span><br><span class="line">    ans.a12 = ((a.a11 * b.a12) % P + (a.a12 * b.a22) % P) % P;</span><br><span class="line">    ans.a21 = ((a.a21 * b.a11) % P + (a.a22 * b.a21) % P) % P;</span><br><span class="line">    ans.a22 = ((a.a21 * b.a12) % P + (a.a22 * b.a22) % P) % P;</span><br><span class="line">    <span class="keyword">return</span> ans; </span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">matrix <span class="title">matrix_quick_pow</span><span class="params">(matrix a, ll k)</span> </span>&#123;</span><br><span class="line">    matrix ans = (matrix) &#123;<span class="number">1</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span>&#125;;</span><br><span class="line">    <span class="keyword">while</span> (k &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (k &amp; <span class="number">1</span>) ans = matrix_multi(ans, a);</span><br><span class="line">        a = matrix_multi(a, a);</span><br><span class="line">        k &gt;&gt;= <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    matrix e_0 = (matrix) &#123;<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">0</span>&#125;;</span><br><span class="line">    matrix <span class="keyword">e_t</span>;</span><br><span class="line">    <span class="keyword">e_t</span> = matrix_quick_pow(e_0, n - <span class="number">2</span>);</span><br><span class="line">    ll ans = (<span class="keyword">e_t</span>.a11 % P + <span class="keyword">e_t</span>.a12 % P) % P;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P2886-USACO07NOV-牛继电器Cow-Relays"><a href="#P2886-USACO07NOV-牛继电器Cow-Relays" class="headerlink" title="P2886 [USACO07NOV]牛继电器Cow Relays"></a>P2886 [USACO07NOV]牛继电器Cow Relays</h2><p>For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race using the T (2 ≤ T ≤ 100) cow trails throughout the pasture.</p><p>Each trail connects two different intersections (1 ≤ I1i ≤ 1,000; 1 ≤ I2i ≤ 1,000), each of which is the termination for at least two trails. The cows know the lengthi of each trail (1 ≤ lengthi&nbsp; ≤ 1,000), the two intersections the trail connects, and they know that no two intersections are directly connected by two different trails. The trails form a structure known mathematically as a graph.</p><p>To run the relay, the N cows position themselves at various intersections (some intersections might have more than one cow). They must position themselves properly so that they can hand off the baton cow-by-cow and end up at the proper finishing place.</p><p>Write a program to help position the cows. Find the shortest path that connects the starting intersection (S) and the ending intersection (E) and traverses exactly N cow trails.</p><p>给出一张无向连通图，求S到E经过k条边的最短路。</p><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>2 6 6 411 4 64 4 88 4 96 6 82 6 93 8 9</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>10</pre></div></div><p><strong>题解：</strong></p><p>对一个图的邻接矩阵进行平方，得到的每个元素$(a,b)$代表的就是由$a$到$b$经过两条道路有多少种走法。立方就是通过三条道路有多少种走法，以此类推：</p><script type="math/tex; mode=display">\begin {align}G^2(a,b) &= \sum_{i=1}^n G(a,i) G(i,b) \\G^3(a,b) &= \sum_{i=1}^n\sum_{j=1}^n G(a,i) G(i,j)G(j,b) \\&\cdots \\G^k(a,b) &= \sum_{i=1}^n G^{k-1}(a,i) G(i,b)\end {align}</script><p>在这道题中要求经过$i$条边走到$j$的最短路，可以列出以下方程：</p><p>设恰好通过$i$条边，走到$j$点的最短距离为$f(i,j)$</p><script type="math/tex; mode=display">f(i,j) = \min\{f(i-1, k) + G[k][j].w\}</script><p>我们可以对比一下类似地方程：设通过$i$条边，走到$j$点的方案数为$g(i,j)$</p><script type="math/tex; mode=display">g(i,j) = \sum_{k=1}^n g(i-1,k)\times G[k][j].\text{side_count}</script><p>我们可以简化一下方程：</p><p>对于一组点$(i,j)$设$C(i,j)$为$i \rightarrow j$通过两条边达到，将$C$考虑为一个数集，集矩阵，则：</p><script type="math/tex; mode=display">C(i,j) = \min_{k=1}^n\{C(i,j),~G(i,k).w+G(k,j).w\}</script><p>值得注意的是这其实与Floyd算法实现有所不同，因为$k$为参与$min$之中的条件，应该为最内层循环。</p><p>通过上面的这个式子，不难想到：如果要进过$k$条路，则要枚举出所有的中间节点，然而这个时候我们发现时间复杂度太大了，要想办法解决这个问题，同时考虑到这都是重复的运算，由此想到对<strong>取$\min$这个操作</strong>进行快速幂运算思想的优化。</p><p>首先，证明结合律的正确性：</p><p>定义新运算：矩阵$A<em>{a\times b},B</em>{b\times c}$：$(AB)(i,j)=\min_{k=1}^b {A(i,k)+B(k,j)}$</p><script type="math/tex; mode=display">\begin {align}((AB)C)(i,j) &= \min_{l=1}^c\{\min_{k=1}^b\{A(i,k) + B(k,l)\}+C(l,j)\} \\                         &= \min_{k=1}^b\min_{l=1}^c\{A(i,k) + B(k,l) + C(l,j)\} \\                         &= \min_{k=1}^b\{A(i,k) + \min_{l=1}^c\{B(k,l)+C(l,j)\}\} \\                         &= (A(BC))(i,j)\end {align}</script><p>综上所述，这是一道通过快速幂来进行矩阵的快速变换的最短路问题。</p><p>过程：设单位矩阵为$A_0$，图矩阵为$A$：</p><script type="math/tex; mode=display">\begin {align*}&\text{via 0 side: }A_0 \\&~~~~~\Downarrow \times A\\&\text{via 1 side: }A_1(=A) \\&~~~~~\Downarrow \times A \\&\text{via 2 sides: }A_2 \\&~~~~~\Downarrow \times A \\&\text{via 3 sides: }A_3 \\&~~~~~\Downarrow \times A \\&~~~~~\cdots \\&~~~~~\Downarrow \times A \\&\text{via k sides: }A_k \\\end {align*}</script><p>对于每组点$(i,j)$，经过$k$条边$i\rightarrow j$的最短路为$A_k(i,j)$。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">205</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n = <span class="number">0</span>, k, m, s, t, d[maxn][maxn], a[maxn][maxn], <span class="built_in">map</span>[<span class="number">1005</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">mul</span><span class="params">(<span class="keyword">int</span> a[maxn][maxn], <span class="keyword">int</span> b[maxn][maxn])</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> t[maxn][maxn];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; n;j ++) &#123;</span><br><span class="line">            t[i][j] = <span class="number">1e9</span>;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> k = <span class="number">0</span>; k &lt; n; k ++) &#123;</span><br><span class="line">                <span class="keyword">if</span> (t[i][j] &gt; a[i][k] + b[k][j])</span><br><span class="line">                    t[i][j] = a[i][k] + b[k][j];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; n; j ++)</span><br><span class="line">            a[i][j] = t[i][j];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; k &gt;&gt; m &gt;&gt; s &gt;&gt; t;</span><br><span class="line">    <span class="built_in">memset</span>(d, <span class="number">0x3f</span>, <span class="keyword">sizeof</span>(d));</span><br><span class="line">    <span class="built_in">memset</span>(a, <span class="number">0x3f</span>, <span class="keyword">sizeof</span>(a));</span><br><span class="line">    <span class="built_in">memset</span>(<span class="built_in">map</span>, <span class="number">0xff</span>, <span class="keyword">sizeof</span>(<span class="built_in">map</span>)); <span class="comment">// -1</span></span><br><span class="line">    </span><br><span class="line"></span><br><span class="line">    <span class="comment">// 由于数据关系，需要对数据进行过映射</span></span><br><span class="line">    <span class="keyword">while</span> (m --&gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">int</span> l, u, v; <span class="built_in">cin</span> &gt;&gt; l &gt;&gt; u &gt;&gt; v;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">map</span>[u] == <span class="number">-1</span>) <span class="built_in">map</span>[u] = n ++;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">map</span>[v] == <span class="number">-1</span>) <span class="built_in">map</span>[v] = n ++;</span><br><span class="line">        d[<span class="built_in">map</span>[u]][<span class="built_in">map</span>[v]] = d[<span class="built_in">map</span>[v]][<span class="built_in">map</span>[u]] = l;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// a为图的单位矩阵，即A_0，只有对角线是0，其他都是无穷大</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++) a[i][i] = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 快速幂</span></span><br><span class="line">    <span class="keyword">while</span> (k &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span> (k &amp; <span class="number">1</span>) mul(a, d);</span><br><span class="line">        mul(d, d);</span><br><span class="line">        k /= <span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; a[<span class="built_in">map</span>[s]][<span class="built_in">map</span>[t]] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-09-10矩阵乘法与快速幂&quot;&gt;&lt;a href=&quot;#307-09-10矩阵乘法与快速幂&quot; class=&quot;headerlink&quot; title=&quot;307-09-10矩阵乘法与快速幂&quot;&gt;&lt;/a&gt;307-09-10矩阵乘法与快速幂&lt;/h1&gt;&lt;hr&gt;
&lt;h2 id=&quot;矩阵乘法&quot;&gt;&lt;a href=&quot;#矩阵乘法&quot; class=&quot;headerlink&quot; title=&quot;矩阵乘法&quot;&gt;&lt;/a&gt;矩阵乘法&lt;/h2&gt;&lt;p&gt;定义矩阵$A$，$B$，其中$A$的大小为$a \times b$，$B$的大小为$b \times c$，对于矩阵$C=AB$中的每一个元素$C(i.j),~i\in [1, a],~j\in [1,c]$，存在以下：&lt;/p&gt;
&lt;script type=&quot;math/tex; mode=display&quot;&gt;
C(i,j) = \sum_{k=1}^bA(i,k) \times B(k,j)&lt;/script&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="Math" scheme="http://gyrojeff.moe/tags/Math/"/>
    
    <category term="Matrix" scheme="http://gyrojeff.moe/tags/Matrix/"/>
    
  </entry>
  
  <entry>
    <title>307-08-背包应用</title>
    <link href="http://gyrojeff.moe/2020/03/01/307-08-%E8%83%8C%E5%8C%85%E5%BA%94%E7%94%A8/"/>
    <id>http://gyrojeff.moe/2020/03/01/307-08-%E8%83%8C%E5%8C%85%E5%BA%94%E7%94%A8/</id>
    <published>2020-03-01T12:52:55.000Z</published>
    <updated>2020-09-22T12:59:00.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-08-背包"><a href="#307-08-背包" class="headerlink" title="307-08-背包"></a>307-08-背包</h1><hr><h2 id="P2160-SHOI2007-书柜的尺寸"><a href="#P2160-SHOI2007-书柜的尺寸" class="headerlink" title="P2160 [SHOI2007]书柜的尺寸"></a>P2160 [SHOI2007]书柜的尺寸</h2><p><h3>题目描述</h3></p><p><p>Tom不喜欢那种一字长龙式的大书架，他只想要一个小书柜来存放他的系列工具书。Tom打算把书柜放在桌子的后面，这样需要查书的时候就可以不用起身离开了。</p></p><p><p>显然，这种书柜不能太大，Tom希望它的体积越小越好。另外，出于他的审美要求，他只想要一个三层的书柜。为了物尽其用，Tom规定每层必须至少放一本书。现在的问题是，Tom怎么分配他的工具书，才能让木匠造出最小的书柜来呢？ </p></p><p><p>Tom很快意识到这是一个数学问题。每本书都有自己的高度hi和厚度ti。我们需要求的是一个分配方案，也就是要求把所有的书分配在S1、S2和S3三个非空集合里面的一个，不重复也不遗漏，那么，很明显，书柜正面表面积（S）的计算公式就是： </p></p><script type="math/tex; mode=display">S = \Bigg(\sum_{j = 1}^3 \max_{i \in S_j}h_i\Bigg) \times \Big(\max_{j=1}^3 \sum_{i \in S_j}t_i\Big)</script><p><p>由于书柜的深度是固定的（显然，它应该等于那本最宽的书的长度），所以要求书柜的体积最小就是要求S最小。Tom离答案只有一步之遥了。不过很遗憾，Tom并不擅长于编程，于是他邀请你来帮助他解决这个问题。</p><br><a id="more"></a></p><p><h3>输入输出格式</h3><br><strong>输入格式：</strong></p><p><p>文件的第一行只有一个整数n（3≤n≤70），代表书本的本数。<br>接下来有n行，每行有两个整数hi和ti，代表每本书的高度和厚度，我们保证150≤hi≤300，5≤ti≤30。</p><strong>输出格式：</strong></p><p><p>只有一行，即输出最小的S。</p></p><p><h3>输入输出样例</h3></p><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>4220 29195 20200 9180 30</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>18000</pre></div></div><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>首先将书按照高度</p><script type="math/tex; mode=display">f[i][j][k][l] = \min\begin {cases}f[i-1][j-t[i]][k][l] + (j ==t[i]) * h[i] \\f[i-1][j][k-t[i]][l] + (k ==t[i]) * h[i] \\f[i-1][j][k][l-t[i]] + (l ==t[i]) * h[i]\end {cases}</script><p>但是我们可以发现这样空间复杂度会太高，所以为了解决这个问题，可以有以下做法：</p><ol><li>最后一维可以同过维护前缀和：$l = s[i]-j-k$来得到，可以省略一维</li><li>第一维$i$可以用滚动数组滚掉</li></ol><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> ll maxn = <span class="number">2105</span>;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line">    ll h, t;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> node &amp;a, <span class="keyword">const</span> node &amp;b) &#123;</span><br><span class="line">        <span class="keyword">return</span> a.h &gt; b.h;</span><br><span class="line">    &#125;</span><br><span class="line">&#125; a[maxn];</span><br><span class="line"></span><br><span class="line">ll n, s[maxn], f[maxn][maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; a[i].h &gt;&gt; a[i].t;</span><br><span class="line">    sort(a + <span class="number">1</span>, a + n + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        s[i] = s[i - <span class="number">1</span>] + a[i].t;</span><br><span class="line">    ll sum = s[n];</span><br><span class="line">    <span class="built_in">memset</span>(f, <span class="number">0x3f</span>, <span class="keyword">sizeof</span>(f));</span><br><span class="line">    f[<span class="number">0</span>][<span class="number">0</span>] = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (ll j = sum; j &gt;= <span class="number">0</span>; j --) &#123;</span><br><span class="line">            <span class="keyword">for</span> (ll k = sum - j; k &gt;= <span class="number">0</span>; k --) &#123;</span><br><span class="line">                ll x1 = j - a[i].t;</span><br><span class="line">                ll x2 = k - a[i].t;</span><br><span class="line">                ll x3 = s[i] - j - k - a[i].t;</span><br><span class="line">                ll t1 = <span class="number">1e9</span>, t2 = <span class="number">1e9</span>, t3 = <span class="number">1e9</span>;</span><br><span class="line">                <span class="keyword">if</span> (x1 &gt;= <span class="number">0</span>) t1 = f[x1][k];</span><br><span class="line">                <span class="keyword">if</span> (x1 == <span class="number">0</span>) t1 += a[i].h;</span><br><span class="line">                <span class="keyword">if</span> (x2 &gt;= <span class="number">0</span>) t2 = f[j][x2];</span><br><span class="line">                <span class="keyword">if</span> (x2 == <span class="number">0</span>) t2 += a[i].h;</span><br><span class="line">                <span class="keyword">if</span> (x3 &gt;= <span class="number">0</span>) t3 = f[j][k];</span><br><span class="line">                <span class="keyword">if</span> (x3 == <span class="number">0</span>) t3 += a[i].h;</span><br><span class="line">                f[j][k] = min(t1, min(t2, t3));</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    ll ans = <span class="number">8e18</span>;</span><br><span class="line">  <span class="comment">// i，j，l至少为1</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt;= sum - <span class="number">2</span>; i ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (ll j = <span class="number">1</span>; i + j &lt; sum; j ++) &#123;</span><br><span class="line">            ans = min(ans, max(i, max(j, sum - i - j)) * f[i][j]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><h2 data-v-16e69265="" data-v-7231c4e6="" class="lfe-h1"> P2967 [USACO09DEC]视频游戏的麻烦Video Game Troubles</h2></p><p><h3>题意翻译</h3></p><p><p>农夫约翰的奶牛们打游戏上瘾了！本来约翰是想要按照调教兽的做法拿她们去电击戒瘾的，可后来他发现奶牛们玩游戏之后比原先产更多的奶。很明显，这是因为满足的牛会产更多的奶。</p></p><p><p>但是，奶牛们因何者为最好的游戏主机而吵得不可开交。约翰想要在给定的预算内购入一些游戏平台和一些游戏，使他的奶牛们生产最多的奶牛以养育最多的小牛。</p><br>约翰考察了 N 种游戏主机，第 i 种主机的价格是 $P_i$，该主机有 $G_i$ 个独占游戏。很明显，奶牛必须先买进一种游戏主机，才能买进在这种主机上运行的游戏。在每种主机中，游戏 j 的价格为 ，$GP_j$每头奶牛在玩了该游戏后的牛奶产量为 $PV_j$。</p><p>农夫约翰的预算为 V。请帮助他确定应该买什么游戏主机和游戏，使得他能够获得的产出值的和最大。</p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>定义：</p><p>$h[i]$：总共花费$i$元可以获得的最大产出</p><p>$f[i]$：花费$i$元且购买<strong>当前</strong>游戏机所获得的最大产出</p><p>背包问题方程：</p><script type="math/tex; mode=display">f[i] = \max\{f[i],~f[i-gp[j]] + pv[j]\}</script><p>则可以有以下过程：</p><p>每次循环：</p><ol><li>将上一轮的$h[i]$赋值给$f[i]$</li><li>对于$f[i]$做背包问题</li><li>对于每一个$h[i]$，比较$f[i-p]$与$h[i]$，之所以要$i-p$：必须购买游戏机，游戏机要花$p$元。即更新后的$h[i] = \max{h[i], ~f[i-p]}$</li></ol><p><strong>注</strong>：在整个过程中，要注意<strong>边界</strong>的问题。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, v;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> f[maxn], h[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;    </span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; v;</span><br><span class="line">    <span class="keyword">while</span> (n --&gt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">int</span> p, g; <span class="built_in">cin</span> &gt;&gt; p &gt;&gt; g;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = v; i &gt;= <span class="number">0</span>; i --) f[i] = h[i];</span><br><span class="line">        <span class="keyword">while</span> (g --&gt; <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="keyword">int</span> gp, pv; <span class="built_in">cin</span> &gt;&gt; gp &gt;&gt; pv;</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> i = v; i &gt;= gp; i --)</span><br><span class="line">                f[i] = max(f[i], f[i - gp] + pv);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = v; i &gt;= p; i --)</span><br><span class="line">            h[i] = max(h[i], f[i - p]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; h[v] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-08-背包&quot;&gt;&lt;a href=&quot;#307-08-背包&quot; class=&quot;headerlink&quot; title=&quot;307-08-背包&quot;&gt;&lt;/a&gt;307-08-背包&lt;/h1&gt;&lt;hr&gt;
&lt;h2 id=&quot;P2160-SHOI2007-书柜的尺寸&quot;&gt;&lt;a href=&quot;#P2160-SHOI2007-书柜的尺寸&quot; class=&quot;headerlink&quot; title=&quot;P2160 [SHOI2007]书柜的尺寸&quot;&gt;&lt;/a&gt;P2160 [SHOI2007]书柜的尺寸&lt;/h2&gt;&lt;p&gt;&lt;h3&gt;题目描述&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;Tom不喜欢那种一字长龙式的大书架，他只想要一个小书柜来存放他的系列工具书。Tom打算把书柜放在桌子的后面，这样需要查书的时候就可以不用起身离开了。&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;显然，这种书柜不能太大，Tom希望它的体积越小越好。另外，出于他的审美要求，他只想要一个三层的书柜。为了物尽其用，Tom规定每层必须至少放一本书。现在的问题是，Tom怎么分配他的工具书，才能让木匠造出最小的书柜来呢？ &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;Tom很快意识到这是一个数学问题。每本书都有自己的高度hi和厚度ti。我们需要求的是一个分配方案，也就是要求把所有的书分配在S1、S2和S3三个非空集合里面的一个，不重复也不遗漏，那么，很明显，书柜正面表面积（S）的计算公式就是： &lt;/p&gt;&lt;/p&gt;
&lt;script type=&quot;math/tex; mode=display&quot;&gt;
S = \Bigg(\sum_{j = 1}^3 \max_{i \in S_j}h_i\Bigg) \times \Big(\max_{j=1}^3 \sum_{i \in S_j}t_i\Big)&lt;/script&gt;&lt;p&gt;&lt;p&gt;由于书柜的深度是固定的（显然，它应该等于那本最宽的书的长度），所以要求书柜的体积最小就是要求S最小。Tom离答案只有一步之遥了。不过很遗憾，Tom并不擅长于编程，于是他邀请你来帮助他解决这个问题。&lt;/p&gt;&lt;br&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="背包" scheme="http://gyrojeff.moe/tags/%E8%83%8C%E5%8C%85/"/>
    
  </entry>
  
  <entry>
    <title>307-07-逐行递推</title>
    <link href="http://gyrojeff.moe/2020/03/01/307-07-%E9%80%90%E8%A1%8C%E9%80%92%E6%8E%A8/"/>
    <id>http://gyrojeff.moe/2020/03/01/307-07-%E9%80%90%E8%A1%8C%E9%80%92%E6%8E%A8/</id>
    <published>2020-03-01T12:46:25.000Z</published>
    <updated>2020-09-22T12:58:58.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-07-逐行递推"><a href="#307-07-逐行递推" class="headerlink" title="307-07-逐行递推"></a>307-07-逐行递推</h1><hr><p>逐行递推：$dp$在某种情况下按照一行一行的顺序进行递推。</p><h2 id="P2704-NOI2001-炮兵阵地"><a href="#P2704-NOI2001-炮兵阵地" class="headerlink" title="P2704 [NOI2001]炮兵阵地"></a>P2704 [NOI2001]炮兵阵地</h2><p><h3>题目描述</h3></p><p>司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成，地图的每一格可能是山地（用“H” 表示），也可能是平原（用“P”表示），如下图。在每一格平原地形上最多可以布置一支炮兵部队（山地上不能够部署炮兵部队）；一支炮兵部队在地图上的攻击范围如图中黑色区域所示：</p><img src="https://cdn.luogu.org/upload/pic/1881.png" alt=""><p>如果在地图中的灰色所标识的平原上部署一支炮兵部队，则图中的黑色的网格表示它能够攻击到的区域：沿横向左右各两格，沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。 现在，将军们规划如何部署炮兵部队，在防止误伤的前提下（保证任何两支炮兵部队之间不能互相攻击，即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内），在整个地图区域内最多能够摆放多少我军的炮兵部队。</p><a id="more"></a><p><h3>输入输出格式</h3><br><strong>输入格式：</strong></p><p><p>第一行包含两个由空格分割开的正整数，分别表示N和M；</p></p><p><p>接下来的N行，每一行含有连续的M个字符（‘P’或者‘H’），中间没有空格。按顺序表示地图中每一行的数据。N≤100；M≤10。</p><br><strong>输出格式：</strong></p><p><p>仅一行，包含一个整数K，表示最多能摆放的炮兵部队的数量。</p></p><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>5 4PHPPPPHHPPPPPHPPPHHP</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>6</pre></div></div><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>这里可以采用逐行递推的方式：定义</p><script type="math/tex; mode=display">f(i,s,t) = \max_{0 ≤ r < 2^m, ~s \&r =0,~t\&r = 0,~s\&t=0,~(r>>1)\&r=0,~(r>>2) = 0, map[i]\&r=0}\{f(i+1, r,s) + count[r]\}</script><p>其中，$f(i,s,t)$表示在第$i$行，其前一行的炮兵安排表示为$s$，再前一行的炮兵安排表示为$t$的时候的放炮数量（从第$n$行向第$1$行转移，其中$r$表示当前这一行的炮兵按放）。由于每一格上，炮兵只能放或者不放，所以可以表示为一个二进制数。</p><p>下面，解释$\max$的条件：</p><ol><li>$0 ≤ r &lt; 2^m$：穷举所有的当前行的炮兵按放可能性</li><li>$s ~\&amp; ~r = 0$：当这一行与上一行没有一列是重复的情况下（取与的操作可以达到这一目的）</li><li>$t~\&amp;~r = 0$：当这一行与上上行没有一列是重复的情况下</li><li>$s~\&amp;~t = 0$：当上一行与上上行没有一列是重复的情况下</li><li>$(r &gt;&gt; 1)~\&amp;~r = 0$：这一行任意一个炮的相邻位置没炮（位移一位就是相邻）</li><li>$(r &gt;&gt; 2)~\&amp; ~r = 0$：这一行任意一个炮的相邻$2$格位置没炮（位移两位就是相邻$2$格）</li><li>$map[i] ~\&amp;~r = 0$：这一行的炮兵安排要与地形匹配</li></ol><p>$count[r]$：表示$r$这样的安排会有多少门炮（由于是二进制，换言之就是有几个一）。</p><p>由于数组会太大，所以需要<strong>滚动数组</strong>。</p><p>AC代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;vector&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1030</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, m, mp[maxn], cnt[maxn], f[<span class="number">2</span>][maxn][maxn];</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span>&lt;<span class="keyword">int</span>&gt; v;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="keyword">char</span> c;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; m; j ++) &#123;</span><br><span class="line">            <span class="built_in">cin</span> &gt;&gt; c;</span><br><span class="line">            <span class="comment">// 将地形储存为二进制</span></span><br><span class="line">            <span class="keyword">if</span> (c == <span class="string">&#x27;P&#x27;</span>) mp[i] = mp[i] * <span class="number">2</span>;</span><br><span class="line">            <span class="keyword">else</span>       mp[i] = mp[i] * <span class="number">2</span> + <span class="number">1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="comment">// 记录一个二进制数含有几个1</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; (<span class="number">1</span> &lt;&lt; m); i ++)</span><br><span class="line">      <span class="comment">// cnt[i]存的是作为一个二进制数有几个一</span></span><br><span class="line">        cnt[i] = cnt[i &gt;&gt; <span class="number">1</span>] + (i &amp; <span class="number">1</span>);</span><br><span class="line"><span class="comment">// 记录有效的地形</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> r = <span class="number">0</span>; r &lt; (<span class="number">1</span> &lt;&lt; m); r ++) &#123;</span><br><span class="line">      <span class="comment">// 相邻两格不能重复</span></span><br><span class="line">        <span class="keyword">if</span> (((r &gt;&gt; <span class="number">1</span>) &amp; r) == <span class="number">0</span>)</span><br><span class="line">          <span class="comment">// 相邻三个格子只能有一个，所以位移两位再取“与”</span></span><br><span class="line">            <span class="keyword">if</span> (((r &gt;&gt; <span class="number">2</span>) &amp; r) == <span class="number">0</span>) &#123;</span><br><span class="line">              <span class="comment">// 用v记录所有的有效单行布局</span></span><br><span class="line">                v.push_back(r);</span><br><span class="line">            &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = n - <span class="number">1</span>; i &gt;= <span class="number">0</span>; i --) &#123;</span><br><span class="line">      <span class="comment">// 穷举在有效地形内的s</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> x = <span class="number">0</span>; x &lt; v.size(); x ++) &#123;</span><br><span class="line">            <span class="keyword">int</span> s = v[x];</span><br><span class="line">          <span class="comment">// 穷举在有效地形内的t</span></span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> y = <span class="number">0</span>; y &lt; v.size(); y ++) &#123;</span><br><span class="line">                <span class="keyword">int</span> t = v[y];</span><br><span class="line">              <span class="comment">// 当s，t同时可以存在时</span></span><br><span class="line">                <span class="keyword">if</span> ((s &amp; t) == <span class="number">0</span>) &#123;</span><br><span class="line">                  <span class="comment">// 穷举这一行的所有地形</span></span><br><span class="line">                    <span class="keyword">for</span> (<span class="keyword">int</span> z = <span class="number">0</span>; z &lt; v.size(); z ++) &#123;</span><br><span class="line">                        <span class="keyword">int</span> r = v[z];</span><br><span class="line">                      <span class="comment">// 这一行地形不可以与前一行同列</span></span><br><span class="line">                        <span class="keyword">if</span> ((r &amp; s) == <span class="number">0</span>)</span><br><span class="line">                        <span class="comment">// 这一行地形不可以与上上行同列</span></span><br><span class="line">                        <span class="keyword">if</span> ((r &amp; t) == <span class="number">0</span>)</span><br><span class="line">                        <span class="comment">// 这一地形必须与地图匹配(地形)</span></span><br><span class="line">                        <span class="keyword">if</span> ((r &amp; mp[i]) == <span class="number">0</span>)</span><br><span class="line">                        <span class="comment">// 使用滚动数组更新答案(否则MLE会爆)</span></span><br><span class="line">  f[i % <span class="number">2</span>][s][t] = max(f[i % <span class="number">2</span>][s][t], f[(i + <span class="number">1</span>) % <span class="number">2</span>][r][s] + cnt[r]);</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="comment">// 答案为穷举第二，第三行所有地形情况下的放炮总数</span></span><br><span class="line">    <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; v.size(); i ++) &#123;</span><br><span class="line">        <span class="keyword">int</span> s = v[i];</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; v.size(); j ++) &#123;</span><br><span class="line">            <span class="keyword">int</span> t = v[j];</span><br><span class="line">            ans = max(ans, f[<span class="number">0</span>][s][t]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">  <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-07-逐行递推&quot;&gt;&lt;a href=&quot;#307-07-逐行递推&quot; class=&quot;headerlink&quot; title=&quot;307-07-逐行递推&quot;&gt;&lt;/a&gt;307-07-逐行递推&lt;/h1&gt;&lt;hr&gt;
&lt;p&gt;逐行递推：$dp$在某种情况下按照一行一行的顺序进行递推。&lt;/p&gt;
&lt;h2 id=&quot;P2704-NOI2001-炮兵阵地&quot;&gt;&lt;a href=&quot;#P2704-NOI2001-炮兵阵地&quot; class=&quot;headerlink&quot; title=&quot;P2704 [NOI2001]炮兵阵地&quot;&gt;&lt;/a&gt;P2704 [NOI2001]炮兵阵地&lt;/h2&gt;&lt;p&gt;&lt;h3&gt;题目描述&lt;/h3&gt;&lt;/p&gt;
&lt;p&gt;司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成，地图的每一格可能是山地（用“H” 表示），也可能是平原（用“P”表示），如下图。在每一格平原地形上最多可以布置一支炮兵部队（山地上不能够部署炮兵部队）；一支炮兵部队在地图上的攻击范围如图中黑色区域所示：&lt;/p&gt;
&lt;img src=&quot;https://cdn.luogu.org/upload/pic/1881.png&quot; alt=&quot;&quot;&gt;

&lt;p&gt;如果在地图中的灰色所标识的平原上部署一支炮兵部队，则图中的黑色的网格表示它能够攻击到的区域：沿横向左右各两格，沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。 现在，将军们规划如何部署炮兵部队，在防止误伤的前提下（保证任何两支炮兵部队之间不能互相攻击，即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内），在整个地图区域内最多能够摆放多少我军的炮兵部队。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="DFS" scheme="http://gyrojeff.moe/tags/DFS/"/>
    
  </entry>
  
  <entry>
    <title>补完！京吹</title>
    <link href="http://gyrojeff.moe/2020/03/01/%E8%A1%A5%E5%AE%8C-%E4%BA%AC%E5%90%B9/"/>
    <id>http://gyrojeff.moe/2020/03/01/%E8%A1%A5%E5%AE%8C-%E4%BA%AC%E5%90%B9/</id>
    <published>2020-03-01T05:58:15.000Z</published>
    <updated>2020-03-09T12:06:00.000Z</updated>
    
    <content type="html"><![CDATA[<div id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">  <div class="hbe-input-container">  <input type="password" id="hbePass" placeholder="" />    <label for="hbePass">输入密码，查看文章。</label>    <div class="bottom-line"></div>  </div>  <script id="hbeData" type="hbeData" data-hmacdigest="7eff7855aeef52ae6d049d2effcd943dbc0477bdd88e24d24373f68a3919ca86">e2dc18ccf2ed101b80a710aac6190f872ec8acd8f283f84345c274face3ede36932ea96094e8e8ba7641ab555b3c6558694b72f2080ef5f1d247cb78cec2add247c5cd5afd430bba95ff8ec92fe05000b72ffd5414c5cbb2a7c7e3ba6ef49a6d57bf113e4a148b012ecf66aea88eafd43b3519c49334f8e1b2effaa059c622c19bce00757e073b53812736d458f77b50e80c56d132fdad68c71e6e060499ff69de7c96c53706ec62667e04e674de3da6998ffd80b2e7accd320882df3f4875bf63a36add1b16c89d2f684f6cf6bf4827f6e4e9c0e9ad1c10108393fc5f77835f1311d519f51b2d5244b5b96a991dc8faa6f772ead547ce9f7a3857d6e130db836750c7288c58f6e5afc2c069065e9a2125d9d2e8dfde59b99ef888cc6bac3a49a6857f93111a1f891129bbc42151d487e19c469a49593ab0059c2afb333cab6eb9bdcddff2252230ce81847024df72535002a18fd4ad849aaf59e7c5cbf0e973c3656081b5b65b5690503dc3587011a7f1b59c29d0a5653b52350e6c4daf11054b7b2b7c74cc5350f3a70e85eb731093125656197e5b39ff5dfec7ced52c6d70cea24c03ff47b7797bb4e837e4274b4d87d38de1a152e90327566c2e95a3834ca8d1546c6db78e206044e608153de94da8aa21e11e0cafab97666ef7bf7a306e78378544503a19aa4e48611d7fe126b6a2b93e29aec4e1e8b11bef1c89e591184f7f427daa3acbc03b27bd90173f3c0e8e1ea89db6a545ece9a48350352b1adcf1edcdade6162c83c50e381eec05f2e679f84597c047721235f82a3ef02008dd8cfd926497003b518105185ce349ef8dd5775050447885df91b2b8430a7873412c1aa75e5c360f80694df9364f6084e69718d18f7ed8bcdd2a667a560e4c07994f3e208ebe47a48d563984071bfdbf4b97f6cd0831bd351786564a82531a5153207a2518f256fe30ff3bdb29ece12342cd57fcbaab5c479b6d5c8b83c1854ed08ee64a2ba36a95573cf65a7c55cf3afad6df7b8bc9d0a98867149a725b4dce1276980675447e77aeb4633064af2d2317b11b32738427025aebaec212ee960a1a4c6fd5a6e872d6d4186b8f0f41565bfb16eff1f8354711f39c95eee5bfeaf0625398504f1aa77313469a55dfcc87cae15280ff58521217ea6b6743f8f5d82d351dd151fd38b34104730c77a596587915f35bca4f4534a4141b36ce015f761051dcbd7deafd9d483ffc7e9b438331bd6ad6c34069d3c05dab47ecb93bb5dfbccfd056268e682f8f3ad99858840df0e5a875039c88af1853d63ad22ec765365815d1c6d6b8c3663d4c7bbf1fbe725bb02e864cb17d4d8a33e477571cf531b0925e17166002ce1453a8c1d805081ba6851711ae8c951ea8f1aeb8fa3eedbdffe1af2f9efc59b6b36fba33bf4acddf3cb1ac946f720750591436c5ad997b5e8f608f3d887c5f1bacccc9617f64cc2db2b02d3ca955549e8a90d50ded248f660b17e589613f12607cae3a3a7868d07fa74f9c94c0f44e2da49baedff8ec8dc9179023707a52a6a4097c18a722389cf61d55eb89118d90712df1136c4d671541aa8dfc5aa091d1542dcd6de7f62147f06745e62e11937dadf9550245b1f659ed927a4cbf91f35f09c13247c0aa75b9a22957e7e60e801ed873db0df5f74a592a6449a0488638eb916b78c6a330a1d049f7c2528646b666092a7e37f8625d2b30dc163cad7d96459ad3762d97329612d586e665f2b1de1d9867f5fb6c4368624446243738a22df6d796e10bfd2377c694e7f3d8455ed73a14ba0390ede9478c2f751b4f5f87cac6e5c4fbf381f136c5cfdb4ff9e540d8fa301f89ffb7e8c8ca0d89354dfb3fc4a1f5f007431c92fce7f8b0f3d90ac6ec92fbfcf37abb8c32d0b35b9f0e4824d653d6a10bb1efb03a4d0b74efe10f47bb7180450e3b69910106d264ed828ec872f17f318f0f9d66f4bc7128e94aef1d0c988682e204f86eef656578b174b7691af1f2443a5f4bdeef01c980c7f2956e8e5b53664f48befb2bcc6859438bb66608b04b6fd5c75ef2e18e6e1fb10bf732af602ee7302975d6842b79cdd9649879a026e4dcd7906d7f7352891d5aa566d253a231062ccc87fb1906d6d06f25efd961a134bab84c87ecf05667d54c27b76c8770cec3af914625b5879b381262bd483623a5fc83a81715c8a56f551c77217c5b4c2613099cb9a087c4037e12c485f3bbedcc788f739bed5ef85b5a53473f958acbf677f026c866a35e2f69cb1bd45de3249317f0acb8f3c8c6e6632ea492f9d0d326635d4dfd43f2e092db3188cf088c92601aeb4e14caff96865ebda5d1fdbffe90b5ed594e6c1d2ea61d1b715e50d5e52ead618b07eddf2691e79521bbab8649f8e05cae7af61d171c7eda0069460e45c88df03e8f96732c90fe187cf54e0df322719eb5674087b16e1c84abd8ce79947cf72c6740e76c67fb44d547820929ffceda4c4efdac98cb1d72c6c5f54bcce2b422a90b750b0f58e7dd2987f41e0ffe0763bc8838c9aa780468c2a98647a4910022e60697d267b568b84f056aa457991e9427f7ab6ec5b2ba7fcacd8f2b7211ee79ed6f7990ecab80600f1530d73c14c2429753f9940f03948ddc6cdc420f43cfda36270180730ce9a177ba580cde488dd9a6a5d7fb9dc1899b10284a2d61ab00a9621e44bb9ccbe7f6dc51c374bdc1f75e4284d9a1cb486ef69e311467e5d4b04df9ffbce3aa599aa9a978c1d9d61df9e739385990222e56130f87c3c8b0a56e9c6bc538259004e9b0b40e5f59eee0e2d12fa395971da5b98e78b22e5a28eaee481abd87da90a008a08cf979cad308f5c64c6d96019a28bafde7b302e25185fc7b03d4c889db1f30b8d6af466ff5c8af4b91d81c542a702a1f9339e1d4295255793314d94183049b1d8c73f131b2d4097a1fe8297d9919c2ef971392857afb6c04e22738c586c8713b520261357ef96824ae9a2a9a1279244d799649c9a51dfe21bb2c72b64a072396d98b2fbe333e58e6a46922895159aedea3a4629cffda3f19b704bdbd5595c84dce6f6417992f149699d2319965f747f3a42f963826115fbdbf578df5a3521b1e6f858828cbe4b4c669c1fe64e8f2e048bfafdc5ce74c56cb28e5a5459ea7bc0acdf55892d23dacbe28a4bf0b82eb2be6287697b053d412b62bfc20dd2efe5af3fca6762ba69e5e5b63eeaaeb3640e213294fae09d0639879192d60c4cde0e871991d87735c429c0b532a39952a33d351e774dcc0cddbdc0a4010a7b99ff4b1bfaab27b7400c1bf5272829b3864d9bc15c9dfca7edf80532f5f0c8eeb138415e2ecbc76816cc41cab9734a4100f6683dbfee0a7a724d235092d255b5f60ca2572562b893ae58f0f9a78a825918db2e734298e527a8ce056f87e1439a618a6ae1bbbb96ee56b3ae744c1b003e8621ab4eaaef0646302611ef6deda163a76a9bcefe0380bee97d54aa031ac1b93d3bdfb6eae9ec3be02642bd3917737fe5e94ad1509d9b8ad861f1b4922246d4fc4a99371a6ddad867b06e8a360ec5b3e0be8c17ae2e0bbcaa64f3a273dd92034bb61bd8aa38ef8c10b13b193428d2cfdc6cb633eddad8ebb63dccf3534808af99e6afb027a04f64287e5caf7753f0b2dcb77015daa142f25992e6f5d52694b16c4977c9f224f0f17daf0be3819073dcb5af4249f3ba27317c27f44bee0d914ad681b265c8c617b9f9e1a7f2fac84c98886afc2f3f8bb8051173cbca9addeeb5c80d0dec5988785098d6218ad1a95dea4ccbb6d9769fe3e716b38cd2155eb9a4e97cc5cf3d8e65ea57aafb22fd8f1ac8b56f9e92c3ce8867295af69027684629eea455110373d7ac44ef17fb5dcc6dec7073cea77e1f0a0524644af3472209dac5ff2c3c71e89675472ad97520c67860fc902416c256acfc4cce2bf7caff01a5f58db3c4a183895b863d384ce9a3b7aa7305fa942b62b1b791b9353fab111e69fb352cf745ff55a575498affc986658ecc31bea77967d5814f1d0239e623e59f21d5a04fcffa27548164dd5b7b98680b12fba7d9726879e22f74294f35107d6f12fe98a716a11f2cc4f7c43f3cb7c3b0240866f82360cacbcab697a3eac9a3cfe9d3611aa22d19c7d97955de8056edea3308895d1417c8144a2b58ddadbfa1ca64f3aa522e7e24001e3f68f8f96871c48baf2d6eb2c7d6c17a5437364912adbd2b0379d10704251a9a01f944597c7693173e67bed7a6335ebc17585b957f760be96492442c8cbd84bc53807cc8ce1986efcfba355f7815ef98a9a692e9230e4f0f915db3fdbfe10ba96753a32080257b010c7a8740605a6fd280034834da07420cfc4986b9998b3f5659ec5daa3ddc18688a4754491022fb6a43e97312c76a473959977c46d4d6c3038e3847e7ce28e6fae2a6cd6e4862b45740a9ee15a60c3b929ed99670934aa6085ec8d2ecdceb13c4d31d24feba3f3dafff379049a1fa69ea40ee983c98cbd8fffa41c8310a0d308dcf69707fa7a4df3bb5238dce8d58daae27da702ae2ef1cd7d6e57b0124d76950cfae97e627431b84514f6e76acef8ba4c068dd106160b777a95089de54a0d7228b4e188375650819b334b9116012b42f9cda904b188449bdf206c6e5acbdd99466d01afca9407a82bb43b2be3fa6f74abb4534a30303c34b76b95ab10b0f7abc2864c7cf1a2fdf27f7664410fcefa0865d4146cac8f986b25d497b81918ddb4bf613de70a7c1a7ea4782bb52d53883c9796209b0c54995a32b580a0722dad4e4293da761075a93695de60c03c890450c07b9775e835a1ea43524f3afd67bd9c37f1ec064707a26fdef1a9351610ff9915ed571389a62c753f2aac27391d6348425ffa3ca33345d134f8ea5938aa32e4c1d233b728b01811f97d9f7c4355fc855d935e383cd1b2825ee7f66423644edbc5e2dd02a998e921599df3c3bc5f7dae37751280769b79558aba25187b32075f04c4db984ab5a4387d4115c24020b16426364458c9da6d28e521dda20bcaedabbfd734b50f73f1d608463be78329af9d668a728a03169981d60e2ef2054e5eb30d6ece4a8bae2aed8ff3deb167ffa601983cbffeecd340416a2b7c5ec9d8e22fc54a12ed154d668e0013930fb9d9667effd5264d370a21648ffd9b7a0beb1cd3dad3f01a14c78416045b1c83b75c8683b49a2337e14addfdbd4e9dd18fd5de943cf5df0186aeb1b8383806afe9ea0634a678eb9e4f2d6e6c1ed64cb46709db76f87798b5991c38789fa99261cdbf330b456ade3a659ae19c04f5c23ef2667435c4e24b7eeb9f75f567dd291a84f8544fe26a483cf7d16dba65864096096fa85b3e134d998ef68ba8ae639b58cc370334a5ea8e2b84484f68bad6805abafe9c285c91f4e5ac99a48df9447fc4c2b9bda1c47df6efb78a4dc0bf46fc6f4386be7e632f1471d061d762028e658ea104cb37741d72548444a43c46e791a3ae648dd4ac84afb780f41c05fee4e778c250902617864b901cbd6fdb5ef2a52c6392a614aea2bd51d444f85f35d0421e9c324b3f6f711e2720327246acec117a4364cb182563716a7322cdfef6184c73ecbff610efc4bc605053995bd847f8e2d36e3051e4c450fbe39e2b4df82eb1b2ab7905aee60cd9373c17ca13eb6a37f85673d2706226f48983ad7c0d8b66fb00cf3637cc8b8ae6e9975ce63133b70a4fc5433d412f73d466e62fb15c693667e1370bb3f945fe5480ec89d04d271b0ca3108ba078798bfd97b05909359709c83032b1a46fa7a65a590d1c959b05c52343b22b567dffcc89d2ac708c496a363dc7b79109b1035a827d288795fff12c212ebcb537ecc93979583cb2f9f0cc00ff7660d4da3960f9c1560a4224359364522103685ddc542ff13753ad6825af6cc30cfc539835144606adb143ca0122e9928bfe1376d481f8d8ff7ab3476a66ea07d819c0a961afcaf196fa59e8d4f20de72f189a7c88e59c34051b0429d5232773d3a2b74f28846c4bc57a7b9099ec6dd7bc98d962be0bb129532edf2e82f541b29b287e5f10bbff0fa3fe49b58b512be31ff6b094fd55962ecc48ba6fa0af0c9d2dcfe7e3dba756ec29c962392d8ae7de86e05480cda9f7a644348bccb7a38fee656bb93a13cc57f420c62196cfcefea128a448480ec5702e0b3e5618f8a57ad29451268da17941434b3c93c058103cf4d6b3b60041fc0095265f20397a8e0cf34224fa28d517b9bdbedde84e94e9b4b6f591993214f5fa1747de8a50cee6e298f0cef8e0c062af51f371220279d8921f25a3bf58a4dd1504f5df9bf32d5d9e82a4b64d8654c2fa3e3ba6f1aae880ec9fa43d2cd807cab32244465bd59a23b4cc8814d180703754ee40432cc49c5292b1f1ff436085f20938c681b5fd99651572a3a4996caa7e8425fe197c45d1eb355ceef1075d7815e4daf662e4897301d17935e66b4d62f091a2480326c28022f73000cd0c80cc80b9d91a0b76ace36c96b618898e6eeb6b0a65d59990f9640770035ebbd1724b59cbdbb3fd3a07f5d829845b389a27fa3a066d186b487513abc71ec1ad4549f694fce8cab88a1982989216707cdb6cf43082d36e9f12845567d9398caf6e4820a1dfbabc7db3cc66818b677677cf0c2acd7a8f3cef96a72cc886714e4e46dd9a1cdeccce22bd6d36ccd648694cb0abf972d41252dca8dbda254f7353fa6e0b0f0b0bccdc5e06bce1d6886db05bac232d10137e3087042fbfb0926988eed32a4bd184d35ccea45c8633756ae5a3574ec62c58ac53c10fdc2e7cdabf997769c570360e10fe1bbb15b1500361f4438ed54a20c4876775c195ebba40c35ceb54db0be9f8d4378ea786fcc08390be2ae5191fd7970c1833e2b06685db1a20ced09bc95a3ad4ea500f037271fa3bcfd8bcba62f849b466a009a6da104804db3d59151dbf5e70821ced2eb30eb8de3060b7aae645c04f8942ae47a52cfb1e4cf02f471030146bfb3cef72bb74a55b286b3c529375af1198f58f594ea6b410ecc24fba04fbb31407ec82671d56b9aeb544096bdfaad3b94e5ef2fd1b7f6440d389492f72efedd918b6964d8de523ae95f6b2530d30d8cdcacaaf02a67e948ff447f801b50afba1234232ffc63c60436b8fba245e0a588bd8b7e97afba5b42f2fac5079d9451ae496aed50eff9b6ef0bbb452ad5e45c9dbebc14a4bb2e8f409007c6f4417a6ca4a6bcd8f3fc14e7a3017e8b644646bf0a16efd668047f7b834312085fa0763f89732b232f195d3e355e0c98ecc7a4f113daa90d8fa0c5112ed79ef9950269854b56f5c587084a81508ea5447c87049a081ede94e</script></div><script src="/lib/blog-encrypt.js"></script><link href="/css/blog-encrypt.css" rel="stylesheet" type="text/css">]]></content>
    
    
    <summary type="html">这是一篇加密文章，内容可能是个人情感宣泄或者收费技术。如果你确实想看，请与我联系。</summary>
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="京吹" scheme="http://gyrojeff.moe/tags/%E4%BA%AC%E5%90%B9/"/>
    
  </entry>
  
  <entry>
    <title>纸片人(们)</title>
    <link href="http://gyrojeff.moe/2020/02/29/%E7%BA%B8%E7%89%87%E4%BA%BA-%E4%BB%AC/"/>
    <id>http://gyrojeff.moe/2020/02/29/%E7%BA%B8%E7%89%87%E4%BA%BA-%E4%BB%AC/</id>
    <published>2020-02-29T13:00:19.000Z</published>
    <updated>2020-11-15T05:44:03.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h1><p>在这里，我很感谢「她」，将我带进这个美妙的世界。</p><p>也感谢哔哩哔哩矿业公司、众贴吧，让我享受精神、视觉和听觉上的盛宴。</p><a id="more"></a><h1 id="番-amp-电影"><a href="#番-amp-电影" class="headerlink" title="番 &amp; 电影"></a>番 &amp; 电影</h1><ul><li>鬼灯的冷彻<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3440">鬼灯的冷彻</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6447">鬼灯的冷彻 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md79292">鬼灯的冷彻 第二季 其二</a></li></ul></li><li>滑头鬼之孙<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md899">滑头鬼之孙</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md900">滑头鬼之孙 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3798">滑头鬼之孙 ～奴良组事始～</a></li></ul></li><li>苍蓝钢铁的琶音 (18年刚入坑的时候看的，最近回小破站重温，下架了(哭))<ul><li>✓ 苍蓝钢铁的琶音</li><li>✓ 苍蓝钢铁战列舰 -ARS NOVA- DC</li><li>✓ 苍蓝钢铁战列舰 -ARS NOVA- Cadenza</li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2546">言叶之庭</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2688">秒速五厘米</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md12044">你的名字。</a>(入宅作)</li><li>人类衰退之后<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md703">人类衰退之后</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3836">人类衰退之后 SP</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6312">徒然喜欢你</a></li><li>告白实行委员会 (这部的OP/ED超好听)<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5575">从很久以前就喜欢你了。～告白实行委员会～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4355">告白实行委员会 告白预演</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4356">告白实行委员会 嫉忌的答复</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4140">告白实行委员会 我于此刻恋上你</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5576">喜欢上你的那个瞬间。～告白实行委员会～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6470">无论何时我们的恋情都是10厘米。～告白实行委员会～</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3462">双星之阴阳师</a></li><li>月色真美 (最甜的狗粮，没有之一)<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5989">月色真美</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md10732">月色真美 SP</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md969">会长是女仆大人！</a></li><li>刀剑神域<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md24755609">刀剑神域</a></li><li>✓ 刀剑神域II</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md27127860">刀剑神域 Extra Edition</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md15132">刀剑神域：序列之争</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md130412">刀剑神域 Alicization</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222723">刀剑神域 爱丽丝篇 异界战争</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228119/">刀剑神域 爱丽丝篇 异界战争 -终章-</a></li></ul></li><li>邻座的怪同学<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md688">邻座的怪同学</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2857">邻座的怪同学 OAD</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6339">欢迎来到实力至上主义的教室</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1270">濑户的花嫁</a></li><li>魔法禁书目录<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md963">魔法禁书目录 第一季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md964">魔法禁书目录 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md965">魔法禁书目录 剧场版</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3784">魔法禁书目录 炭</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md5867">剧场版 魔法禁书目录炭 SP</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md134912">魔法禁书目录 第三季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md425">某科学的超电磁炮</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md427">某科学的超电磁炮S</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28224095">某科学的超电磁炮T</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28221399">某科学的一方通行</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md78512">宅男腐女恋爱真难</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md126792">肆式青春</a></li><li>我的妹妹不可能那么可爱<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2660">我的妹妹不可能那么可爱 第一季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2661">我的妹妹不可能那么可爱 第二季</a></li></ul></li><li>路人女主的养成方法<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1512">路人女主的养成方法</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228738/">路人女主的养成方法 ♭</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229860/">路人女主的养成方法 Fine</a></li></ul></li><li>魔法科高校的劣等生<ul><li>✓ 魔法科高校的劣等生</li><li>✓ 魔法科高校的劣等生 呼唤星辰的少女</li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6427">Just Because!</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md257">稻荷恋之歌</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md687">樱花庄的宠物女孩</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md53">月刊少女野崎君</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md102392">工作细胞</a></li><li>青春猪头少年<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md134932">青春猪头少年不会梦到兔女郎学姐</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223480">青春猪头少年不会梦到怀梦美少女</a></li></ul></li><li>小林家的龙女仆 (逝者安息，一路走好。)<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5800">小林家的龙女仆</a></li><li>✓ 小林家的龙女仆 第十四集(OVA)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6475">小林家的龙女仆 OVA</a></li></ul></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md79372">ReLIFE 完结篇</a></li><li>我的青春恋爱物语果然有问题。<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1539">我的青春恋爱物语果然有问题。</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3437">我的青春恋爱物语果然有问题。 第一季 OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1540">我的青春恋爱物语果然有问题。 续</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5622">我的青春恋爱物语果然有问题 续 OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228386">我的青春恋爱物语果然有问题。完</a></li></ul></li><li>夏目友人帐<ul><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1660">夏目友人帐</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1661">续 夏目友人帐</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1662">夏目友人帐 参</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1663">夏目友人帐 肆</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md5550">夏目友人帐 伍</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md8512">夏目友人帐 第五季 特别篇</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md5977">夏目友人帐 陆</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3446">夏目友人帐 OVA</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28221382">夏目友人帐 剧场版</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5997">埃罗芒阿老师</a></li><li>Love Live! School Idol Project<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3068">Love Live! School Idol Project</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3071">Love Live! School Idol Project（第二季）</a></li></ul></li><li>魔卡少女樱<ul><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3756">魔卡少女樱</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md2270">魔卡少女樱 香港之旅</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3858">魔卡少女樱 知世的影像活跃日记</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3860">魔卡少女樱 被封印的卡片</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md80072">魔卡少女樱 Clear Card篇 序幕 小樱与两人的小熊</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md8752">魔卡少女樱 CLEAR CARD篇</a></li></ul></li><li>紫罗兰永恒花园 <ul><li>▢ <a href="https://www.bilibili.com/bangumi/media/md8892">紫罗兰永恒花园</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28226644">紫罗兰永恒花园外传：永远与自动手记人偶</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md8672">来自风平浪静的明天</a> (强烈安利！！！PA赛高！请自备胃药)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2582">Classroom☆Crisis</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2932">打工吧！魔王大人</a></li><li>在地下城寻求邂逅是否搞错了什么<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28230184">在地下城寻求邂逅是否搞错了什么</a></li><li>✓ 在地下城寻求邂逅是否搞错了什么 OVA</li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28228037">剑姬神圣谭 在地下城寻求邂逅是否搞错了什么 外传</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28221395">在地下城寻求邂逅是否搞错了什么 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/play/ep311989">在地下城寻求邂逅是否搞错了什么 第二季 OVA</a></li><li>✓ 在地下城寻求邂逅是否搞错了什么 俄里翁之箭</li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28229869">在地下城寻求邂逅是否搞错了什么 第三季</a></li></ul></li><li>NO GAME NO LIFE 游戏人生<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md184">NO GAME NO LIFE 游戏人生</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222224">游戏人生 零</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md8932">龙王的工作！</a> (银了！)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6423">品酒要在成为夫妻后</a></li><li>▢ 家有女友</li><li>辉夜大小姐想让我告白<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5267730">辉夜大小姐想让我告白~天才们的恋爱头脑战~</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228367/">辉夜大小姐想让我告白？～天才们的恋爱头脑战～</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md139252">关于我转生变成史莱姆这档事</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md4316482">盾之勇者成名录</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5267750">约定的梦幻岛</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md139292">弦音 -风舞高中弓道部-</a></li><li>干物妹！小埋<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2580">干物妹！小埋</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6446">干物妹！小埋R</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3421">干物妹！小埋 OVA</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4316382">五等分的花嫁</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md11912">爱吃拉面的小泉同学</a></li><li>✓ 爆肝工程师的异世界狂想曲</li><li>玉子市场<blockquote><p>「不知为何，本番引起了我对青春的惆怅，却又给了我梦想的希望」</p><ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md116772">玉子市场</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4155">玉子爱情故事</a></li></ul></blockquote></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md78352">超能力女儿</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5043">这个美术社大有问题！</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md713">恋爱随意链接</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2667">我女友与青梅竹马的惨烈修罗场</a></li><li>⊟ 我的英雄学院</li><li>齐木楠雄的灾难<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5070">齐木楠雄的灾难（日播&amp;精选版）</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5069">齐木楠雄的灾难</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md8812">齐木楠雄的灾难 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5195852">齐木楠雄的灾难 完结篇</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223748">齐木楠雄的灾难 始动篇</a></li></ul></li><li>⊟ Fate<br>待整理</li><li>四月是你的谎言<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1699">四月是你的谎言</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3423">四月是你的谎言 OAD</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md23447332">四月是你的谎言 真人版</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md78112">敦君与女朋友</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5268038">环战公主 CIRCLET PRINCESS</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md21984454">水果篮子 (2019)</a></li><li>我们无法一起学习<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md21986963">我们无法一起学习</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222688">我们无法一起学习！</a></li></ul></li><li>文豪野犬<ul><li>✓ 文豪野犬 第一季</li><li>✓ 文豪野犬 第二季</li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md21988886">文豪野犬 第三季</a></li></ul></li><li>食戟之灵<br>原作已看完，tosh老师的画风超级喜欢，但是后期剧情崩盘，无法力挽狂澜，结局也非常仓促，但是个人比较喜欢，中考前补的。<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1559">食戟之灵</a></li><li>✓ <a href="http://v.pptv.com/show/AibH8eibNJufda2CQ.html">食戟之灵 OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5017">食戟之灵 贰之皿</a></li><li>✓ <a href="https://www.iqiyi.com/v_19rrdzhl4s.html">食戟之灵 第三季</a></li><li>▢ <a href="http://www.iqiyi.com/v_19rtwddn08.html">食戟之灵 第四季</a></li><li>✓ <a href="https://manga.bilibili.com/detail/mc25467">食戟之灵 漫画</a></li></ul></li><li>百鬼幼儿园 (前痒痒鼠玩家的福利)<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md103832">百鬼幼儿园</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5622911">百鬼幼儿园 第二季</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md22505673">没出息的阴阳师一家</a></li><li>我们大家的河合庄<br>中考语文前一天晚上看的，强烈安利<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md113">我们大家的河合庄</a></li><li>✓ <a href="https://www.bilibili.com/video/av2651943">我们大家的河合庄 TV未放送 13话/OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3505">我们大家的河合庄 SP</a></li></ul></li><li>Re：从零开始的异世界生活<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3461">Re：从零开始的异世界生活</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md4026">Re：从零开始休息时间</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28224394">Re：从零开始的异世界生活 新编集版</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28226008">Re：从零开始的异世界生活 Memory Snow(雪之回忆)</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28226009">Re：从零开始的异世界生活 冰结之绊</a></li></ul></li><li>我是江小白<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6064">我是江小白</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md103852">我是江小白 第二季</a></li></ul></li><li>珈百璃的堕落<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5793">珈百璃的堕落</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6042">珈百璃的堕落 SP</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3398">冰菓</a> (我永远喜欢千反田！！)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28221415">女高中生的虚度日常</a></li><li>轻音少女<br>我的青春结束了，感谢芳文社，感谢京阿尼。<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28220978">轻音少女 第一季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28220984">轻音少女 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28220988">轻音少女 剧场版</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28221387">Ｄｒ．ＳＴＯＮＥ 石纪元</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28227648">烟花</a> 回程飞机上看的，ummm但是不能称作入宅作吧。</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md12116">声之形</a></li><li>吹响吧！上低音号<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1547">吹响吧！上低音号</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223434">吹响吧！上低音号 第二季</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223435">吹响吧！上低音号～欢迎来到北宇治高中吹奏乐部～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223447">吹响吧！上低音号～想要传达的旋律～</a></li><li>✓ 利兹与青鸟 (山田尚子是神！)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223448">吹响吧！上低音号～誓言的终章～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3470">吹响吧！上低音号 第一季 SP 吹奏部的日常</a></li><li>✓ <a href="https://www.bilibili.com/video/av78403377">吹响吧！上低音号 第二季 SP (TV未放送)</a></li></ul></li><li>在盛夏等待<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md814">在盛夏等待</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3837">在盛夏等待 特别篇</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223860">理科生坠入情网，故尝试证明。</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md22718131/">鬼灭之刃</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md6422/">黑色四叶草</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28224137/">因为太怕痛就全点防御力了</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28224080">异度侵入 ID:INVADED</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28224145/">虚构推理</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28223859/">22/7</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28224128/">恋爱小行星</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md844/">日常</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28224129">神推偶像登上武道馆我就死而无憾</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28224120/">地缚少年花子君</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3450/">在下坂本，有何贵干？</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222736">这个勇者明明超强却过分慎重</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28221335/">炎炎消防队</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222622">我，不是说了能力要平均值么！</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28222625/">放学后桌游俱乐部</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md3116/">房东青春期！</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1600/">灼眼的夏娜</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md2680/">男子高中生的日常</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md139632/">邻家索菲</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md6340">GAMERS电玩咖！</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md11672/">妖精森林的小不点</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md102312">碧蓝之海</a></li><li>中二病也要谈恋爱！<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4340">中二病也要谈恋爱！</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4349">中二病也要谈恋爱！恋</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4300">DEPTH OF FIELD ～ 爱与憎恨的剧场</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md10192">中二病也要谈恋爱！Lite</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md10212">中二病也要谈恋爱！恋 SP</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4351">中二病也要谈恋爱！恋 Lite</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md115632">剧场版 中二病也要谈恋爱！ -Take On Me-</a></li></ul></li><li>✓ 青春之旅<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md59">青春之旅</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3782">青春之旅 OAD</a></li></ul></li><li>Hello World<ul><li>✓ Hello World</li><li>✓ Another World</li></ul></li><li>✓ 樱Trick</li><li>未确认进行式<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228719/">未确认进行式</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3507">未确认进行式 OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3797">未确认进行式 OAD</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228734">天气之子</a></li><li>✓ 月影特工</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228902/">白箱 Shirobako</a> (P.A.Works 工作中的少女系列中的作品)</li><li>P.A.青春三部曲<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2910">真实之泪</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md752/">TARI TARI</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3492">TARI TARI OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md845/">花开伊吕波</a> (P.A.Works 工作中的少女系列中的作品)</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md131532">花开伊吕波 Home Sweet Home</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5992/">樱花任务</a> (P.A.Works 工作中的少女系列中的作品)</li><li>✓ 缘之空<ul><li>✓ 缘之空</li><li>✓ 缘之空SP</li></ul></li><li>龙与虎<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1672/">龙与虎</a></li><li>✓ <a href="https://www.bilibili.com/video/BV1Zx411F7S2?p=27">龙与虎 OVA</a></li></ul></li><li>✓ 空の青さを知る人よ</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228168">八男？别闹了！</a></li><li>伪恋<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28227496/">伪恋</a></li><li><a href="https://www.bilibili.com/bangumi/media/md1575">伪恋 OAD</a><ul><li>✓ OAD01 av38742622</li><li>✓ OAD02 av38879368</li><li>✓ OAD03 av38881463</li><li>✓ OAD04 av38748087</li></ul></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md1574">伪恋：</a></li></ul></li><li>▢ 异世界风俗娘评鉴指南</li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228443/">转生成为了只有乙女游戏破灭Flag的邪恶大小姐</a><ul><li>剧情高潮特别直前sp【破灭flag对策会议】av243334224，bv1bv411z7CT</li><li>四月sp小剧场【与卡塔莉娜一起学习】av285611729，bv1Ff4y1U7An</li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1338/">MYSELF;YOURSELF</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md25826974/">滿腦都是○○的我沒辦法談戀愛</a></li><li>✓ 春原庄的管理员</li><li>✓ 想哭的我戴上了猫的面具</li><li>甘城光辉游乐园<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md281/">甘城光辉游乐园</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3455">甘城光辉游乐园 SP 激动人心小剧场</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228368/">听我的电波吧</a></li><li>天使降临到我身边<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4316442/">天使降临到我身边</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md4316442/">天使降临到我身边 OVA (第13话)</a></li></ul></li><li>请问您今天要来点兔子吗？<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md191/">请问您今天要来点兔子吗？</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2762">请问您今天要来点兔子吗？？</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md122632">请问您今天要来点兔子吗？？～Dear My Sister～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28225115">请问您今天要来点兔子吗？？～Sing for You～</a></li></ul></li><li>NEW GAME<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5027/">NEW GAME!</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6158">NEW GAME! OVA</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md6330">NEW GAME!!</a></li></ul></li><li>摇曳露营△<ul><li>✓ 摇曳露营△</li><li>✓ 摇曳露营△ SP</li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28228414/">放学后海堤日记</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229234/">没落要塞 / DECA-DENCE</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229231">宇崎学妹想要玩！</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5532">少女编号</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229299/">魔王學院的不適任者～史上最強的魔王始祖，轉生就讀子孫們的學校～</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229298">租借女友</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229238/">宝石幻想 光芒重现</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3498/">Anne Happy</a></li><li>凉宫春日的忧郁<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md24120616/">凉宫春日的忧郁 2009</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md1056">凉宫春日的忧郁 2006</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md2809">凉宫春日的消失</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md4735">小凉宫春日的忧郁</a></li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28229901">龙与魔女/BURN THE WITCH</a></li><li>One Room<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5798/">One Room</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md103032">One Room 第二季</a></li><li>▢ <a href="https://www.bilibili.com/bangumi/media/md28230234">One Room 第三季</a></li></ul></li><li>为美好的世界献上祝福！<ul><li>✓ 为美好的世界献上祝福！</li><li>✓ 为美好的世界献上祝福！OVA</li><li>▢ 为美好的世界献上祝福！第二季</li><li>▢ 为美好的世界献上祝福！第二季 OVA</li><li>▢ 为美好的世界献上祝福！红传说</li></ul></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md5776">URARA迷路帖</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md28222745">超人高中生们即便在异世界也能从容生存！</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md451">恋爱研究所</a></li><li>Angel Beats!<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md959">Angel Beats!</a></li><li>✓ <a href="https://b23.tv/F9wd06">Angel Beats! 13.5 Anther Epilogue</a></li><li>✓ <a href="https://b23.tv/YoMIXO">Angel Beats! OVA</a></li></ul></li><li>Charlotte<ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md2572">Charlotte</a></li><li>✓ <a href="https://www.bilibili.com/bangumi/media/md3429">Charlotte SP</a></li></ul></li></ul><h1 id="日剧"><a href="#日剧" class="headerlink" title="日剧"></a>日剧</h1><ul><li>✓ <a href="https://www.bilibili.com/bangumi/media/md85652/">非自然死亡</a></li></ul><h1 id="音乐"><a href="#音乐" class="headerlink" title="音乐"></a>音乐</h1><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=450 src="//music.163.com/outchain/player?type=0&id=4937556099&auto=0&height=430"></iframe><h1 id="Galgame"><a href="#Galgame" class="headerlink" title="Galgame"></a>Galgame</h1><ul><li>缘之空</li><li>悠之空</li><li>近月少女的礼仪</li><li>与她＊心渐近</li><li>千恋＊万花</li></ul><h1 id="画师"><a href="#画师" class="headerlink" title="画师"></a>画师</h1><ul><li><a href="https://www.pixiv.net/users/490219">Hiten</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;写在前面&quot;&gt;&lt;a href=&quot;#写在前面&quot; class=&quot;headerlink&quot; title=&quot;写在前面&quot;&gt;&lt;/a&gt;写在前面&lt;/h1&gt;&lt;p&gt;在这里，我很感谢「她」，将我带进这个美妙的世界。&lt;/p&gt;
&lt;p&gt;也感谢哔哩哔哩矿业公司、众贴吧，让我享受精神、视觉和听觉上的盛宴。&lt;/p&gt;</summary>
    
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/categories/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    
    <category term="二次元" scheme="http://gyrojeff.moe/tags/%E4%BA%8C%E6%AC%A1%E5%85%83/"/>
    
    <category term="推荐" scheme="http://gyrojeff.moe/tags/%E6%8E%A8%E8%8D%90/"/>
    
  </entry>
  
  <entry>
    <title>307-06-期望</title>
    <link href="http://gyrojeff.moe/2020/02/29/307-06-%E6%9C%9F%E6%9C%9B/"/>
    <id>http://gyrojeff.moe/2020/02/29/307-06-%E6%9C%9F%E6%9C%9B/</id>
    <published>2020-02-28T16:00:33.000Z</published>
    <updated>2020-09-22T12:58:54.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-06-期望-dp"><a href="#307-06-期望-dp" class="headerlink" title="307-06-期望$dp$"></a>307-06-期望$dp$</h1><h2 id="概述"><a href="#概述" class="headerlink" title="概述"></a>概述</h2><p>做一件事情成功：$p$，失败：$\overline{p} = 1-p$。</p><p>和性：$E[x+y] = E[x] + E[y]$</p><p>期望的意义就是对于做一件事情，期望多少次这件事情可以做成功。</p><h2 id="P1291-SHOI2002-百事世界杯之旅"><a href="#P1291-SHOI2002-百事世界杯之旅" class="headerlink" title="P1291 [SHOI2002]百事世界杯之旅"></a>P1291 [SHOI2002]百事世界杯之旅</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字，就可参加百事世界杯之旅的抽奖活动，获得球星背包，随声听，更克赴日韩观看世界杯。还不赶快行动！”</p><p>你关上电视，心想：假设有n个不同的球星名字，每个名字出现的概率相同，平均需要买几瓶饮料才能凑齐所有的名字呢？</p><a id="more"></a><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>首先定义转移状态$f[i]$为收集到$i$个不同的球星的期望要买多少个。则$f[i]$这个状态可以从两个状态转移过来，一种是对于$f[i - 1]$这种状态买了不同的一个球星，另外一种就是$f[i]$，但是买的和原来的一样。</p><p>所以我们可以粗略的得到以下的转移方程：</p><script type="math/tex; mode=display">f[i] = f[i - 1] \frac {n - (i - 1)}{n} + f[i] \frac {i}{n}</script><p>但是我们会非常遗憾地发现，上面这个式子当中的概率总和$P_S = \frac {n - (i -1)} {n} + \frac {i}{n} = \frac {n - 1}{n}$，并不为$1$。</p><p>所以我们要重新考虑这样做的意义何在：</p><ul><li>从上面一个转移过来的情况肯定不存在问题，关键是第二个转移情况，转移失败怎么办</li><li>第二种情况之所以会不等于$1$，$P_S = 1 + \frac {1}{n}$，要思考的是这$\frac {1}{n}$从何而来。</li><li>由于对于这这道题而言，当购买结束后，就不需要购买，那么我们可以略微修改一下转移方程的意义：“买了一个，买的是自己又的的概率” ==》 “买一个，买的是自己有的且不是自己的概率”</li><li>那么这样的转换就可以消去多余的$\frac{1}{n}$</li></ul><p>从而，我们可以得到正确的转移方程：</p><script type="math/tex; mode=display">f[i] = f[i - 1] \frac {n - (i - 1)} {n} + f[i] \frac {i - 1} {n}</script><p>最后进行以下化简，然后简单地$dp$就可以了。最后，这道题需要考虑分数线等神奇的情况，此为题目细节，这里不过多赘述。下面为$AC$代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">36</span>;</span><br><span class="line"><span class="keyword">int</span> n, f_son[maxn], f_mum[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">count_digit</span><span class="params">(<span class="keyword">int</span> n)</span> </span>&#123;</span><br><span class="line"><span class="keyword">int</span> digit = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span> (n &gt; <span class="number">0</span>) &#123;</span><br><span class="line">n /= <span class="number">10</span>; digit ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> digit;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">gcd</span><span class="params">(<span class="keyword">int</span> a, <span class="keyword">int</span> b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">return</span> b == <span class="number">0</span> ? a : gcd(b, a % b);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">f_son[<span class="number">1</span>] = <span class="number">1</span>; f_mum[<span class="number">1</span>] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = <span class="number">2</span>; k &lt;= n; k ++) &#123;</span><br><span class="line"><span class="keyword">int</span> mum = f_mum[k - <span class="number">1</span>] * (n - k + <span class="number">1</span>);</span><br><span class="line"><span class="keyword">int</span> son = f_son[k - <span class="number">1</span>] * (n - k + <span class="number">1</span>) + n * f_mum[k - <span class="number">1</span>];</span><br><span class="line"><span class="keyword">int</span> t = gcd(son, mum);</span><br><span class="line">mum /= t; son /= t;</span><br><span class="line">f_son[k] = son; f_mum[k] = mum;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">int</span> int_part = f_son[n] / f_mum[n];</span><br><span class="line"><span class="keyword">int</span> new_son = f_son[n] - f_mum[n] * int_part;</span><br><span class="line"><span class="keyword">int</span> t = gcd(new_son, f_mum[n]);</span><br><span class="line">new_son /= t; f_mum[n] /= t;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= count_digit(int_part); i ++)</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; new_son &lt;&lt; <span class="built_in">endl</span> &lt;&lt; int_part;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= count_digit(f_mum[n]); i ++)</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">&quot;-&quot;</span>;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= count_digit(int_part); i ++)</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; <span class="string">&quot; &quot;</span>;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; f_mum[n] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P4284-SHOI2014-概率充电器"><a href="#P4284-SHOI2014-概率充电器" class="headerlink" title="P4284 [SHOI2014]概率充电器"></a>P4284 [SHOI2014]概率充电器</h2><h3 id="题目描述-1"><a href="#题目描述-1" class="headerlink" title="题目描述"></a>题目描述</h3><p>著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品—— 概率充电器：</p><p>“采用全新纳米级加工技术，实现元件与导线能否通电完全由真随机数决 定！SHOI 概率充电器，您生活不可或缺的必需品！能充上电吗？现在就试试看 吧！”</p><p>SHOI 概率充电器由n-1 条导线连通了n 个充电元件。进行充电时，每条导 线是否可以导电以概率决定，每一个充电元件自身是否直接进行充电也由概率 决定。随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行 间接充电。</p><p>作为SHOI 公司的忠实客户，你无法抑制自己购买SHOI 产品的冲动。在排 了一个星期的长队之后终于入手了最新型号的SHOI 概率充电器。你迫不及待 地将SHOI 概率充电器插入电源——这时你突然想知道，进入充电状态的元件 个数的期望是多少呢？</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>第一行一个整数：n。概率充电器的充电元件个数。充电元件由1-n 编号。</p><p>之后的n-1 行每行三个整数a, b, p，描述了一根导线连接了编号为a 和b 的 充电元件，通电概率为p%。</p><p>第n+2 行n 个整数：qi。表示i 号元件直接充电的概率为qi%。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出一行一个实数，为能进入充电状态的元件个数的期望，四舍五入到小 数点后6 位小数。</p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>首先我们看到这里每一个的贡献都是1，所以我们要求的<strong>期望就是概率</strong></p><p>所以可以得出题目的所求：</p><script type="math/tex; mode=display">\sum_{i=1}^n P_i</script><p>其中，$P_i$为第$i$个充电原件的点亮概率。</p><p>那么我们只需要列出方程，然后两边$dfs$就可以非常顺利地A掉这道题。</p><p>以下为递推方程，其中$f(i)$为第$i$个充电器点亮的概率，$\overline {f(i)} = 1 - f(i)$：</p><script type="math/tex; mode=display">\overline{f(u)} = \overline{q_u} \prod_{v\in u.G,~v≠u.\pi} \Big\{\overline{f(v)} + f(v)\times \overline{p_{(u,v)}}\Big\}</script><p>接下来，是第二遍自上而下的$dfs$的转移方程：</p><script type="math/tex; mode=display">t = \frac {\overline {f(u)}}{\overline{f(v)} + f(v) \times p_{(u,v)}},~f(v) = f(v) \times (\overline{t} + t\times\overline{p_{(u,v)}})</script><p>这两个方程的含义不言而喻。</p><p>所以直接给出AC代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line"><span class="keyword">int</span> to, next;</span><br><span class="line"><span class="keyword">double</span> w;</span><br><span class="line">&#125; g[maxn];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>, head[maxn];</span><br><span class="line"></span><br><span class="line"><span class="keyword">double</span> f__[maxn];</span><br><span class="line"><span class="keyword">double</span> q[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">double</span> w)</span> </span>&#123;</span><br><span class="line">g[ecnt] = (node) &#123;v, head[u], w&#125;;</span><br><span class="line">head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs_1</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> p)</span> </span>&#123;</span><br><span class="line">f__[u] = <span class="number">1.0</span> - q[u];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line">    <span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == p) <span class="keyword">continue</span>;</span><br><span class="line">dfs_1(v, u);</span><br><span class="line">f__[u] *= f__[v] + (<span class="number">1</span> - f__[v]) * (<span class="number">1</span> - g[e].w);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs_2</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> p)</span> </span>&#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line"><span class="keyword">int</span> v = g[e].to;</span><br><span class="line"><span class="keyword">if</span> (v == p) <span class="keyword">continue</span>;</span><br><span class="line"><span class="keyword">double</span> t = f__[u] / (f__[v] + (<span class="number">1</span> - f__[v]) * (<span class="number">1</span> - g[e].w));</span><br><span class="line">f__[v] *= (t + (<span class="number">1</span> - t) * (<span class="number">1</span> - g[e].w));</span><br><span class="line">dfs_2(v, u);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line"><span class="keyword">int</span> u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">add_edge(u, v, ((<span class="keyword">double</span>) w) * <span class="number">0.01</span>);</span><br><span class="line">add_edge(v, u, ((<span class="keyword">double</span>) w) * <span class="number">0.01</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; q[i], q[i] *= <span class="number">0.01</span>;</span><br><span class="line">dfs_1(<span class="number">1</span>, <span class="number">0</span>); dfs_2(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line"><span class="keyword">double</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">ans += <span class="number">1</span> - f__[i];</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%.6lf\n&quot;</span>, ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-06-期望-dp&quot;&gt;&lt;a href=&quot;#307-06-期望-dp&quot; class=&quot;headerlink&quot; title=&quot;307-06-期望$dp$&quot;&gt;&lt;/a&gt;307-06-期望$dp$&lt;/h1&gt;&lt;h2 id=&quot;概述&quot;&gt;&lt;a href=&quot;#概述&quot; class=&quot;headerlink&quot; title=&quot;概述&quot;&gt;&lt;/a&gt;概述&lt;/h2&gt;&lt;p&gt;做一件事情成功：$p$，失败：$\overline{p} = 1-p$。&lt;/p&gt;
&lt;p&gt;和性：$E[x+y] = E[x] + E[y]$&lt;/p&gt;
&lt;p&gt;期望的意义就是对于做一件事情，期望多少次这件事情可以做成功。&lt;/p&gt;
&lt;h2 id=&quot;P1291-SHOI2002-百事世界杯之旅&quot;&gt;&lt;a href=&quot;#P1291-SHOI2002-百事世界杯之旅&quot; class=&quot;headerlink&quot; title=&quot;P1291 [SHOI2002]百事世界杯之旅&quot;&gt;&lt;/a&gt;P1291 [SHOI2002]百事世界杯之旅&lt;/h2&gt;&lt;h3 id=&quot;题目描述&quot;&gt;&lt;a href=&quot;#题目描述&quot; class=&quot;headerlink&quot; title=&quot;题目描述&quot;&gt;&lt;/a&gt;题目描述&lt;/h3&gt;&lt;p&gt;“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字，就可参加百事世界杯之旅的抽奖活动，获得球星背包，随声听，更克赴日韩观看世界杯。还不赶快行动！”&lt;/p&gt;
&lt;p&gt;你关上电视，心想：假设有n个不同的球星名字，每个名字出现的概率相同，平均需要买几瓶饮料才能凑齐所有的名字呢？&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="Math" scheme="http://gyrojeff.moe/tags/Math/"/>
    
  </entry>
  
  <entry>
    <title>307-05-直径</title>
    <link href="http://gyrojeff.moe/2020/02/28/307-05-%E7%9B%B4%E5%BE%84/"/>
    <id>http://gyrojeff.moe/2020/02/28/307-05-%E7%9B%B4%E5%BE%84/</id>
    <published>2020-02-28T15:57:30.000Z</published>
    <updated>2020-09-22T12:58:51.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-05-直径"><a href="#307-05-直径" class="headerlink" title="307-05-直径"></a>307-05-直径</h1><h2 id="直径的性质"><a href="#直径的性质" class="headerlink" title="直径的性质"></a>直径的性质</h2><ol><li>任意两条直径必定相交</li><li>所有直径必交于一点</li></ol><h2 id="找直径"><a href="#找直径" class="headerlink" title="找直径"></a>找直径</h2><p>任意一个点出发，找出最远点，从最远点，在找到最远点，连起来就是直径（两次$dfs$）。证明从略（反证法）。</p><h2 id="P1099-树网的核"><a href="#P1099-树网的核" class="headerlink" title="P1099 树网的核"></a>P1099 树网的核</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>设$T=(V,E,W)$是一个无圈且连通的无向图（也称为无根树），每条边到有正整数的权，我们称$T$为树网（<code>treebetwork</code>），其中$V$，$E$分别表示结点与边的集合，$W$表示各边长度的集合，并设$T$有$n$个结点。</p><p>路径：树网中任何两结点$a$，$b$都存在唯一的一条简单路径，用$d(a,b)$表示以$a,b$为端点的路径的长度，它是该路径上各边长度之和。我们称$d(a,b)$为$a,b$两结点间的距离。</p><p>$D(v,P)=min⁡{d(v,u)}$, $u$为路径$P$上的结点。</p><p>树网的直径：树网中最长的路径成为树网的直径。对于给定的树网$T$，直径不一定是唯一的，但可以证明：各直径的中点（不一定恰好是某个结点，可能在某条边的内部）是唯一的，我们称该点为树网的中心。</p><p>偏心距$ECC(F)$：树网$T$中距路径$F$最远的结点到路径$F$的距离，即</p><p>$ECC(F)=\max⁡{d(v,F),v∈V}$</p><p>任务：对于给定的树网$T=(V,E,W)$和非负整数$s$，求一个路径$F$，他是某直径上的一段路径（该路径两端均为树网中的结点），其长度不超过$s$（可以等于$s$），使偏心距$ECC(F)$最小。我们称这个路径为树网$T=(V,E,W)$的核（<code>Core</code>）。必要时，$F$可以退化为某个结点。一般来说，在上述定义下，核不一定只有一个，但最小偏心距是唯一的。</p><p>下面的图给出了树网的一个实例。图中，$A−B$与$A−C$是两条直径，长度均为$20$。点$W$是树网的中心，$EF$边的长度为$5$。如果指定$s=11$，则树网的核为路径<code>DEFG</code>（也可以取为路径<code>DEF</code>），偏心距为$8$。如果指定$s=0$（或$s=1$、$s=2$），则树网的核为结点$F$，偏心距为$12$。</p><a id="more"></a><p><img src="https://cdn.luogu.org/upload/pic/20270.png" alt=""></p><h3 id="输入输出格式"><a href="#输入输出格式" class="headerlink" title="输入输出格式"></a>输入输出格式</h3><p><strong>输入格式：</strong></p><p>共$n$行。</p><p>第$1$行，两个正整数$n$和$s$，中间用一个空格隔开。其中$n$为树网结点的个数，$s$为树网的核的长度的上界。设结点编号以此为$1,2,…,n$。</p><p>从第$2$行到第$n$行，每行给出$3$个用空格隔开的正整数，依次表示每一条边的两个端点编号和长度。例如，“$2~4~7$”表示连接结点$2$与$4$的边的长度为$7$。</p><p><strong>输出格式：</strong></p><p>一个非负整数，为指定意义下的最小偏心距。</p><h3>输入输出样例</h3><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>5 21 2 52 3 22 4 42 5 3<div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>5</pre></div></div><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#2：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>8 61 3 22 3 2 3 4 64 5 34 6 44 7 27 8 3</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#2：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>5</pre></div></div><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>由于某些原因，这条路径必定会在直径上，所以不妨找出直径然后暴力枚举。但是显而易见，对每一个点都进行暴力肯定是不行的，所以我们需要向一些办法。可以将直径当做一条链，考虑下图这样的情况：</p><img src="/2020/02/28/307-05-%E7%9B%B4%E5%BE%84/image-20190718105500435.png" class=""><p>求出在这种情况之下的子树的最深深度，即为$secd[i]$，其中$i$为直径上的点，之所以这么表示，因为这个深度是在一个节点所有子树当中第二深的深度，最深的深度$best[i]$为直径所在的那颗子树的深度。</p><p>在这种情况下，可以在直径上选定一段$F$后，列出$ECC(F)$的方程：</p><script type="math/tex; mode=display">ECC(F) = \max\begin {cases}\text{left of}~F~\text{in diameter}\\\max \{secd[i],~i\in F\} \\\text{right of}~F~\text{in diameter}\end {cases}</script><p>首先在找直径和求子树深度这些环节其实写法都是一样的，使用两次的$dfs$，代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// x[u]: 高度，即u到顶的距离，secd[u]：最深子树(处直径外的子树)，dim[u]：直径上u的后继</span></span><br><span class="line"><span class="function">ll <span class="title">dfs_1</span><span class="params">(ll u, ll p)</span> </span>&#123;</span><br><span class="line">    ll alpha = u;</span><br><span class="line">    <span class="keyword">for</span> (ll e = h[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line">        ll v = g[e].to;</span><br><span class="line">        <span class="keyword">if</span> (v != p) &#123;</span><br><span class="line">            f[v] = f[u] + g[e].w;</span><br><span class="line">            ll a = dfs_1(v, u);</span><br><span class="line">            <span class="keyword">if</span> (f[a] &gt; f[alpha])</span><br><span class="line">                alpha = a;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> alpha;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs_2</span><span class="params">(ll u, ll p)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">for</span> (ll e = h[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line">        ll v = g[e].to;</span><br><span class="line">        <span class="keyword">if</span> (v != p) &#123;</span><br><span class="line">            x[v] = x[u] + g[e].w;</span><br><span class="line">            dfs_2(v, u);</span><br><span class="line">            ll newd = g[e].w + maxd[v];</span><br><span class="line">            <span class="keyword">if</span> (newd &gt;= maxd[u]) &#123;</span><br><span class="line">                secd[u] = maxd[u];</span><br><span class="line">                maxd[u] = newd;</span><br><span class="line">                dim[u] = v;</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">if</span> (newd &gt; secd[u]) &#123;</span><br><span class="line">                secd[u] = newd;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>后面的暴力判断哪一段最佳则可以有两种做法：</p><ol><li>RMQ：</li></ol><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">namespace</span> RMQ &#123;</span><br><span class="line">    <span class="function"><span class="keyword">void</span> <span class="title">init</span><span class="params">()</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt;= n; i ++) d[i][<span class="number">0</span>] = i;</span><br><span class="line">        <span class="keyword">for</span> (ll j = <span class="number">1</span>; (<span class="number">1</span> &lt;&lt; j) &lt;= n; j ++)</span><br><span class="line">            <span class="keyword">for</span> (ll i = <span class="number">1</span>; i + (<span class="number">1</span> &lt;&lt; j) - <span class="number">1</span> &lt;= n; i ++) &#123;</span><br><span class="line">                ll x = d[i][j - <span class="number">1</span>], y = d[i + (<span class="number">1</span> &lt;&lt; (j - <span class="number">1</span>))][j - <span class="number">1</span>];</span><br><span class="line">                d[i][j] = secd[Z[x]] &gt; secd[Z[y]] ? x : y;</span><br><span class="line">            &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="function">ll <span class="title">query</span><span class="params">(ll l, ll r)</span> </span>&#123;</span><br><span class="line">        ll k = log2(r - l + <span class="number">1</span>);</span><br><span class="line">        ll x = d[l][k], y = d[r - (<span class="number">1</span> &lt;&lt; k) + <span class="number">1</span>][k];</span><br><span class="line">        <span class="keyword">return</span> secd[Z[x]] &gt; secd[Z[y]] ? x : y;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; L;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        ll u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">        add_edge(u, v, w); add_edge(v, u, w);</span><br><span class="line">    &#125;</span><br><span class="line">    ll a = dfs_1(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">    dfs_2(a, <span class="number">0</span>);</span><br><span class="line">    ll k = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll p = a; p != <span class="number">0</span>; p = dim[p])</span><br><span class="line">        Z[++ k] = p;</span><br><span class="line">    ll diameter = x[Z[k]];</span><br><span class="line">    RMQ::init();</span><br><span class="line">    ll ans = <span class="number">1L</span>L &lt;&lt; <span class="number">62</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>, j = <span class="number">1</span>; i &lt;= k; i ++) &#123;</span><br><span class="line">        ll u = Z[i], v = Z[j];</span><br><span class="line">        <span class="keyword">while</span> (j + <span class="number">1</span> &lt;= k) &#123;</span><br><span class="line">            ll v_1 = Z[j + <span class="number">1</span>];</span><br><span class="line">            <span class="keyword">if</span> (x[v_1] - x[u] &lt;= L) &#123;</span><br><span class="line">                v = v_1;</span><br><span class="line">                j ++;</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        ll ecc = secd[Z[RMQ::query(i, j)]];</span><br><span class="line">        ecc = max(ecc, x[u]);</span><br><span class="line">        ecc = max(ecc, diameter - x[v]);</span><br><span class="line">        ans = min(ans, ecc);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><ol><li>单调队列：</li></ol><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">inc</span><span class="params">(ll &amp;i)</span> </span>&#123;</span><br><span class="line">    i ++;</span><br><span class="line">    <span class="keyword">if</span> (head &lt;= tail &amp;&amp; q[head] == Z[i - <span class="number">1</span>]) &#123;</span><br><span class="line">        head ++;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">adv</span><span class="params">(ll &amp;j)</span> </span>&#123;</span><br><span class="line">    j ++;</span><br><span class="line">    <span class="keyword">while</span> (head &lt;= tail) &#123;</span><br><span class="line">        <span class="keyword">int</span> last = q[tail];</span><br><span class="line">        <span class="keyword">if</span> (secd[last] &lt; secd[Z[j]]) &#123;</span><br><span class="line">            tail --;</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    tail ++;</span><br><span class="line">    q[tail] = Z[j];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; L;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        ll u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">        add_edge(u, v, w); add_edge(v, u, w);</span><br><span class="line">    &#125;</span><br><span class="line">    ll a = dfs_1(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">    dfs_2(a, <span class="number">0</span>);</span><br><span class="line">    ll k = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll p = a; p != <span class="number">0</span>; p = dim[p]) &#123;</span><br><span class="line">        Z[++ k] = p;</span><br><span class="line">    &#125;</span><br><span class="line">    ll diameter = x[Z[k]];</span><br><span class="line">    </span><br><span class="line">    ll ans = <span class="number">1L</span>L &lt;&lt; <span class="number">62</span>;</span><br><span class="line">  <span class="comment">// 单调队列，其中inc(i)和adv(j)为对i,j分别加一，但是加的过程中需要调整单调队列的队首和队尾的指针，所以写成void</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>, j = <span class="number">1</span>; i &lt;= k; inc(i)) &#123;</span><br><span class="line">        ll u = Z[i], v = Z[j];</span><br><span class="line">        <span class="keyword">while</span> (j + <span class="number">1</span> &lt;= k) &#123;</span><br><span class="line">            ll v_1 = Z[j + <span class="number">1</span>];</span><br><span class="line">            <span class="keyword">if</span> (x[v_1] - x[u] &lt;= L) &#123;</span><br><span class="line">                v = v_1;</span><br><span class="line">                adv(j);</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        ll ecc = max(secd[q[head]], x[u]);</span><br><span class="line">        ecc = max(ecc, diameter - x[v]);</span><br><span class="line">        ans = min(ans, ecc);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="HDU-2196-Computers"><a href="#HDU-2196-Computers" class="headerlink" title="HDU-2196-Computers"></a>HDU-2196-Computers</h2><h3 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h3><p>对于一张给定的图（是树)，有边权，输出每个点的到树上末梢的最远距离。</p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>这道题可以通过找出直径，每个点的最远距离就是这个点对于直径两个点的距离中较大的那个，可以很快的通过$3$遍$dfs$解决。</p><p>但是由于这是一道$HDU$的题，还是multiple test cases，怎么死的都不知道，还需要额外的优化，所以这里用的是$vector$建图，删的时候直接$erase()$就可以了。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;vector&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">10005</span>;</span><br><span class="line"><span class="keyword">int</span> val[maxn], end_of_diameter, max_length, ans[maxn];</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line">    <span class="keyword">int</span> to; <span class="keyword">int</span> w;</span><br><span class="line">    node(<span class="keyword">int</span> to, <span class="keyword">int</span> w) : to(to), w(w) &#123;&#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="built_in">vector</span> &lt; <span class="built_in">vector</span> &lt;node&gt; &gt; g;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 这里开len可以省掉一个数组，每次dfs开始时计算答案</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">DFS</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa, <span class="keyword">int</span> len)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (len &gt;= max_length) &#123;</span><br><span class="line">        max_length = len; end_of_diameter = u;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; g[u].size(); i ++) &#123;</span><br><span class="line">        <span class="keyword">int</span> v = g[u][i].to;</span><br><span class="line">        <span class="keyword">if</span> (v == fa) <span class="keyword">continue</span>;</span><br><span class="line">        <span class="keyword">int</span> w = g[u][i].w;</span><br><span class="line">        DFS(v, u, len + w);</span><br><span class="line">        ans[v] = max(ans[v], len + w); <span class="comment">// 这样做可以将两个数组化为一个数组</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">init</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    g.clear();</span><br><span class="line">    g.resize(n + <span class="number">2</span>);</span><br><span class="line">    <span class="built_in">memset</span>(ans, <span class="number">0</span>, <span class="keyword">sizeof</span>(ans));</span><br><span class="line">    max_length = <span class="number">0</span>;</span><br><span class="line">    end_of_diameter = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> v, w;</span><br><span class="line">    <span class="keyword">while</span> (<span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n) != EOF) &#123;</span><br><span class="line">        init();</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">2</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;v, &amp;w);</span><br><span class="line">            g[i].push_back(&#123;v, w&#125;);</span><br><span class="line">            g[v].push_back(&#123;i, w&#125;);</span><br><span class="line">        &#125;</span><br><span class="line">        DFS(<span class="number">1</span>, <span class="number">-1</span>, <span class="number">0</span>);</span><br><span class="line">        DFS(end_of_diameter, <span class="number">-1</span>, <span class="number">0</span>);</span><br><span class="line">        DFS(end_of_diameter, <span class="number">-1</span>, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans[i]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-05-直径&quot;&gt;&lt;a href=&quot;#307-05-直径&quot; class=&quot;headerlink&quot; title=&quot;307-05-直径&quot;&gt;&lt;/a&gt;307-05-直径&lt;/h1&gt;&lt;h2 id=&quot;直径的性质&quot;&gt;&lt;a href=&quot;#直径的性质&quot; class=&quot;headerlink&quot; title=&quot;直径的性质&quot;&gt;&lt;/a&gt;直径的性质&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;任意两条直径必定相交&lt;/li&gt;
&lt;li&gt;所有直径必交于一点&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;找直径&quot;&gt;&lt;a href=&quot;#找直径&quot; class=&quot;headerlink&quot; title=&quot;找直径&quot;&gt;&lt;/a&gt;找直径&lt;/h2&gt;&lt;p&gt;任意一个点出发，找出最远点，从最远点，在找到最远点，连起来就是直径（两次$dfs$）。证明从略（反证法）。&lt;/p&gt;
&lt;h2 id=&quot;P1099-树网的核&quot;&gt;&lt;a href=&quot;#P1099-树网的核&quot; class=&quot;headerlink&quot; title=&quot;P1099 树网的核&quot;&gt;&lt;/a&gt;P1099 树网的核&lt;/h2&gt;&lt;h3 id=&quot;题目描述&quot;&gt;&lt;a href=&quot;#题目描述&quot; class=&quot;headerlink&quot; title=&quot;题目描述&quot;&gt;&lt;/a&gt;题目描述&lt;/h3&gt;&lt;p&gt;设$T=(V,E,W)$是一个无圈且连通的无向图（也称为无根树），每条边到有正整数的权，我们称$T$为树网（&lt;code&gt;treebetwork&lt;/code&gt;），其中$V$，$E$分别表示结点与边的集合，$W$表示各边长度的集合，并设$T$有$n$个结点。&lt;/p&gt;
&lt;p&gt;路径：树网中任何两结点$a$，$b$都存在唯一的一条简单路径，用$d(a,b)$表示以$a,b$为端点的路径的长度，它是该路径上各边长度之和。我们称$d(a,b)$为$a,b$两结点间的距离。&lt;/p&gt;
&lt;p&gt;$D(v,P)=min⁡{d(v,u)}$, $u$为路径$P$上的结点。&lt;/p&gt;
&lt;p&gt;树网的直径：树网中最长的路径成为树网的直径。对于给定的树网$T$，直径不一定是唯一的，但可以证明：各直径的中点（不一定恰好是某个结点，可能在某条边的内部）是唯一的，我们称该点为树网的中心。&lt;/p&gt;
&lt;p&gt;偏心距$ECC(F)$：树网$T$中距路径$F$最远的结点到路径$F$的距离，即&lt;/p&gt;
&lt;p&gt;$ECC(F)=\max⁡{d(v,F),v∈V}$&lt;/p&gt;
&lt;p&gt;任务：对于给定的树网$T=(V,E,W)$和非负整数$s$，求一个路径$F$，他是某直径上的一段路径（该路径两端均为树网中的结点），其长度不超过$s$（可以等于$s$），使偏心距$ECC(F)$最小。我们称这个路径为树网$T=(V,E,W)$的核（&lt;code&gt;Core&lt;/code&gt;）。必要时，$F$可以退化为某个结点。一般来说，在上述定义下，核不一定只有一个，但最小偏心距是唯一的。&lt;/p&gt;
&lt;p&gt;下面的图给出了树网的一个实例。图中，$A−B$与$A−C$是两条直径，长度均为$20$。点$W$是树网的中心，$EF$边的长度为$5$。如果指定$s=11$，则树网的核为路径&lt;code&gt;DEFG&lt;/code&gt;（也可以取为路径&lt;code&gt;DEF&lt;/code&gt;），偏心距为$8$。如果指定$s=0$（或$s=1$、$s=2$），则树网的核为结点$F$，偏心距为$12$。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="树" scheme="http://gyrojeff.moe/tags/%E6%A0%91/"/>
    
  </entry>
  
  <entry>
    <title>307-01-树形背包</title>
    <link href="http://gyrojeff.moe/2020/02/28/307-01-%E6%A0%91%E5%BD%A2%E8%83%8C%E5%8C%85/"/>
    <id>http://gyrojeff.moe/2020/02/28/307-01-%E6%A0%91%E5%BD%A2%E8%83%8C%E5%8C%85/</id>
    <published>2020-02-28T15:46:17.000Z</published>
    <updated>2020-09-22T12:58:49.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="307-01-树形背包-O-n-2-算法"><a href="#307-01-树形背包-O-n-2-算法" class="headerlink" title="307-01-树形背包$O(n^2)$算法"></a>307-01-树形背包$O(n^2)$算法</h1><hr><h2 id="P2014选课"><a href="#P2014选课" class="headerlink" title="P2014选课"></a>P2014选课</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>在大学里每个学生，为了达到一定的学分，必须从很多课程里选择一些课程来学习，在课程里有些课程必须在某些课程之前学习，如高等数学总是在其它课程之前学习。现在有N门功课，每门课有个学分，每门课有一门或没有直接先修课（若课程a是课程b的先修课即只有学完了课程a，才能学习课程b）。一个学生要从这些课程里选择M门课程学习，问他能获得的最大学分是多少？</p><a id="more"></a><h3 id="输入输出格式"><a href="#输入输出格式" class="headerlink" title="输入输出格式"></a>输入输出格式</h3><p><strong>输入格式：</strong></p><p>第一行有两个整数N,M用空格隔开。$(1≤N≤300,1≤M≤300)$</p><p>接下来的N行,第I+1行包含两个整数ki和si, ki表示第I门课的直接先修课，si表示第I门课的学分。若ki=0表示没有直接先修课（1&lt;=ki&lt;=N, 1&lt;=si&lt;=20）。</p><p><strong>输出格式：</strong></p><p>只有一行，选M门课程的最大得分。</p><hr><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><h4 id="建图"><a href="#建图" class="headerlink" title="建图"></a>建图</h4><p>兄弟儿子表示法建图：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; p[i] &gt;&gt; a[i]; <span class="comment">// a[i]: 值</span></span><br><span class="line">bro[i] = son[p[i]]; <span class="comment">// i.bro = i.father.son</span></span><br><span class="line">son[p[i]] = i;<span class="comment">// i.p.son = i</span></span><br><span class="line">  <span class="comment">// 由于如果没有前继，p[i]=0，所以此时其前继为虚拟根：0</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="三次方-O-n-3-算法："><a href="#三次方-O-n-3-算法：" class="headerlink" title="三次方$O(n^3)$算法："></a>三次方$O(n^3)$算法：</h4><p>首先分析只是二叉树的情况：</p><p>设对于一个节点$u$，设它的左儿子和右儿子分别为：$L,~R$。设以左儿子为根的子树选$\alpha$门课，以右儿子为根的子树选$\beta$门课，会有以下的递推公式：</p><script type="math/tex; mode=display">\begin {align}&f(u,0)=0\\&f(u,1)=A[u]\\&f(u,k) = \max_{\alpha + \beta = k - 1} \{f(L,\alpha) + f(R,\beta) + A[u]\}\end {align}</script><p>其中，$f(u,k)$表示以$u$为根节点的子树选$k$门课。</p><p>但是其并非二叉树，所以可以考虑两种方式：</p><p>（一）逐个添加儿子：</p><script type="math/tex; mode=display">\begin {align*}&\text{0 son: }f^{(0)}(u,k) \\&\downarrow \\&\text{1 son: }f^{(1)}(u,k) \\&\downarrow \\&\cdots \\&\downarrow \\&i-1\text{ son: }f^{(i-1)}(u,k) \\&\downarrow \\&\text{i son: }f^{(i)}(u,k) \\\end {align*}</script><p>由上面的想法，我们可以比较容易地得到以下的递推公式：</p><script type="math/tex; mode=display">\begin {align}&f^{0}(u,k)=\begin {cases}0~~~~~~~~~~~~~~~~~~k=0 \\A[u]~~~~~~~~~~~~~k≥1\end {cases} \\&f^{(i)}(u,k)=\max_{0≤\alpha < k} \{f(v_i,\alpha)+f^{(i-1)}(u,k-\alpha)\} \\&f(u,k) = f^{(j)}(u,k)\end {align}</script><p>其中$j$为节点$u$的儿子的数量。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">dfs(<span class="keyword">int</span> u) &#123;</span><br><span class="line">    f[u,<span class="number">0</span>] = <span class="number">0</span>; f[u,<span class="number">1</span>] = a[u];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = son[u]; i != <span class="number">0</span>; i = bro[i]) &#123;</span><br><span class="line">dfs(i);</span><br><span class="line">      <span class="comment">// 背包，故从大到小(考虑更新顺序)</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = m + <span class="number">1</span>; k &gt;= <span class="number">1</span>; k --) &#123;<span class="comment">// m + 1: 学习0(虚拟根)，多学一门</span></span><br><span class="line">f(i)[u,k] = f(i - <span class="number">1</span>)[u,k];</span><br><span class="line"><span class="keyword">for</span> (α = <span class="number">0</span>; α &lt; k; α ++)</span><br><span class="line">f(i)[u,k] =max(f(i)[u,k], f[i,α] + f(i<span class="number">-1</span>)[u,k-α]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h4 id="压缩-i-（背包问题）"><a href="#压缩-i-（背包问题）" class="headerlink" title="压缩$i$（背包问题）"></a>压缩$i$（背包问题）</h4><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">dfs(<span class="keyword">int</span> u) &#123;</span><br><span class="line">  f[u,<span class="number">0</span>] = <span class="number">0</span>; f[u,<span class="number">1</span>] = a[u]; <span class="comment">// 初始化</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = son[u]; i != <span class="number">0</span>; i = bro[i]) &#123;</span><br><span class="line">        dfs(i);</span><br><span class="line">        <span class="comment">// 背包，故从大到小(考虑更新顺序)</span></span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = m + <span class="number">1</span>; k &gt;= <span class="number">1</span>; k --) <span class="comment">// m + 1: 学习0(虚拟根)，多学一门</span></span><br><span class="line"><span class="keyword">for</span> (α = <span class="number">0</span>; α &lt; k; α ++)</span><br><span class="line">f[u,k] = max(f[u,k], f[i,α] + f[u,k-α]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="comment">// 构图</span></span><br><span class="line">dfs(<span class="number">0</span>);</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; f[<span class="number">0</span>,m+<span class="number">1</span>]; <span class="comment">// 虚拟根，所以m+1</span></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>时间复杂度分析：</p><h4 id="二次方-O-n-2-算法"><a href="#二次方-O-n-2-算法" class="headerlink" title="二次方$O(n^2)$算法"></a>二次方$O(n^2)$算法</h4><p>计算一个单元需要$O(n)$，计算$n^2$单元—&gt;$O(n^3)$算法。</p><p>但是想要其变为平方算法$O(n^2)$：所以在此使用第二种方法来解决多叉树的问题：</p><p>现在定义$f(u,k)$表示的以这个节点为根的一座包括自己所有儿孙和弟弟们的一片森林：</p><img src="/2020/02/28/307-01-%E6%A0%91%E5%BD%A2%E8%83%8C%E5%8C%85/pic.png" class=""><p>这样的好处就是可以把其分为互不相干的两个部分：儿孙们和弟弟们。</p><p>递推公式：</p><script type="math/tex; mode=display">f(u,k) = \max \begin {cases}f(b,k) \\\max_{\alpha + \beta = k - 1} \{A[u] + f(s,\alpha) + f(b,\beta)\}\end {cases}</script><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">dfs(<span class="keyword">int</span> u) &#123;</span><br><span class="line"><span class="keyword">int</span> b = bro[u], s = son[u];</span><br><span class="line"><span class="keyword">if</span> (s != <span class="number">0</span>) dfs(s); </span><br><span class="line">  <span class="keyword">if</span> (b != <span class="number">0</span>) dfs(b);</span><br><span class="line">    <span class="keyword">for</span> (k = <span class="number">1</span>; k &lt;= m; k ++) f[u][k] = f[b][k];</span><br><span class="line">    <span class="keyword">for</span> (α = <span class="number">0</span>; α &lt;= m; α ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (β = <span class="number">0</span>； β &lt;= m; β ++) &#123;</span><br><span class="line">            k = α + β + <span class="number">1</span>;</span><br><span class="line">            f[u][k] = max &#123;</span><br><span class="line">                f[s][α] + f[b][β] + A[u];</span><br><span class="line">                f[u][k];</span><br><span class="line">            &#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">dfs(son[<span class="number">0</span>]);</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; f[son[<span class="number">0</span>]][m];</span><br></pre></td></tr></table></figure><p>很不幸，==它还是$O(n^3)$的。==（证明略）</p><p>优化：（将$k$改为$sz[s], sz[b]$）</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">dfs(<span class="keyword">int</span> u) &#123;</span><br><span class="line"><span class="keyword">int</span> b = bro[u], s = son[u];</span><br><span class="line">  f[u,<span class="number">0</span>] = <span class="number">0</span>; f[u,<span class="number">1</span>] = a[u]; <span class="comment">// 初始化</span></span><br><span class="line"><span class="keyword">if</span> (s != <span class="number">0</span>) dfs(s);</span><br><span class="line">  <span class="keyword">if</span> (b != <span class="number">0</span>) dfs(b);</span><br><span class="line">  sz[u] = sz[s] + sz[b] + <span class="number">1</span>; <span class="comment">// 算子树大小</span></span><br><span class="line"><span class="keyword">for</span> (k = <span class="number">1</span>; k &lt;= m; k ++) f[u][k] = f[b][k]; <span class="comment">// 划水行为(递推公式第一行)</span></span><br><span class="line"><span class="keyword">for</span> (α = <span class="number">0</span>; α &lt;= sz[s]; α ++) &#123;</span><br><span class="line"><span class="keyword">for</span> (β = <span class="number">0</span>； β &lt;= sz[b]; β ++) &#123;</span><br><span class="line">k = α + β + <span class="number">1</span>;</span><br><span class="line">f[u][k] = max &#123;</span><br><span class="line">f[s][α] + f[b][β] + A[u];</span><br><span class="line">f[u][k];</span><br><span class="line">&#125;;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>对于时间复杂度的证明：</p><p>非常好证明以下不等式：</p><script type="math/tex; mode=display">a^2 + b^2 + ab ≤ (a+b+1)^2</script><p>在这里我们记$|s| = sz(s),~|b|=sz(b)$，所以时间复杂度：</p><script type="math/tex; mode=display">\begin {align}&|s|^2 + |b|^2 + |s||b| \\≤~& (|s| + |b| + 1) ^2 \\=~& u^2\end {align}</script><p>故时间复杂度为$O(n^2)$。</p><p>将方法（一）的$O(n^3)$算法变为$O(n^2)$算法：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u)</span> </span>&#123;</span><br><span class="line">sz[u] = <span class="number">1</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = son[u]; i != <span class="number">0</span>; i = bro[i]) &#123;</span><br><span class="line">dfs(i);</span><br><span class="line">sz[u] += sz[i];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = sz[u]; k &gt;= <span class="number">1</span>; k --) &#123;</span><br><span class="line"><span class="keyword">for</span> (α = k - <span class="number">1</span>; α &gt;= <span class="number">0</span>; α --) &#123;</span><br><span class="line">f[u][k] = max&#123;</span><br><span class="line">f[u][k];</span><br><span class="line">f[u][k-α] + f[i][α];</span><br><span class="line">&#125;;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>注：</p><p>（一）对于第二种方法，开数组时要开两倍大小，因为$k=\alpha+\beta + 1 ≤2m+1$</p><p>（二）对于第一种方法的背包问题之所以要$k:t\rightarrow 1$，是因为这样可以避免$f^{(i-1)}(u,k-\alpha)$提前被更新。</p><p>完整代码：</p><p>（一）方法一：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">305</span>;</span><br><span class="line">ll n, m;</span><br><span class="line">ll son[maxn], bro[maxn], a[maxn], p[maxn], f[maxn][maxn], sz[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u)</span> </span>&#123;</span><br><span class="line">sz[u] = <span class="number">1</span>;</span><br><span class="line">    f[u][<span class="number">0</span>] = <span class="number">0</span>; f[u][<span class="number">1</span>] = a[u];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = son[u]; i != <span class="number">0</span>; i = bro[i]) &#123;</span><br><span class="line">dfs(i);</span><br><span class="line">sz[u] += sz[i];</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> k = sz[u]; k &gt;= <span class="number">1</span>; k --) &#123;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> alpha = <span class="number">0</span>; alpha &lt; k; alpha ++) &#123;</span><br><span class="line">f[u][k] = max(f[u][k], f[u][k-alpha] + f[i][alpha]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; p[i] &gt;&gt; a[i];</span><br><span class="line">        bro[i] = son[p[i]];</span><br><span class="line">        son[p[i]] = i;</span><br><span class="line">    &#125;</span><br><span class="line">    dfs(<span class="number">0</span>);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; f[<span class="number">0</span>][m + <span class="number">1</span>] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>（二）方法二：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">3005</span>;</span><br><span class="line">ll n, m;</span><br><span class="line">ll son[maxn], bro[maxn], a[maxn], p[maxn], f[maxn][maxn], sz[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u)</span> </span>&#123;</span><br><span class="line">    ll b = bro[u], s = son[u];</span><br><span class="line">    f[u][<span class="number">0</span>] = <span class="number">0</span>; f[u][<span class="number">1</span>] = a[u];</span><br><span class="line">    <span class="keyword">if</span> (s != <span class="number">0</span>) dfs(s);</span><br><span class="line">    <span class="keyword">if</span> (b != <span class="number">0</span>) dfs(b);</span><br><span class="line">    sz[u] = sz[s] + sz[b] + <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++) f[u][i] = f[b][i];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> alpha = <span class="number">0</span>; alpha &lt;= m; alpha ++) &#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> beta = <span class="number">0</span>; beta &lt;= m; beta ++) &#123;</span><br><span class="line">            ll k = alpha + beta + <span class="number">1</span>;</span><br><span class="line">            f[u][k] = max(f[u][k], f[s][alpha] + f[b][beta] + a[u]);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; p[i] &gt;&gt; a[i];</span><br><span class="line">        bro[i] = son[p[i]];</span><br><span class="line">        son[p[i]] = i;</span><br><span class="line">    &#125;</span><br><span class="line">    dfs(son[<span class="number">0</span>]);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; f[son[<span class="number">0</span>]][m] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="P3177-HAOI2015-树上染色"><a href="#P3177-HAOI2015-树上染色" class="headerlink" title="P3177 [HAOI2015]树上染色"></a>P3177 [HAOI2015]树上染色</h2><h3 id="题目描述-1"><a href="#题目描述-1" class="headerlink" title="题目描述"></a>题目描述</h3><p>有一棵点数为 N 的树，树边有边权。给你一个在 0~ N 之内的正整数 K ，你要在这棵树中选择 K个点，将其染成黑色，并将其他 的N-K个点染成白色 。 将所有点染色后，你会获得黑点两两之间的距离加上白点两两之间的距离的和的受益。问受益最大值是多少。</p><h3 id="输入输出格式-1"><a href="#输入输出格式-1" class="headerlink" title="输入输出格式"></a>输入输出格式</h3><p><strong>输入格式：</strong></p><p>第一行包含两个整数 N, K 。接下来 N-1 行每行三个正整数 fr, to, dis ， 表示该树中存在一条长度为 dis 的边 (fr, to) 。输入保证所有点之间是联通的。</p><p><strong>输出格式：</strong></p><p>输出一个正整数，表示收益的最大值。</p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><h4 id="递推公式建立"><a href="#递推公式建立" class="headerlink" title="递推公式建立"></a>递推公式建立</h4><p>定义$f(u,x)$表示在以$u$为根的子树当中，有$x$个节点被染黑，在$u$处对答案的贡献。有：</p><script type="math/tex; mode=display">\begin {align}&f(u, x) = \max_{0 ≤ j ≤x,~v\in u.son}\{f(u,x),~f(u, x-j) + f(v,j) + val\} \\&val = w[e]*\{j * (k-j) + (|v.G| - j) * [(n-k)-(|v.G|-j)]\} \\&|v.G| = size[v],~e = (u,v)\end {align}</script><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">4005</span>;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span></span><br><span class="line">    <span class="keyword">int</span> to, next, w;</span><br><span class="line">&#125; g[maxn];</span><br><span class="line"></span><br><span class="line">ll n, k, ecnt = <span class="number">0</span>, head[maxn], f[maxn][maxn], sz[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">addEdge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v, <span class="keyword">int</span> w)</span> </span>&#123;</span><br><span class="line">    g[ecnt].to = v;</span><br><span class="line">    g[ecnt].w = w;</span><br><span class="line">    g[ecnt].next = head[u];</span><br><span class="line">    head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> p)</span> </span>&#123;</span><br><span class="line">    sz[u] = <span class="number">1</span>;</span><br><span class="line">    f[u][<span class="number">0</span>] = f[u][<span class="number">1</span>] = <span class="number">0</span>;</span><br><span class="line">    <span class="comment">// 子树是一个一个添加（树型背包的第一种添加子树的方法）</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">-1</span>; e = g[e].next) &#123;</span><br><span class="line">        <span class="keyword">int</span> v = g[e].to;</span><br><span class="line">        <span class="keyword">if</span> (v != p) &#123;</span><br><span class="line">            dfs(v, u);</span><br><span class="line">            sz[u] += sz[v];</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> x = sz[u]; x &gt;= <span class="number">0</span>; x --) &#123;</span><br><span class="line">                <span class="keyword">for</span> (<span class="keyword">int</span> y = sz[v]; y &gt;= <span class="number">0</span>; y --) &#123;</span><br><span class="line">                    <span class="comment">// 特判：这个节点可行（其子树的节点够）</span></span><br><span class="line">                    <span class="keyword">if</span> (f[u][x] != <span class="number">-1</span>) &#123;</span><br><span class="line"><span class="comment">/*  val表示：</span></span><br><span class="line"><span class="comment">（新的子树中的黑点个数×除此之外的所有黑点个数+新的子树中的白点个数×除此之外的白点个数） ==&gt; 必将经过下面那条边的次数</span></span><br><span class="line"><span class="comment">                                    ×</span></span><br><span class="line"><span class="comment">         （这些所有次数必定将要进过的一条边：就是u，v之间的边，边权为w[e]）</span></span><br><span class="line"><span class="comment">                                    =</span></span><br><span class="line"><span class="comment">                这个新的子树添加时，与u连接的这条边对答案的贡献</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line">ll val = g[e].w * (y * (k - y) + (sz[v] - y) * ((n - k) - (sz[v] - y)));</span><br><span class="line"><span class="comment">/* 所以下面的式子可以转换为更加易于理解的式子：</span></span><br><span class="line"><span class="comment">f[u][x] = max&#123;f[u][x], f[u][x-k] + f[v][k] + val&#125;, 其中：0 ≤ k ≤ x; v为u的一个儿子</span></span><br><span class="line"><span class="comment">我们不难发现，节点是在dfs的过程中，一 个 一 个 添加的，所以</span></span><br><span class="line"><span class="comment">1. f[u][x-k]表示的是之前（没有添加现在子树的时候），以u为根的子树有x-k个点染黑对答案的贡献</span></span><br><span class="line"><span class="comment">2. f[v][k]表示的是以v为根的子树（由于dfs的顺序，此时这个子树是完全的），有k个节点被染黑对答案，到v的贡献</span></span><br><span class="line"><span class="comment">3. val表示的是为了补全（2）当中的那些染黑的节点，在u -&gt; v的贡献</span></span><br><span class="line"><span class="comment">*/</span></span><br><span class="line">f[u][x + y] = max(f[u][x + y], f[u][x] + f[v][y] + val);</span><br><span class="line">                    &#125;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">memset</span>(head, <span class="number">-1</span>, <span class="keyword">sizeof</span>(head));</span><br><span class="line">    <span class="built_in">memset</span>(f, <span class="number">-1</span>, <span class="keyword">sizeof</span>(f));</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="keyword">int</span> from, to, dis;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; from &gt;&gt; to &gt;&gt; dis;</span><br><span class="line">        addEdge(from, to, dis);</span><br><span class="line">        addEdge(to, from, dis);</span><br><span class="line">    &#125;</span><br><span class="line">    dfs(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; f[<span class="number">1</span>][k] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;307-01-树形背包-O-n-2-算法&quot;&gt;&lt;a href=&quot;#307-01-树形背包-O-n-2-算法&quot; class=&quot;headerlink&quot; title=&quot;307-01-树形背包$O(n^2)$算法&quot;&gt;&lt;/a&gt;307-01-树形背包$O(n^2)$算法&lt;/h1&gt;&lt;hr&gt;
&lt;h2 id=&quot;P2014选课&quot;&gt;&lt;a href=&quot;#P2014选课&quot; class=&quot;headerlink&quot; title=&quot;P2014选课&quot;&gt;&lt;/a&gt;P2014选课&lt;/h2&gt;&lt;h3 id=&quot;题目描述&quot;&gt;&lt;a href=&quot;#题目描述&quot; class=&quot;headerlink&quot; title=&quot;题目描述&quot;&gt;&lt;/a&gt;题目描述&lt;/h3&gt;&lt;p&gt;在大学里每个学生，为了达到一定的学分，必须从很多课程里选择一些课程来学习，在课程里有些课程必须在某些课程之前学习，如高等数学总是在其它课程之前学习。现在有N门功课，每门课有个学分，每门课有一门或没有直接先修课（若课程a是课程b的先修课即只有学完了课程a，才能学习课程b）。一个学生要从这些课程里选择M门课程学习，问他能获得的最大学分是多少？&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="DP" scheme="http://gyrojeff.moe/tags/DP/"/>
    
    <category term="背包" scheme="http://gyrojeff.moe/tags/%E8%83%8C%E5%8C%85/"/>
    
    <category term="树" scheme="http://gyrojeff.moe/tags/%E6%A0%91/"/>
    
  </entry>
  
  <entry>
    <title>306-14-CDQ分治-陌上花开</title>
    <link href="http://gyrojeff.moe/2020/02/28/306-14-CDQ%E5%88%86%E6%B2%BB-%E9%99%8C%E4%B8%8A%E8%8A%B1%E5%BC%80/"/>
    <id>http://gyrojeff.moe/2020/02/28/306-14-CDQ%E5%88%86%E6%B2%BB-%E9%99%8C%E4%B8%8A%E8%8A%B1%E5%BC%80/</id>
    <published>2020-02-28T15:39:59.000Z</published>
    <updated>2020-09-22T12:58:47.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h2><p>对于给遗传给定的序列：</p><script type="math/tex; mode=display">(x,y,z)_1, (x,y,z)_2, (x,y,z)_3, \cdots, (x,y,z)_n</script><p>求：</p><script type="math/tex; mode=display">\sum_{x_i < x_j,~y_i < y_j,~z_i<z_j,~i ≠j}1</script><a id="more"></a><h2 id="题解："><a href="#题解：" class="headerlink" title="题解："></a>题解：</h2><p>CDQ分治，顾名思义就是要进行分治，但是它可以解决比普通分治更多的问题。CDQ分治的整体思想，是：</p><ol><li>对于一个需要解决问题的区间$[l,r)$，将其一分为二，变为$[l,mid),[mid,r)$。</li><li>对于这两个被分开的区间，分别进行递归解决。</li><li>完成递归解决之后，计算左边对右边的贡献（有的时候可能要计算右边对左边的计算或者互相都要算）</li><li>完成，统计答案。</li></ol><p>在这道题当中，需要解决的是三维偏序的问题，而首先想到的是使用二维树状数组进行求逆序对，将这三维当中的两维当作下标，对最后一维求逆序对。但是这种做法显而易见，空间会爆掉，是开不下的。所以我们需要采取某种算法或者数据结构来代替树状数组的这意味空间。</p><p>在这里，就是用了CDQ分治。</p><p>首先解决第一维的问题：以第一维作为第一关键字，第二维作为第二关键字，第三维作为第三关键字，进行排序。比较函数如下：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp1</span><span class="params">(Point a, Point b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line"><span class="keyword">if</span> (a.x == b.x) <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line"><span class="keyword">return</span> a.x &lt; b.x;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>在进行排序之后，就保证了整个序列==单调不下降==。</p><p>随后进行CDQ分治：<code>solve(0,n)</code></p><ol><li><p><code>solve(0,mid)</code>，<code>solve(mid, n)</code></p></li><li><p>计算左边对右边的影响（原因：整个序列对于第一维变量单调不下降，所以右边的大数无法对小数产生答案上的贡献）</p><ul><li><p>对$[l,mid),[mid,r)$分别进行以第二维作为第一关键字，第三维作为第二关键字的排序：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp2</span><span class="params">(Point a, Point b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line"><span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>注意，这里是直接对原数组进行排序，而且实际上不会产生任何问题，因为==被排序的两个子序列的这两个子问题，共同属于同一个问题==，所以在进行其父亲问题的解决时还会进行重拍，届时并不会产生元素跨界问题。</p></li><li><p>进行双指针扫描，双指针扫描的目的就是直接使用树状数组对每个元素进行答案统计。</p></li></ul></li></ol><p>整个问题解决完毕。</p><p>但是其存在一定的问题：由于CDQ分治这里我们讨论过了，应该只需要计算左边对右边的影响，但是忽略了一种情况，就是两个元素完全相同，那么左右应该共享影响，但是这里是非常难做到的，所以对于输入的时候，直接进行去重操作，并且赋予每个元素重复次数的权值，方便计算。</p><p>注意：在统计答案的时候，会看到下式：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ans[A[i].ans + A[i].cnt - <span class="number">1</span>] += A[i].cnt</span><br></pre></td></tr></table></figure><p>这里还要加上<code>A[i].cnt-1</code>的原因其实也不难想到，就是去重的逆运算。</p><p>历届悲惨代码如下：</p><p>第一次（WA，0分，没有去重）：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="keyword">typedef</span> <span class="built_in">pair</span>&lt;ll, <span class="built_in">pair</span>&lt;ll, ll&gt; &gt; Point;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> ll maxn = <span class="number">200005</span>;</span><br><span class="line"></span><br><span class="line">Point A[maxn];</span><br><span class="line">ll n, K, ord[maxn], f[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(ll x, ll y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> A[x].second &lt; A[y].second;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">ll <span class="title">lb</span><span class="params">(ll i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add</span><span class="params">(ll i, ll delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= K) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">ll <span class="title">sum</span><span class="params">(ll i)</span> </span>&#123;</span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 左闭右开</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">solve</span><span class="params">(ll left, ll right)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (right - left == <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">    ll mid = (right + left) / <span class="number">2</span>;</span><br><span class="line">    solve(left, mid); solve(mid, right);</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++)</span><br><span class="line">        ord[i] = i;</span><br><span class="line">    sort(ord + left, ord + right, cmp);</span><br><span class="line">    <span class="comment">// 左边对右边的理想</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid) add(A[k].second.second, <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">else</span>         f[k] += sum(A[k].second.second);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++)</span><br><span class="line">        <span class="keyword">if</span> (ord[i] &lt; mid)</span><br><span class="line">            add(A[ord[i]].second.second, <span class="number">-1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="comment">// input;</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; K;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; A[i].first &gt;&gt; A[i].second.first &gt;&gt; A[i].second.second;</span><br><span class="line">    sort(A, A + n);</span><br><span class="line">    solve(<span class="number">0</span>, n);</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        ans[f[i]] ++;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>第二次（WA，0分，去重了，答案统计没做逆运算）：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 10000000</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Point</span> &#123;</span></span><br><span class="line">    ll x, y, z, cnt;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> == (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">return</span> (a.x == b.x) &amp;&amp; (a.y == b.y) &amp;&amp; (a.z == b.z);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y &amp;&amp; a.z == b.z) <span class="keyword">return</span> a.cnt &lt; b.cnt;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x) <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">        <span class="keyword">return</span> a.x &lt; b.x;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> ll maxn = <span class="number">200005</span>;</span><br><span class="line"></span><br><span class="line">Point A[maxn];</span><br><span class="line">ll n, K, ord[maxn], f[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(ll x, ll y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (A[x].y == A[y].y) <span class="keyword">return</span> A[x].z &lt; A[y].z;</span><br><span class="line">    <span class="keyword">return</span> A[x].y &lt; A[y].y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">lb</span><span class="params">(ll i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(ll i, ll delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= K) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">sum</span><span class="params">(ll i)</span> </span>&#123;</span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 左闭右开</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">solve</span><span class="params">(ll left, ll right)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (right - left == <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">    ll mid = (right + left) / <span class="number">2</span>;</span><br><span class="line">    solve(left, mid); solve(mid, right);</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++)</span><br><span class="line">        ord[i] = i;</span><br><span class="line">    sort(ord + left, ord + right, cmp);</span><br><span class="line">    <span class="comment">// 左边对右边的贡献</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid) add(A[k].z, A[k].cnt);</span><br><span class="line">        <span class="keyword">else</span>         f[k] += sum(A[k].z);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid)</span><br><span class="line">            add(A[k].z, (<span class="number">-1</span> * A[k].cnt));</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="comment">// input;</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; K;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; A[i].x &gt;&gt; A[i].y &gt;&gt; A[i].z;</span><br><span class="line">        A[i].cnt = <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    sort(A, A + n); ll multiple_count = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">if</span> (A[i] == A[i - <span class="number">1</span>]) &#123;</span><br><span class="line">            A[i].cnt = A[i - <span class="number">1</span>].cnt + <span class="number">1</span>;</span><br><span class="line">            multiple_count ++;</span><br><span class="line">            A[i - <span class="number">1</span>] = (Point) &#123;inf, inf, inf, inf&#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    sort(A, A + n);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; <span class="string">&quot;-----------------&quot;</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; A[i].x &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].y &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].z &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].cnt &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    solve(<span class="number">0</span>, n - multiple_count);</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">        ans[f[i]] += A[i].cnt;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>第三次（WA，10分，不知道哪里错了）：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 10000000</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Point</span> &#123;</span></span><br><span class="line">    ll x, y, z, cnt;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> == (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">return</span> (a.x == b.x) &amp;&amp; (a.y == b.y) &amp;&amp; (a.z == b.z);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y &amp;&amp; a.z == b.z) <span class="keyword">return</span> a.cnt &lt; b.cnt;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line">        <span class="keyword">if</span> (a.x == b.x) <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">        <span class="keyword">return</span> a.x &lt; b.x;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> ll maxn = <span class="number">200005</span>;</span><br><span class="line"></span><br><span class="line">Point A[maxn];</span><br><span class="line">ll n, K, ord[maxn], f[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(ll x, ll y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (A[x].y == A[y].y) <span class="keyword">return</span> A[x].z &lt; A[y].z;</span><br><span class="line">    <span class="keyword">return</span> A[x].y &lt; A[y].y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">lb</span><span class="params">(ll i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(ll i, ll delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= K) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">sum</span><span class="params">(ll i)</span> </span>&#123;</span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 左闭右开</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">solve</span><span class="params">(ll left, ll right)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (right - left == <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">    ll mid = (right + left) / <span class="number">2</span>;</span><br><span class="line">    solve(left, mid); solve(mid, right);</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++)</span><br><span class="line">        ord[i] = i;</span><br><span class="line">    sort(ord + left, ord + right, cmp);</span><br><span class="line">    <span class="comment">// 左边对右边的贡献</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid) add(A[k].z, A[k].cnt);</span><br><span class="line">        <span class="keyword">else</span>         f[k] += sum(A[k].z);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid)</span><br><span class="line">            add(A[k].z, (<span class="number">-1</span> * A[k].cnt));</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="comment">// input;</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; K;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; A[i].x &gt;&gt; A[i].y &gt;&gt; A[i].z;</span><br><span class="line">        A[i].cnt = <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    sort(A, A + n); ll multiple_count = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">if</span> (A[i] == A[i - <span class="number">1</span>]) &#123;</span><br><span class="line">            A[i].cnt = A[i - <span class="number">1</span>].cnt + <span class="number">1</span>;</span><br><span class="line">            multiple_count ++;</span><br><span class="line">            A[i - <span class="number">1</span>] = (Point) &#123;inf, inf, inf, inf&#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    sort(A, A + n);</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; <span class="string">&quot;-----------------&quot;</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; A[i].x &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].y &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].z &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; A[i].cnt &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    solve(<span class="number">0</span>, n - multiple_count);</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++) &#123;</span><br><span class="line">      f[i] += A[i].cnt - <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">        ans[f[i]] += A[i].cnt;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>第四次，放弃了，使用双指针扫描（AC）</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 1000000000</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Point</span> &#123;</span></span><br><span class="line">    ll x, y, z, cnt, ans;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> == (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">return</span> (a.x == b.x) &amp;&amp; (a.y == b.y) &amp;&amp; (a.z == b.z);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">300005</span>;</span><br><span class="line"></span><br><span class="line">Point A[maxn];</span><br><span class="line">ll n, K, ord[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp2</span><span class="params">(Point a, Point b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line">    <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp1</span><span class="params">(Point a, Point b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line">  <span class="keyword">if</span> (a.x == b.x) <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">   <span class="keyword">return</span> a.x &lt; b.x;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">lb</span><span class="params">(ll i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(ll i, ll delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= K) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">sum</span><span class="params">(ll i)</span> </span>&#123;</span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 左闭右开</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">solve</span><span class="params">(ll left, ll right)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (right - left == <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">    ll mid = (right + left) &gt;&gt; <span class="number">1</span>;</span><br><span class="line">    solve(left, mid); solve(mid, right);</span><br><span class="line">    sort(A + left, A + mid, cmp2);</span><br><span class="line">    sort(A + mid, A + right, cmp2);</span><br><span class="line">    ll i, j = left;</span><br><span class="line">    <span class="keyword">for</span> (i = mid; i &lt; right; i ++) &#123;</span><br><span class="line">        <span class="keyword">while</span> (A[i].y &gt;= A[j].y &amp;&amp; j &lt; mid) &#123;</span><br><span class="line">          add(A[j].z, A[j].cnt); j ++;</span><br><span class="line">        &#125;</span><br><span class="line">        A[i].ans += sum(A[i].z);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (i = left; i &lt; j; i ++)</span><br><span class="line">        add(A[i].z, -A[i].cnt);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="comment">// Input</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; K;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; A[i].x &gt;&gt; A[i].y &gt;&gt; A[i].z;</span><br><span class="line">        A[i].cnt = <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// Unique</span></span><br><span class="line">    sort(A, A + n, cmp1); ll multiple_count = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">if</span> (A[i] == A[i - <span class="number">1</span>]) &#123;</span><br><span class="line">            A[i].cnt = A[i - <span class="number">1</span>].cnt + <span class="number">1</span>;</span><br><span class="line">            multiple_count ++;</span><br><span class="line">            A[i - <span class="number">1</span>] = (Point) &#123;inf, inf, inf, inf&#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    sort(A, A + n, cmp1);</span><br><span class="line"><span class="comment">//    cout &lt;&lt; &quot;-----------------&quot; &lt;&lt; endl;</span></span><br><span class="line"><span class="comment">//    for (ll i = 0; i &lt; n - multiple_count; i ++)</span></span><br><span class="line"><span class="comment">//cout &lt;&lt; A[i].x &lt;&lt; &quot; &quot; &lt;&lt; A[i].y &lt;&lt; &quot; &quot; &lt;&lt; A[i].z &lt;&lt; &quot; &quot; &lt;&lt; A[i].cnt &lt;&lt; &quot; \t&quot;;</span></span><br><span class="line"><span class="comment">//  cout &lt;&lt; endl;</span></span><br><span class="line">    solve(<span class="number">0</span>, n - multiple_count);</span><br><span class="line"><span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">ans[A[i].ans + A[i].cnt - <span class="number">1</span>] += A[i].cnt;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>第五次，“我是专业的”的著名金牌OI教练解决了该问题（树状数组）</p><p>原因：在排序的过程中，对于区间：</p><p>$\text{left}:[1]: (1, 1, 1),[2]: (1,2,1),[3]:(3,1,3),[4]:(3,3,6);\\text{right}:[5]:(1,2,1),[6]:(2,4,3),[7]:(3,1,3),[8]:(3,3,6)$</p><p>在重新排序之后就会变为：</p><p>$[1]:(1,1,1), [5]:(1,2,1),[2]:(1,2,1),[6]:(2,4,3),[7]:(3,1,3),[3]:(3,1,3),[8]:(3,3,6),[4]:(3,3,6)$</p><p>这种排列方式显然就是错误的因为$2,5;~3,7;~4,8$这三组数据位置颠倒了。而解决这个问题的方式就是更正排序方式：</p><ol><li>将$y$作为第一排序关键字</li><li>将$z$作为第二排序关键字</li><li>==将$x$作为第三排序关键字==</li></ol><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> inf 1000000000</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">Point</span> &#123;</span></span><br><span class="line">    ll x, y, z, cnt;</span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> == (<span class="keyword">const</span> Point&amp; a, <span class="keyword">const</span> Point&amp; b) &#123;</span><br><span class="line">        <span class="keyword">return</span> (a.x == b.x) &amp;&amp; (a.y == b.y) &amp;&amp; (a.z == b.z);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">300005</span>;</span><br><span class="line"></span><br><span class="line">Point A[maxn];</span><br><span class="line">ll n, K, ord[maxn], f[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp2</span><span class="params">(ll x, ll y)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (A[x].y == A[y].y &amp;&amp; A[x].z == A[y].z) <span class="keyword">return</span> A[x].x &lt; A[y].x;</span><br><span class="line">    <span class="keyword">if</span> (A[x].y == A[y].y) <span class="keyword">return</span> A[x].z &lt; A[y].z;</span><br><span class="line">    <span class="keyword">return</span> A[x].y &lt; A[y].y;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">bool</span> <span class="title">cmp1</span><span class="params">(Point a, Point b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.x == b.x &amp;&amp; a.y == b.y) <span class="keyword">return</span> a.z &lt; b.z;</span><br><span class="line">  <span class="keyword">if</span> (a.x == b.x) <span class="keyword">return</span> a.y &lt; b.y;</span><br><span class="line">   <span class="keyword">return</span> a.x &lt; b.x;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">lb</span><span class="params">(ll i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">void</span> <span class="title">add</span><span class="params">(ll i, ll delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= K) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> ll <span class="title">sum</span><span class="params">(ll i)</span> </span>&#123;</span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 左闭右开</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">solve</span><span class="params">(ll left, ll right)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (right - left == <span class="number">1</span>) <span class="keyword">return</span>;</span><br><span class="line">    ll mid = (right + left) &gt;&gt; <span class="number">1</span>;</span><br><span class="line">    solve(left, mid); solve(mid, right);</span><br><span class="line">    <span class="comment">// 根据y的值对数组进行排序，和求逆序对时的构造离散化类似</span></span><br><span class="line"><span class="comment">// 即在这里，y是求逆序对当中的时序</span></span><br><span class="line"><span class="keyword">for</span> (ll i = left; i &lt; right; i ++)</span><br><span class="line">        ord[i] = i;</span><br><span class="line">    sort(ord + left, ord + right, cmp2);</span><br><span class="line">    <span class="comment">// 左边对右边的贡献</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i];</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid) add(A[k].z, A[k].cnt);</span><br><span class="line">        <span class="keyword">else</span> f[k] += sum(A[k].z);</span><br><span class="line">    &#125;</span><br><span class="line"><span class="comment">// Clear Binary Index Tree</span></span><br><span class="line">    <span class="keyword">for</span> (ll i = left; i &lt; right; i ++) &#123;</span><br><span class="line">        ll k = ord[i]; ord[i] = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (k &lt; mid)    add(A[k].z, (<span class="number">-1</span> * A[k].cnt));</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="comment">// Input</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; K;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; A[i].x &gt;&gt; A[i].y &gt;&gt; A[i].z;</span><br><span class="line">        A[i].cnt = <span class="number">1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// Unique</span></span><br><span class="line">    sort(A, A + n, cmp1); ll multiple_count = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++)</span><br><span class="line">        <span class="keyword">if</span> (A[i] == A[i - <span class="number">1</span>]) &#123;</span><br><span class="line">            A[i].cnt = A[i - <span class="number">1</span>].cnt + <span class="number">1</span>;</span><br><span class="line">            multiple_count ++;</span><br><span class="line">            A[i - <span class="number">1</span>] = (Point) &#123;inf, inf, inf, inf&#125;;</span><br><span class="line">        &#125;</span><br><span class="line">    sort(A, A + n, cmp1);</span><br><span class="line"><span class="comment">//    cout &lt;&lt; &quot;-----------------&quot; &lt;&lt; endl;</span></span><br><span class="line"><span class="comment">//    for (ll i = 0; i &lt; n - multiple_count; i ++)</span></span><br><span class="line"><span class="comment">//cout &lt;&lt; A[i].x &lt;&lt; &quot; &quot; &lt;&lt; A[i].y &lt;&lt; &quot; &quot; &lt;&lt; A[i].z &lt;&lt; &quot; &quot; &lt;&lt; A[i].cnt &lt;&lt; &quot; \t&quot;;</span></span><br><span class="line"><span class="comment">//cout &lt;&lt; endl;</span></span><br><span class="line">    solve(<span class="number">0</span>, n - multiple_count);</span><br><span class="line"><span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++) &#123;</span><br><span class="line">f[i] += A[i].cnt - <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n - multiple_count; i ++)</span><br><span class="line">        ans[f[i]] += A[i].cnt;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">0</span>; i &lt; n; i ++)</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;题目大意&quot;&gt;&lt;a href=&quot;#题目大意&quot; class=&quot;headerlink&quot; title=&quot;题目大意&quot;&gt;&lt;/a&gt;题目大意&lt;/h2&gt;&lt;p&gt;对于给遗传给定的序列：&lt;/p&gt;
&lt;script type=&quot;math/tex; mode=display&quot;&gt;
(x,y,z)_1, (x,y,z)_2, (x,y,z)_3, \cdots, (x,y,z)_n&lt;/script&gt;&lt;p&gt;求：&lt;/p&gt;
&lt;script type=&quot;math/tex; mode=display&quot;&gt;
\sum_{x_i &lt; x_j,~y_i &lt; y_j,~z_i&lt;z_j,~i ≠j}1&lt;/script&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="BIT" scheme="http://gyrojeff.moe/tags/BIT/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="CDQ" scheme="http://gyrojeff.moe/tags/CDQ/"/>
    
  </entry>
  
  <entry>
    <title>306-07-关系型容器</title>
    <link href="http://gyrojeff.moe/2020/02/28/306-07%E5%85%B3%E7%B3%BB%E5%9E%8B%E5%AE%B9%E5%99%A8/"/>
    <id>http://gyrojeff.moe/2020/02/28/306-07%E5%85%B3%E7%B3%BB%E5%9E%8B%E5%AE%B9%E5%99%A8/</id>
    <published>2020-02-28T15:33:21.000Z</published>
    <updated>2020-09-22T12:58:44.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Set，Multiset，Iterator"><a href="#Set，Multiset，Iterator" class="headerlink" title="Set，Multiset，Iterator"></a>Set，Multiset，Iterator</h2><hr><h3 id="Iterator：迭代器"><a href="#Iterator：迭代器" class="headerlink" title="Iterator：迭代器"></a>Iterator：迭代器</h3><p>我们可以发现所谓一些数据结构比如说数组和链表，它们都有一些相似的性质。我们看下面两个例子：</p><ol><li>数组：定义数组$int~a[10]$，第一个元素的指针为$a$，第二个元素的指针为$a+1$，第三个元素的指针为$a+2$，等等、</li><li>链表：对于一个链表$list\text{&lt;}int\text{&gt;}~mylist;$，它的储存方式是链式储存，内存里的地址不是连续的，而是分散的，它只能用$next$或者$last$来访问元素。</li></ol><p>为了统一这两种储存方式的指针，我们引入了一种更加高级的指针，叫做$iterator$，现在定义一个$iterator$：$std\text{::}set\text{&lt;}int\text{&gt;::}iterator~iter$，这种指针可以支持以下的操作：</p><ol><li>$iter\text{++}$   ：将$iter$指向下一个元素的地址</li><li>$iter-\hspace{0.2pt}-$ ：将$iter$指向上一个元素的地址</li><li>$*iter$：获得$iter$指针所指向地址所储存的值</li></ol><h2 id=""><a href="#" class="headerlink" title=""></a><a id="more"></a></h2><h3 id="Set-Multiset"><a href="#Set-Multiset" class="headerlink" title="Set / Multiset"></a>Set / Multiset</h3><p>$Set$是指集合，它有集合所拥有的性质：元素的唯一性。而$Multiset$则没有前面所说的性质，会存在形如：${0,0,1,1,2}$这样的集合。</p><p>这两种数据结构是默认会进行==升序排列==，用的是类似于平衡二叉搜索树。</p><p>以下是一种使用$iterator$的例子：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;set&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">set</span>&lt;<span class="keyword">int</span>&gt; s;</span><br><span class="line">    s.insert(<span class="number">2</span>); s.insert(<span class="number">1</span>); s.insert(<span class="number">10</span>);</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">set</span>&lt;<span class="keyword">int</span>&gt;::iterator iter = s.end();</span><br><span class="line">    iter --;</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">cout</span> &lt;&lt; *iter &lt;&lt; <span class="built_in">std</span>::<span class="built_in">endl</span>; <span class="comment">// 10</span></span><br><span class="line">    iter --;</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">cout</span> &lt;&lt; *iter &lt;&lt; <span class="built_in">std</span>::<span class="built_in">endl</span>; <span class="comment">// 2</span></span><br><span class="line">    iter --;</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">cout</span> &lt;&lt; *iter &lt;&lt; <span class="built_in">std</span>::<span class="built_in">endl</span>; <span class="comment">// 1</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>通过上面的例子，不难发现，$end()$指向的是==不存在于$set$==的一个地址，是最后一个元素后的一个地址。</p><p>注：</p><p>==几乎所有$set$的函数和返回值返回的都是$iterator$。==</p><p>所有的$lower_bound()$和$upper_bound()$都是遵循==左闭右开==，即==$[a,b)$==的形式</p><p>举例：</p><ol><li><p>对于==集合==${1,2,3,4,5,6,8,9}$</p><p>$<em>lower_bound(7) = </em>upper_bound(7) = 8$</p></li><li><p>对于==数组==${1,2,3,3,3,3,3,4}$</p><p>$<em>upper_bound(3) - </em>lower_bound(3) = count(3) = 5$</p></li><li><p>对于集合${1,2,3,4,5,6,7,8,9}$</p><p>$lower_bound(10) = upper_bound(10) = set.end()$</p></li></ol><h2 id="P1607-USACO09FEB-庙会班车Fair-Shuttle"><a href="#P1607-USACO09FEB-庙会班车Fair-Shuttle" class="headerlink" title="P1607 [USACO09FEB]庙会班车Fair Shuttle"></a>P1607 [USACO09FEB]庙会班车Fair Shuttle</h2><hr><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>逛逛集市，兑兑奖品，看看节目对农夫约翰来说不算什么，可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市，他们一定会筋疲力尽的。所以为了让奶牛们也能愉快地逛集市，约翰准备让奶牛们在集市上以车代步。但是，约翰木有钱，他租来的班车只能在集市上沿直线跑一次，而且只能停靠$N(1  ≤N≤20000)$个地点（所有地点都以1到N之间的一个数字来表示）。现在奶牛们分成$K(1≤K≤50000)$个小组，第i 组有$M_i(1  ≤M_i≤N)$头奶牛，他们希望从$S_i$跑到$T_i(1 ≤S_i&lt;T_i≤N)$。</p><p>由于班车容量有限，可能载不下所有想乘车的奶牛们，此时也允许小里的一部分奶牛分开乘坐班车。约翰经过调查得知班车的容量是$C(1≤C≤100)$，请你帮助约翰计划一个尽可能满足更多奶牛愿望的方案。</p><hr><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>对于这道题，很显然是一道贪心，而且我们必须将其考虑为有==反悔==机制的贪心。首先在每一站，进行一下的判断：</p><ol><li>将在车上的奶牛可以下车的下车</li><li>让所有在此站点上车的奶牛上车</li><li>如果超过数量，将最远目的地的奶牛赶下车</li></ol><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;set&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">500005</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 一组牛</span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">group</span> &#123;</span></span><br><span class="line">    ll s, t, m;</span><br><span class="line">    group() &#123;&#125;</span><br><span class="line">    group(ll s, ll t, ll m) : s(s), t(t), m(m) &#123;&#125;</span><br><span class="line">  <span class="comment">// set内部按照终点站顺序排序</span></span><br><span class="line">    <span class="keyword">friend</span> <span class="keyword">bool</span> <span class="keyword">operator</span> &lt; (<span class="keyword">const</span> group &amp;a, <span class="keyword">const</span> group &amp;b) &#123;</span><br><span class="line">        <span class="keyword">return</span> a.t &lt; b.t;</span><br><span class="line">    &#125;</span><br><span class="line">&#125; cows[maxn];</span><br><span class="line">ll k, n, c, sum_on_car, ans;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 在车上的牛的组</span></span><br><span class="line"><span class="built_in">multiset</span>&lt;group&gt; cow_set;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 按照起点站顺序排序</span></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(group a, group b)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (a.s == b.s) &#123;</span><br><span class="line">        <span class="keyword">if</span> (a.t == b.t) &#123;<span class="keyword">return</span> a.m &lt; b.m;&#125;</span><br><span class="line">        <span class="keyword">else</span> &#123;<span class="keyword">return</span> a.t &lt; b.t;&#125;</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;<span class="keyword">return</span> a.s &lt; b.s;&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">  <span class="comment">// 读</span></span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; k &gt;&gt; n &gt;&gt; c;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= k; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; cows[i].s &gt;&gt; cows[i].t &gt;&gt; cows[i].m;</span><br><span class="line">    sort(cows + <span class="number">1</span>, cows + <span class="number">1</span> + k, cmp);</span><br><span class="line">  <span class="comment">// 从第一站开始遍历上车</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>, j = <span class="number">0</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">multiset</span>&lt;group&gt;::iterator begin_iter = cow_set.begin();</span><br><span class="line">      <span class="comment">// 到站下车 (终点站顺序排序)</span></span><br><span class="line">        <span class="keyword">while</span> (begin_iter -&gt; t == i) &#123;</span><br><span class="line">            sum_on_car -= begin_iter -&gt; m;</span><br><span class="line">            cow_set.erase(begin_iter);</span><br><span class="line">            begin_iter = cow_set.begin();</span><br><span class="line">        &#125;</span><br><span class="line">      <span class="comment">// 全部上车</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> t = j + <span class="number">1</span>; t &lt;= k &amp;&amp; cows[t].s == i; t ++) &#123;</span><br><span class="line">            j ++;</span><br><span class="line">            cow_set.insert(cows[t]);</span><br><span class="line">            sum_on_car += cows[t].m;</span><br><span class="line">            ans += cows[t].m;</span><br><span class="line">        &#125;</span><br><span class="line">      <span class="comment">// 人数超标，删最远的牛</span></span><br><span class="line">        <span class="keyword">while</span> (sum_on_car &gt; c) &#123;</span><br><span class="line">            ll delta = sum_on_car - c;</span><br><span class="line">            <span class="built_in">multiset</span>&lt;group&gt;::iterator iter = cow_set.end();</span><br><span class="line">            iter --;</span><br><span class="line">            ll all_cow_farthest = iter -&gt; m;</span><br><span class="line">            cow_set.erase(iter);</span><br><span class="line">            <span class="keyword">if</span> (delta &gt;= all_cow_farthest) &#123;</span><br><span class="line">                sum_on_car -= all_cow_farthest;</span><br><span class="line">                ans -= all_cow_farthest;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                ll cow_tmp_s = iter -&gt; s, <span class="keyword">cow_tmp_t</span> = iter -&gt; t, cow_tmp_m = iter -&gt; m;</span><br><span class="line">                cow_set.insert(group(cow_tmp_s, <span class="keyword">cow_tmp_t</span>, all_cow_farthest - delta));</span><br><span class="line">                sum_on_car -= delta;</span><br><span class="line">                ans -= delta;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P2869-USACO07DEC-美食的食草动物Gourmet-Grazers"><a href="#P2869-USACO07DEC-美食的食草动物Gourmet-Grazers" class="headerlink" title="P2869 [USACO07DEC]美食的食草动物Gourmet Grazers"></a>P2869 [USACO07DEC]美食的食草动物Gourmet Grazers</h2><hr><h3 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h3><p>约翰的奶牛对食物越来越挑剔了。现在，商店有M 份牧草可供出售，奶牛食量很大，每份牧草仅能供一头奶牛食用。第i 份牧草的价格为Pi，口感为Qi。约翰一共有N 头奶牛，他要为每头奶牛订购一份牧草，第i 头奶牛要求它的牧草价格不低于Ai，口感不低于Bi。请问，约翰应该如何为每头奶牛选择牧草，才能让他花的钱最少？</p><hr><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>对奶牛的价格要求和草的价格要求进行排序，排序后可以得到如下：</p><script type="math/tex; mode=display">\begin {align}(A_1, B_1), (A_2, B_2), \cdots, (A_N, B_N),~A_i ≤ A_j, ~1 ≤ i < j ≤ N \\(P_1, Q_1), (P_2, Q_2), \cdots, (P_M, Q_M),~P_i ≤ P_j, ~1 ≤ i < j ≤ M\end {align}</script><p>从第一项开始遍历，若$(P<em>1, Q_1)$可以使得$A_x &lt; P_1 &lt; A</em>{x + 1}$，那么将$(B<em>1, 1), \cdots, (B_x, x)$放入$S$，因为这样可以将奶牛的需求按照品质排序，每次该牧草所给的奶牛的序号应该为$t$，其中$Q_t ≤ Q_1 &lt; Q</em>{t + 1}$，即$t = S.lower_bound(Q_1) - 1$，但是我们会发现这存在问题，因为$lower_bound$如果找不到，==会定位在比$Q_1$大的那个数上==，所以这里可以使用技巧：==将$S$进行降序排序（原来是升序）==，只需要==将每个数乘上$-1$即可==，==取出来的时候也乘$-1$==。对于其后考虑的牧草，可以发现$P_i ≥ P_1$（已经排好序了），所以在$S$中的奶牛只需要关心品质，无需关心价格。</p><p>综上所述我们可以发现是需要维护一个储存奶牛的$multiset$，这其中在判断草是否可以用有一个技巧：直接使用迭代器$std::multiset\text{&lt;}int\text{&gt;}::iterator~~iter = cow_set.lower_bound(Q_{i})$。对于这个迭代器，由于放入集合中的是降序排列，我们只需要操作迭代器就可以确定一个草可不可以用。现在我们假设：一个草的品质低于现在集合中奶牛所需的最低品质，很显然这个时候返回的$iter$是不在集合当中的（因为默认找更大的一个），此时一定有$iter == cow_set.end()$（根据$end()$的定义）。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;set&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"></span><br><span class="line">ll n, m;</span><br><span class="line"><span class="built_in">pair</span>&lt;ll, ll&gt; cow[maxn], grass[maxn];</span><br><span class="line"><span class="built_in">multiset</span>&lt;ll&gt; cow_set;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; cow[i].first &gt;&gt; cow[i].second;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= m; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; grass[i].first &gt;&gt; grass[i].second;</span><br><span class="line">    sort(cow + <span class="number">1</span>, cow + <span class="number">1</span> + n);</span><br><span class="line">    sort(grass + <span class="number">1</span>, grass + <span class="number">1</span> + m);</span><br><span class="line"></span><br><span class="line">    ll ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> grass_i = <span class="number">1</span>, cow_i = <span class="number">0</span>; grass_i &lt;= m; grass_i ++) &#123;</span><br><span class="line">        ll now_grass_cost = grass[grass_i].first;</span><br><span class="line">        ll now_grass_quality = grass[grass_i].second;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = cow_i + <span class="number">1</span>; i &lt;= n &amp;&amp; cow[i].first &lt;= now_grass_cost; i ++) &#123;</span><br><span class="line">          <span class="comment">// 符号：将序排列</span></span><br><span class="line">            cow_set.insert(-cow[i].second);</span><br><span class="line">            cow_i ++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">set</span>&lt;ll&gt;::iterator iter = cow_set.lower_bound(-now_grass_quality);</span><br><span class="line"> <span class="comment">// 草品质达到</span></span><br><span class="line">      <span class="keyword">if</span> (iter != cow_set.end()) &#123;</span><br><span class="line">            cow_set.erase(iter);</span><br><span class="line">            ans += now_grass_cost;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">  <span class="comment">// 如果还有牛剩下来 -&gt; 这些牛的要求没有被满足 -&gt; 答案为-1 </span></span><br><span class="line">    <span class="keyword">if</span> (!cow_set.empty()) ans = <span class="number">-1</span>;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P5021-赛道修建-NOIP2018-D1T3"><a href="#P5021-赛道修建-NOIP2018-D1T3" class="headerlink" title="P5021 赛道修建[NOIP2018-D1T3]"></a>P5021 赛道修建[NOIP2018-D1T3]</h2><h3 id="题目描述-1"><a href="#题目描述-1" class="headerlink" title="题目描述"></a>题目描述</h3><p>$C$城将要举办一系列的赛车比赛。在比赛前，需要在城内修建$m$条赛道。</p><p>$C$城一共有$n$个路口，这些路口编号为$1,2,…,n$，有 n−1n-1n−1 条适合于修建赛道的双向通行的道路，每条道路连接着两个路口。其中，第 iii 条道路连接的两个路口编号为$a_i$和$b_i$，该道路的长度为$l_i$。借助这 n−1n-1n−1 条道路，从任何一个路口出发都能到达其他所有的路口。</p><p>一条赛道是一组互不相同的道路$e_1,e_2,…,e_k$，满足可以从某个路口出发，依次经过 道路$e_1,e_2,…,e_k$（每条道路经过一次，不允许调头）到达另一个路口。一条赛道的长度等于经过的各道路的长度之和。为保证安全，要求每条道路至多被一条赛道经过。</p><p>目前赛道修建的方案尚未确定。你的任务是设计一种赛道修建的方案，使得修建的$m$条赛道中长度最小的赛道长度最大$d$（即$m$条赛道中最短赛道的长度尽可能大）</p><h3 id="输入格式"><a href="#输入格式" class="headerlink" title="输入格式"></a>输入格式</h3><p>输入文件第一行包含两个由空格分隔的正整数$n,m$，分别表示路口数及需要修建的赛道数。</p><p>接下来$n-1$行，第$i$行包含三个正整数$a_i,b_i,l_i$，表示第$i$条适合于修建赛道的道 路连接的两个路口编号及道路长度。保证任意两个路口均可通过这$n-1$条道路相互到达。每行中相邻两数之间均由一个空格分隔。</p><h3 id="输出格式"><a href="#输出格式" class="headerlink" title="输出格式"></a>输出格式</h3><p>输出共一行，包含一个整数，表示长度最小的赛道长度的最大值。</p><h3 id="题解-2"><a href="#题解-2" class="headerlink" title="题解"></a>题解</h3><p>首先可以有题目的条件得到这是一颗树（所有的路口都互相连通），而我们就要考虑的问题是最短的赛道，最长可以达到的长度。由于这里暴力枚举肯定会超时，所以采用二分答案的策略。</p><p>接下来就是考虑二分的目标，很明显，应该二分$m$。</p><p>考虑二分时的$check$函数：</p><p>考虑下面这种转移的形式，对于一个节点：</p><img src="/2020/02/28/306-07%E5%85%B3%E7%B3%BB%E5%9E%8B%E5%AE%B9%E5%99%A8/image-20190727195837762.png" class=""><p>对于每一个节点，我们想要把其子树加起来可以达到$m$的去掉（$dfs$返回的是去不掉的最长路径值），可以两两匹配或者直接去掉。所以这个时候，我们需要一种数据结构支持下面两种操作：</p><ol><li>可以进行排序</li><li>可以进行$lower_bound$操作进行查找</li></ol><p>由此，我们想到了使用$stl$中的$multiset$这种容器。</p><p>下面为AC代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;set&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line">ll head[maxn];</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span></span><br><span class="line">    ll to, next, w;</span><br><span class="line">&#125; g[maxn*<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line">ll ecnt = <span class="number">2</span>, t = <span class="number">0</span>, num = <span class="number">0</span>, n, m;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(ll u, ll v, ll w)</span> </span>&#123;</span><br><span class="line">    g[ecnt] = (edge) &#123;v, head[u], w&#125;;</span><br><span class="line">    head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function">ll <span class="title">dfs</span><span class="params">(ll u, ll p)</span> </span>&#123;</span><br><span class="line">    <span class="built_in">multiset</span>&lt;ll&gt; s; </span><br><span class="line">    <span class="keyword">for</span> (ll e = head[u]; e != <span class="number">0</span>; e = g[e].next) &#123;</span><br><span class="line">        ll v = g[e].to;</span><br><span class="line">        <span class="keyword">if</span> (v != p) &#123;</span><br><span class="line">            ll alpha = dfs(v, u) + g[e].w;</span><br><span class="line">            <span class="keyword">if</span> (alpha &lt; t)</span><br><span class="line">                s.insert(alpha);</span><br><span class="line">            <span class="keyword">else</span></span><br><span class="line">                num --;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    ll ret = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (!s.empty()) &#123;</span><br><span class="line">        <span class="built_in">multiset</span>&lt;ll&gt;::iterator iter_1 = s.begin();</span><br><span class="line">        ll x = *iter_1; s.erase(iter_1);</span><br><span class="line">        <span class="built_in">multiset</span>&lt;ll&gt;::iterator iter_2 = s.lower_bound(t - x);</span><br><span class="line">        <span class="keyword">if</span> (iter_2 != s.end())</span><br><span class="line">            s.erase(iter_2), num --;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            ret = max(ret, x);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ret;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    ll sum = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (ll i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        ll u, v, w; <span class="built_in">cin</span> &gt;&gt; u &gt;&gt; v &gt;&gt; w;</span><br><span class="line">        add_edge(u, v, w); add_edge(v, u, w);</span><br><span class="line">        sum += w;</span><br><span class="line">    &#125;</span><br><span class="line">    ll r = sum / m + <span class="number">1</span>;</span><br><span class="line">    ll l = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (r - l &gt; <span class="number">1</span>) &#123;</span><br><span class="line">        t = (r + l) / <span class="number">2</span>;</span><br><span class="line">        num = m;</span><br><span class="line">        dfs(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">if</span> (num &gt; <span class="number">0</span>) </span><br><span class="line">            r = t;</span><br><span class="line">        <span class="keyword">else</span></span><br><span class="line">            l = t;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; l &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="ACOJ-1664-纯种奶牛"><a href="#ACOJ-1664-纯种奶牛" class="headerlink" title="ACOJ-1664 纯种奶牛"></a>ACOJ-1664 纯种奶牛</h2><h3 id="题目大意"><a href="#题目大意" class="headerlink" title="题目大意"></a>题目大意</h3><p>n头奶牛排成了一条直线，其中第iii头的奶牛品种为$a_{i}$。约翰希望在队伍里选出一段尽量长的区间，使得这段区间里的所有奶牛都是相同品种的。为此他可以淘汰一些品种的奶牛，所谓淘汰一个品种的奶牛，就是让该品种的奶牛全部离开队伍，而剩余的奶牛仍然保持在队伍里的顺序。</p><p>约翰最多可以淘汰k种奶牛，请问约翰应该淘汰哪些品种的奶牛，然后选择哪一段区间，才能让纯种奶牛的区间尽量长？</p><h3 id="题解-3"><a href="#题解-3" class="headerlink" title="题解"></a>题解</h3><p>这道题和Jessica’s Reading Problem非常类似，可以被称作为“大不小步法”。即可以有两个指针用来维护一个区间，而这个区间的维护条件就是确保这个区间始终有不多于$k+1$种元素，元素越多越好，而每次更新答案的方法就是更新这个区间的第一个元素在这个区间的元素数量，这样每一种元素其实都可以被更新到。而之所以要有$k+1$种元素，是因为可以去掉$k$个元素使得它们连续，那么换而言之就是有一个区间有$k+1$个元素，而数量就是其中任意一个元素的数量（最大最优）。而中间过程中用来维护元素个数的类似于桶的数据结构，就可以使用$stl$的$map$来完成（因为数据会达到$1e9$所以数组肯定会爆炸）</p><p>AC代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;map&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">typedef</span> <span class="keyword">long</span> <span class="keyword">long</span> ll;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">1000005</span>;</span><br><span class="line">ll a[maxn];</span><br><span class="line"><span class="keyword">int</span> n, k;</span><br><span class="line"><span class="keyword">int</span> kind = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="built_in">map</span>&lt;ll, <span class="keyword">int</span>&gt; cnt;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">inc</span><span class="params">(<span class="keyword">int</span> &amp;j)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (cnt[a[j]]++ == <span class="number">0</span>)</span><br><span class="line">kind ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dec</span><span class="params">(<span class="keyword">int</span> &amp;j)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (--cnt[a[j]] == <span class="number">0</span>)</span><br><span class="line">kind --;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">adv</span><span class="params">(<span class="keyword">int</span> &amp;i)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (--cnt[a[i ++]] == <span class="number">0</span>)</span><br><span class="line">kind --;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; n &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line"><span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line"><span class="keyword">int</span> j = <span class="number">1</span>; <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; adv(i)) &#123;</span><br><span class="line"><span class="keyword">while</span> (j &lt;= n) &#123;</span><br><span class="line">inc(j);</span><br><span class="line"><span class="keyword">if</span> (kind &gt; k + <span class="number">1</span>) &#123;</span><br><span class="line">dec(j); <span class="keyword">break</span>;</span><br><span class="line">&#125; <span class="keyword">else</span> j ++;</span><br><span class="line">&#125;</span><br><span class="line">ans = max(ans, cnt[a[i]]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;Set，Multiset，Iterator&quot;&gt;&lt;a href=&quot;#Set，Multiset，Iterator&quot; class=&quot;headerlink&quot; title=&quot;Set，Multiset，Iterator&quot;&gt;&lt;/a&gt;Set，Multiset，Iterator&lt;/h2&gt;&lt;hr&gt;
&lt;h3 id=&quot;Iterator：迭代器&quot;&gt;&lt;a href=&quot;#Iterator：迭代器&quot; class=&quot;headerlink&quot; title=&quot;Iterator：迭代器&quot;&gt;&lt;/a&gt;Iterator：迭代器&lt;/h3&gt;&lt;p&gt;我们可以发现所谓一些数据结构比如说数组和链表，它们都有一些相似的性质。我们看下面两个例子：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;数组：定义数组$int~a[10]$，第一个元素的指针为$a$，第二个元素的指针为$a+1$，第三个元素的指针为$a+2$，等等、&lt;/li&gt;
&lt;li&gt;链表：对于一个链表$list\text{&amp;lt;}int\text{&amp;gt;}~mylist;$，它的储存方式是链式储存，内存里的地址不是连续的，而是分散的，它只能用$next$或者$last$来访问元素。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;为了统一这两种储存方式的指针，我们引入了一种更加高级的指针，叫做$iterator$，现在定义一个$iterator$：$std\text{::}set\text{&amp;lt;}int\text{&amp;gt;::}iterator~iter$，这种指针可以支持以下的操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;$iter\text{++}$   ：将$iter$指向下一个元素的地址&lt;/li&gt;
&lt;li&gt;$iter-\hspace{0.2pt}-$ ：将$iter$指向上一个元素的地址&lt;/li&gt;
&lt;li&gt;$*iter$：获得$iter$指针所指向地址所储存的值&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;&quot;&gt;&lt;a href=&quot;#&quot; class=&quot;headerlink&quot; title=&quot;&quot;&gt;&lt;/a&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
    <category term="Map" scheme="http://gyrojeff.moe/tags/Map/"/>
    
    <category term="Set" scheme="http://gyrojeff.moe/tags/Set/"/>
    
    <category term="STL" scheme="http://gyrojeff.moe/tags/STL/"/>
    
  </entry>
  
  <entry>
    <title>306-03-逆序对的应用</title>
    <link href="http://gyrojeff.moe/2020/02/28/306-03-%E9%80%86%E5%BA%8F%E5%AF%B9%E7%9A%84%E5%BA%94%E7%94%A8/"/>
    <id>http://gyrojeff.moe/2020/02/28/306-03-%E9%80%86%E5%BA%8F%E5%AF%B9%E7%9A%84%E5%BA%94%E7%94%A8/</id>
    <published>2020-02-28T15:28:33.000Z</published>
    <updated>2020-09-22T12:58:40.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="P1966-火柴排队"><a href="#P1966-火柴排队" class="headerlink" title="P1966 火柴排队"></a>P1966 火柴排队</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>涵涵有两盒火柴，每盒装有n根火柴，每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列， 同一列火柴的高度互不相同， 两列火柴之间的距离定义为：$∑(a_i−b_i)^2$</p><p>其中$a_i$表示第一列火柴中第i个火柴的高度，$b_i$表示第二列火柴中第i个火柴的高度。</p><p>每列火柴中相邻两根火柴的位置都可以交换，请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离，最少需要交换多少次？如果这个数字太大，请输出这个最小交换次数对 $99,999,997$取模的结果。</p><a id="more"></a><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>42 3 1 43 2 1 4</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>1</pre></div></div><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#2：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>41 3 4 21 7 2 4</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#2：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>2</pre></div></div><h3 id="题解"><a href="#题解" class="headerlink" title="题解"></a>题解</h3><p>可以证明当两个数列都是经过排序之后的数列可以使得$\sum(a_i-b_i)^2$取到最小，</p><p>根据上面的结论，就是说如果对于数列${a_n}, {b_n}$：</p><script type="math/tex; mode=display">\begin{aligned}    a_1,~a_2,~a_3,~\cdots,~a_{n-1},~a_n \\b_1,~b_2,~b_3,~\cdots,~b_{n-1},~b_n\end{aligned}</script><p>对它们的$id$排序之后，原数组排序的过程中相当于消除逆序对，但是本来的$id$是正序的，对于这个过程是对$id$增加逆序对的数量。可以说就因该是当$a$数组对于$b$数组想要移动到一模一样所需要花的时间。但是如何求出这个步骤是一个值得讨论的问题：</p><p>首先定于$q[a[i]] = b[i]$，最终的目标是$a[i]=b[i] = t$，即$q[t] = t$。可以发现终极目标就是将$q$数组进行排序所需要的次数是多少，即求$q$的逆序对的个数。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> P = <span class="number">99999997</span>;</span><br><span class="line"><span class="keyword">int</span> n;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">node</span> &#123;</span></span><br><span class="line">    <span class="keyword">int</span> id, val;</span><br><span class="line">&#125; a[maxn], b[maxn];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> T[maxn], m[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">lb</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">cmp</span><span class="params">(node x, node y)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">return</span> x.val &lt; y.val;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add</span><span class="params">(<span class="keyword">int</span> i, <span class="keyword">int</span> delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= n) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">sum</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> rtn = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        rtn += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> rtn;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; a[i].val;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; b[i].val;</span><br><span class="line">        a[i].id = b[i].id = i;</span><br><span class="line">    &#125;</span><br><span class="line">    sort(a + <span class="number">1</span>, a + <span class="number">1</span> + n, cmp);</span><br><span class="line">    sort(b + <span class="number">1</span>, b + <span class="number">1</span> + n, cmp);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        m[a[i].id] = b[i].id;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        add(m[i], <span class="number">1</span>);</span><br><span class="line">        ans = (ans + i - sum(m[i])) % P;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P2344-奶牛抗议"><a href="#P2344-奶牛抗议" class="headerlink" title="P2344 奶牛抗议"></a>P2344 奶牛抗议</h2><h3 id="题目描述-1"><a href="#题目描述-1" class="headerlink" title="题目描述"></a>题目描述</h3><p><p>约翰家的N 头奶牛正在排队游行抗议。一些奶牛情绪激动，约翰测算下来，排在第i 位的奶牛的理智度为Ai，数字可正可负。</p></p><p><p>约翰希望奶牛在抗议时保持理性，为此，他打算将这条队伍分割成几个小组，每个抗议小组的理智度之和必须大于或等于零。奶牛的队伍已经固定了前后顺序，所以不能交换它们的位置，所以分在一个小组里的奶牛必须是连续位置的。除此之外，分组多少组，每组分多少奶牛，都没有限制。</p></p><p><p>约翰想知道有多少种分组的方案，由于答案可能很大，只要输出答案除以1000000009 的余数即可。</p></p><h3 id="题解："><a href="#题解：" class="headerlink" title="题解："></a>题解：</h3><p>方程：</p><script type="math/tex; mode=display">f(i) = \sum_{0≤j<i,~\sum_{t = j + 1}^i a[t] ≥0}f(j), ~f(0)=1</script><p>时间复杂度：$O(n^3)$，使用前缀和优化：</p><script type="math/tex; mode=display">f(i) = \sum_{0≤j<i,~s[i]-s[j] ≥0}f(j), ~f(0)=1</script><p>时间复杂度：$O(n^2)$，使用树状数组存$f$，其中下标为$s$。</p><p>对于$s$数组需要使用离散化，并且$0$要加入离散化的过程，因为$f(0)=1$。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> P = <span class="number">1000000009</span>;</span><br><span class="line"><span class="keyword">int</span> n, a[maxn],s[maxn];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> T[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">lb</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_sum</span><span class="params">(<span class="keyword">int</span> i, <span class="keyword">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="comment">// 由于数组的大小加了1，所以要n + 1</span></span><br><span class="line">    <span class="keyword">while</span> (i &lt;= n + <span class="number">1</span>) &#123;</span><br><span class="line">        T[i] = (T[i] + d) % P;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">query_sum</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ans = (ans + T[i]) % P;</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; a[i];</span><br><span class="line">        s[i] = s[i<span class="number">-1</span>] + a[i];</span><br><span class="line">        a[i] = s[i];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="comment">// 对s进行离散化</span></span><br><span class="line">    sort(a, a + n + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i &lt;= n; i ++)</span><br><span class="line">        s[i]=lower_bound(a, a + n + <span class="number">1</span>, s[i]) - a + <span class="number">1</span>;</span><br><span class="line">    <span class="comment">// 设置f[0] = 1, 此处的s[0]表示在原数组中第0号元素在离散化过的数组中的位置</span></span><br><span class="line">    add_sum(s[<span class="number">0</span>], <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">int</span> ans = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        ans = query_sum(s[i]);</span><br><span class="line">        add_sum(s[i], ans);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="built_in">cout</span> &lt;&lt; ans &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="BZOJ-1782-奶牛散步-P2982-USACO10FEB"><a href="#BZOJ-1782-奶牛散步-P2982-USACO10FEB" class="headerlink" title="BZOJ-1782 : 奶牛散步/P2982 [USACO10FEB]"></a>BZOJ-1782 : 奶牛散步/P2982 [USACO10FEB]</h2><h3 id="题目描述-2"><a href="#题目描述-2" class="headerlink" title="题目描述"></a>题目描述</h3><p>约翰有n个牧场，编号为1到n。它们之间有n−1条道路，每条道路连接两个牧场，通过这些道路，所有牧场都是连通的。</p><p>1号牧场里有个大牛棚，里面有n头奶牛。约翰会把它们放出来散步。奶牛按编号顺序出发，首先出发的是第一头奶牛，等它到达了目的地后，第二头奶牛才会出发，之后也以此类推。每头奶牛的目的地都不同，其中第iii头奶牛的目的地是$t_i$号牧场。假如编号较大的奶牛，在经过一座牧场的时候，遇到了一头编号较小的奶牛停在那里散步，就要和它打个招呼。请你统计一下，每头奶牛要和多少编号比它小的奶牛打招呼。</p><h3 id="题解-1"><a href="#题解-1" class="headerlink" title="题解"></a>题解</h3><p>首先这道题可以这样理解：</p><p>所有的奶牛从$1$号到$n$号依次离开出发到各自的牧场$t_i$，在经过的道路上如果遇到编号比自己小的牛打招呼，统计总共打多少次招呼。由于编号从小到大，所以只要路径上有牛就肯定会打招呼。</p><p>至此，题目的要求的就是对于每头牛，统计在去的路径上有多少头牛。</p><p>定义一个农场编号与牛编号的映射关系：$cow[t[i]] = i$。</p><p>在$dfs$整张图的过程中，我们会发现</p><ul><li>从根节点开始，对树进行深度优先遍历。</li><li>当进行到节点 i 时，有：</li><li>i 的祖先们 Father[i] 已经被访问过了，但还没有退出。</li><li>其他节点或者已经被访问过并退出了，或者还没有被访问。</li><li>那么需要一个数据结构，维护那些<strong>已经被访问过了，但还没有退出的点权</strong>，支持查询<strong>小于特定值的元素的数量</strong> 。</li><li>可以使用<strong>树状数组</strong>。（使用奶牛编号的下标标记）</li></ul><p>所以有以下的代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">100005</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, p[maxn], head[maxn], cow[maxn], T[maxn], ans[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">lb</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">modify</span><span class="params">(<span class="keyword">int</span> i, <span class="keyword">int</span> delta)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= n) &#123;</span><br><span class="line">        T[i] += delta;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">query</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> ret = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span> (i &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        ret += T[i];</span><br><span class="line">        i -= lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> ret;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">edge</span> &#123;</span></span><br><span class="line">    <span class="keyword">int</span> to, next;</span><br><span class="line">&#125; g[maxn * <span class="number">2</span>];</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> ecnt = <span class="number">2</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">add_edge</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> v)</span> </span>&#123;</span><br><span class="line">    g[ecnt] = (edge) &#123;v, head[u]&#125;;</span><br><span class="line">    head[u] = ecnt ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">dfs</span><span class="params">(<span class="keyword">int</span> u, <span class="keyword">int</span> fa)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> current = cow[u];</span><br><span class="line">  <span class="comment">// 这个头牛的答案就是查询：树状数组当中编号比它小的，在路径上的个数和</span></span><br><span class="line">    ans[current] = query(current);</span><br><span class="line">  <span class="comment">// 刚刚进入这个节点(及其子树)，所以把这个节点加入树状数组</span></span><br><span class="line">    modify(current, <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> e = head[u]; e != <span class="number">0</span>; e = g[e].next)</span><br><span class="line">        <span class="keyword">if</span> (g[e].to != fa)</span><br><span class="line">            dfs(g[e].to, u);</span><br><span class="line">  <span class="comment">// 即将退出该节点，再也不会访问到，所以将其从树状数组中删除</span></span><br><span class="line">    modify(current, <span class="number">-1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">cin</span> &gt;&gt; n;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt; n; i ++) &#123;</span><br><span class="line">        <span class="keyword">int</span> a, b; <span class="built_in">cin</span> &gt;&gt; a &gt;&gt; b;</span><br><span class="line">        add_edge(a, b); add_edge(b, a);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cin</span> &gt;&gt; p[i];</span><br><span class="line">        cow[p[i]] = i;</span><br><span class="line">    &#125;</span><br><span class="line">    dfs(<span class="number">1</span>, <span class="number">0</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="built_in">cout</span> &lt;&lt; ans[i] &lt;&lt; <span class="built_in">endl</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="P3988-SHOI2013-发牌"><a href="#P3988-SHOI2013-发牌" class="headerlink" title="P3988 [SHOI2013]发牌"></a>P3988 [SHOI2013]发牌</h2><h3 id="题目描述-3"><a href="#题目描述-3" class="headerlink" title="题目描述"></a>题目描述</h3><p>在一些扑克游戏里，如德州扑克，发牌是有讲究的。一般称呼专业的发牌手为荷官。荷官在发牌前，先要销牌（burn card）。所谓销牌，就是把当前在牌库顶的那一张牌移动到牌库底，它用来防止玩家猜牌而影响游戏。</p><p>假设一开始，荷官拿出了一副新牌，这副牌有N 张不同的牌，编号依次为1到N。由于是新牌，所以牌是按照顺序排好的，从牌库顶开始，依次为1,  2,……直到N，N 号牌在牌库底。为了发完所有的牌，荷官会进行N 次发牌操作，在第i 次发牌之前，他会连续进行Ri次销牌操作，  Ri由输入给定。请问最后玩家拿到这副牌的顺序是什么样的？</p><p>举个例子，假设N = 4，则一开始的时候，牌库中牌的构成顺序为{1, 2, 3, 4}。</p><p>假设R1=2，则荷官应该连销两次牌，将1 和2 放入牌库底，再将3 发给玩家。目前牌库中的牌顺序为{4, 1, 2}。</p><p>假设R2=0，荷官不需要销牌，直接将4 发给玩家，目前牌库中的牌顺序为{1,2}。</p><p>假设R3=3，则荷官依次销去了1, 2, 1，再将2 发给了玩家。目前牌库仅剩下一张牌1。</p><p>假设R4=2，荷官在重复销去两次1 之后，还是将1 发给了玩家，这是因为1 是牌库中唯一的一张牌。</p><h3 id="输入输出格式"><a href="#输入输出格式" class="headerlink" title="输入输出格式"></a>输入输出格式</h3><p><strong>输入格式：</strong></p><p>第1 行，一个整数N，表示牌的数量。</p><p>第2 行到第N + 1 行，在第i + 1 行，有一个整数Ri，0&lt;=Ri&lt;N</p><p><strong>输出格式：</strong></p><p>第1 行到第N行：第i 行只有一个整数，表示玩家收到的第i 张牌的编号。</p><div class="am-g"><div class="am-u-md-6 copy-region"><strong>输入样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>42032</pre></div><div class="am-u-md-6 copy-region"><strong>输出样例#1：</strong><a class="am-badge am-radius lg-bg-orange sample-copy">复制</a><pre>3421</pre></div></div><h3 id="题解-2"><a href="#题解-2" class="headerlink" title="题解"></a>题解</h3><p>维护一个数组，其中存的是每张牌是否还在牌库当中，若在，则值为$1$，反之，值为$0$。</p><p>每次摸牌，先销牌$s$张就是在剩下的$m$张牌中往后寻找$s$张牌就是了，如果还未找到$s$就已经为原状态的最后一张了，其实只需要进行对$m$的牌数进行取模，其实这个想法非常好理解，因为销牌的这个过程是滚动的。</p><p>所以我们定义$r_0$为原来的找牌的“指针”，$r_t$为找到牌的指针，会有下式：</p><script type="math/tex; mode=display">r_t = (s + r_0) \mod m</script><p>现在，我们来思考一下$r_t$的意义，其实它就是说剩下的牌中（牌的先后位置关系始终未变，变的是找牌的指针）第$r_t$张，也就是说我们要找到要维护的数组当中前缀和为$r_t$的那个位置就是第$i$张牌的位置，即第$i$个答案。</p><p>从上述的表述可以理解：我们需要维护一个<strong>树状数组</strong>，并<strong>二分答案</strong>。</p><p>但是其实有一个比二分答案更为简单的做法，就是模拟$lb$通过二分的方法访问$T[]$来得到位置，时间复杂度仅为$O(\log n)$，而不是$O(\log^2n)$。</p><p>代码：</p><figure class="highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxn = <span class="number">700005</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> maxx = <span class="number">1</span> &lt;&lt; <span class="number">20</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> n, T[maxn];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">inline</span> <span class="keyword">int</span> <span class="title">lb</span><span class="params">(<span class="keyword">int</span> i)</span> </span>&#123; <span class="keyword">return</span> i &amp; (-i); &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">query</span><span class="params">(<span class="keyword">int</span> x)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">int</span> pos = <span class="number">0</span>;</span><br><span class="line">  <span class="comment">// 第一次查询的区间最大，其后每次减半，相当于二分，但这里访问T数组的时间复杂度为O(1)，故时间复杂度为O(log n)而不是O(log^2 n)</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = maxx; i &gt; <span class="number">0</span>; i &gt;&gt;= <span class="number">1</span>) &#123;</span><br><span class="line">      <span class="comment">// 更新位置</span></span><br><span class="line">        <span class="keyword">int</span> j = i + pos;</span><br><span class="line">      <span class="comment">// 整个过程相当于在进行lb，所以x代表直到pos的前缀和与原来所求的差值，即距query目标还差的一部分</span></span><br><span class="line">        <span class="keyword">if</span> (j &lt;= n &amp;&amp; T[j] &lt;= x) &#123;</span><br><span class="line">            pos = j;</span><br><span class="line">            x -= T[j];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> pos + <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">modify</span><span class="params">(<span class="keyword">int</span> i, <span class="keyword">int</span> d)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">while</span> (i &lt;= n) &#123;</span><br><span class="line">        T[i] += d;</span><br><span class="line">        i += lb(i);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    <span class="comment">// O(n)时间建树状数组，原因是a[i]=1</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i ++)</span><br><span class="line">        T[i] = lb(i);</span><br><span class="line">    <span class="keyword">int</span> r = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">int</span> m = n; m &gt; <span class="number">0</span>; m --) &#123;</span><br><span class="line">        <span class="keyword">int</span> s; <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;s);</span><br><span class="line">        r = (r + s) % m;</span><br><span class="line">      <span class="comment">// 在树状数组当中查询值为r的位置，时间复杂度为O(n)</span></span><br><span class="line">        <span class="keyword">int</span> pos = query(r);</span><br><span class="line">      <span class="comment">// 由于这张牌被发掉了，所以应该将这张牌从树状数组当中移除</span></span><br><span class="line">        modify(pos, <span class="number">-1</span>);</span><br><span class="line">      <span class="comment">// 答案就为这个位置编号</span></span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, pos);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>PDF:<br><div class="pdfobject-container" data-target="file.pdf" data-height="500px"></div></p>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;P1966-火柴排队&quot;&gt;&lt;a href=&quot;#P1966-火柴排队&quot; class=&quot;headerlink&quot; title=&quot;P1966 火柴排队&quot;&gt;&lt;/a&gt;P1966 火柴排队&lt;/h2&gt;&lt;h3 id=&quot;题目描述&quot;&gt;&lt;a href=&quot;#题目描述&quot; class=&quot;headerlink&quot; title=&quot;题目描述&quot;&gt;&lt;/a&gt;题目描述&lt;/h3&gt;&lt;p&gt;涵涵有两盒火柴，每盒装有n根火柴，每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列， 同一列火柴的高度互不相同， 两列火柴之间的距离定义为：$∑(a_i−b_i)^2$&lt;/p&gt;
&lt;p&gt;其中$a_i$表示第一列火柴中第i个火柴的高度，$b_i$表示第二列火柴中第i个火柴的高度。&lt;/p&gt;
&lt;p&gt;每列火柴中相邻两根火柴的位置都可以交换，请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离，最少需要交换多少次？如果这个数字太大，请输出这个最小交换次数对 $99,999,997$取模的结果。&lt;/p&gt;</summary>
    
    
    
    <category term="OI" scheme="http://gyrojeff.moe/categories/OI/"/>
    
    
    <category term="OI" scheme="http://gyrojeff.moe/tags/OI/"/>
    
    <category term="BIT" scheme="http://gyrojeff.moe/tags/BIT/"/>
    
    <category term="Algorithm" scheme="http://gyrojeff.moe/tags/Algorithm/"/>
    
    <category term="C++" scheme="http://gyrojeff.moe/tags/C/"/>
    
  </entry>
  
  <entry>
    <title>UIKit, AppKit等类的进程处理</title>
    <link href="http://gyrojeff.moe/2020/02/28/UIKit-AppKit%E7%AD%89%E7%B1%BB%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%A4%84%E7%90%86/"/>
    <id>http://gyrojeff.moe/2020/02/28/UIKit-AppKit%E7%AD%89%E7%B1%BB%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%A4%84%E7%90%86/</id>
    <published>2020-02-28T13:08:29.000Z</published>
    <updated>2020-09-14T23:56:23.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Overview"><a href="#Overview" class="headerlink" title="Overview"></a>Overview</h2><p>The Main Thread Checker is a standalone tool for Swift and C languages that detects invalid usage of AppKit, UIKit, and other APIs on a background thread. Updating UI on a thread other than the main thread is a common mistake that can result in missed UI updates, visual defects, data corruptions, and crashes.</p><a id="more"></a><h3 id="How-the-Main-Thread-Checker-Works"><a href="#How-the-Main-Thread-Checker-Works" class="headerlink" title="How the Main Thread Checker Works"></a>How the Main Thread Checker Works</h3><p>At app launch, the Main Thread Checker dynamically replaces the implementations of methods that should only be called on the main thread with a version that prepends the check. Methods known to be safe for use on background threads are excluded from this check.</p><p>Note</p><p>Unlike other code diagnostic tools, the Main Thread Checker doesn’t require recompilation, and can be used with existing binaries. You can run it on a macOS app without the Xcode debugger, such as on a continuous integration system, by injecting the dynamic library file located at <code>/Applications/Xcode.app/Contents/Developer/usr/lib/libMainThreadChecker.dylib</code>.</p><h3 id="Performance-Impact"><a href="#Performance-Impact" class="headerlink" title="Performance Impact"></a>Performance Impact</h3><p>The performance impact of the Main Thread Checker is minimal, with a 1–2% CPU overhead and additional process launch time of &lt;0.1 seconds.</p><p>Because of its minimal performance overhead, the Main Thread Checker is automatically enabled when you run your app with the Xcode debugger. </p><h3 id="Updating-UI-from-a-Completion-Handler"><a href="#Updating-UI-from-a-Completion-Handler" class="headerlink" title="Updating UI from a Completion Handler"></a>Updating UI from a Completion Handler</h3><p>Long-running tasks such as networking are often executed in the background, and provide a completion handler to signal completion. Attempting to read or update the UI from a completion handler may cause problems.</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> task = <span class="type">URLSession</span>.shared.dataTask(with: url) &#123; (data, response, error) <span class="keyword">in</span></span><br><span class="line">   <span class="keyword">if</span> <span class="keyword">let</span> data = data &#123;      </span><br><span class="line">      <span class="keyword">self</span>.label.text = <span class="string">&quot;\(data.count) bytes downloaded&quot;</span></span><br><span class="line">      <span class="comment">// Error: label updated on background thread   </span></span><br><span class="line">   &#125;</span><br><span class="line">&#125;</span><br><span class="line">task.resume()</span><br></pre></td></tr></table></figure><h4 id="Solution"><a href="#Solution" class="headerlink" title="Solution"></a>Solution</h4><p>Dispatch the call to update the label text to the main thread.</p><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> task = <span class="type">URLSession</span>.shared.dataTask(with: url) &#123; (data, response, error) <span class="keyword">in</span></span><br><span class="line">   <span class="keyword">if</span> <span class="keyword">let</span> data = data &#123;</span><br><span class="line">      <span class="type">DispatchQueue</span>.main.async &#123; <span class="comment">// Correct</span></span><br><span class="line">         <span class="keyword">self</span>.label.text = <span class="string">&quot;\(data.count) bytes downloaded&quot;</span></span><br><span class="line">      &#125;</span><br><span class="line">   &#125;</span><br><span class="line">&#125;</span><br><span class="line">task.resume()</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;Overview&quot;&gt;&lt;a href=&quot;#Overview&quot; class=&quot;headerlink&quot; title=&quot;Overview&quot;&gt;&lt;/a&gt;Overview&lt;/h2&gt;&lt;p&gt;The Main Thread Checker is a standalone tool for Swift and C languages that detects invalid usage of AppKit, UIKit, and other APIs on a background thread. Updating UI on a thread other than the main thread is a common mistake that can result in missed UI updates, visual defects, data corruptions, and crashes.&lt;/p&gt;</summary>
    
    
    
    <category term="iOS开发" scheme="http://gyrojeff.moe/categories/iOS%E5%BC%80%E5%8F%91/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="Swift" scheme="http://gyrojeff.moe/tags/Swift/"/>
    
    <category term="Xcode" scheme="http://gyrojeff.moe/tags/Xcode/"/>
    
  </entry>
  
  <entry>
    <title>中值定理笔记</title>
    <link href="http://gyrojeff.moe/2020/02/28/%E4%B8%AD%E5%80%BC%E5%AE%9A%E7%90%86%E7%AC%94%E8%AE%B0/"/>
    <id>http://gyrojeff.moe/2020/02/28/%E4%B8%AD%E5%80%BC%E5%AE%9A%E7%90%86%E7%AC%94%E8%AE%B0/</id>
    <published>2020-02-28T13:02:27.000Z</published>
    <updated>2020-09-22T12:58:55.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="高等数学-高汝熹-4-1-中值定理"><a href="#高等数学-高汝熹-4-1-中值定理" class="headerlink" title="高等数学-高汝熹 4.1 中值定理"></a>高等数学-高汝熹 4.1 中值定理</h2><a id="more"></a><ol><li><p>罗尔定理</p><ul><li><p>若函数$f(x)$在闭区间$[a,b]$连续，而再开区间$(a,b)$可导，且在端点处$f(a)=f(b)$，则在区间$(a,b)$内比存在一点$\xi$使得$f’(\xi)=0$。</p></li><li><p>几何意义：对于$f(x)​$，其需要连续且可导，在这种情况下，其两端点的函数值相等，则在$(a,b)​$上必有一点的切线平行于$x​$轴。</p></li><li><p>证明：</p><p>对于$f(x)$，设其在开区间$(a,b)$中，可以取到最大值$M$和最小值$m$，有两种情况需要讨论：</p></li></ul><ol><li><p>$M=m​$时：</p><p>此时最大值和最小值相等，都在同一直线上，说明点$a,b​$之间为一条直线，在这种情况之下，函数上处处导数为0，得证，可以找到$\xi​$使得$f’(\xi)=0​$，此时$\xi​$可以去$(a,b)​$之间的一切实数。</p></li><li><p>$M\ne m$时：</p><p>我们不妨设$f(a)\ne M,f(\xi)=M​$则可得：</p><script type="math/tex; mode=display">  \begin{align*}f(x+\Delta x) \le f(x)\end{align*}</script><p>移项，可得：</p><script type="math/tex; mode=display">  \begin{align*}        f(\xi+\Delta x)-f(\xi)\le 0 \\\\\Delta x >0: \frac {f(\xi+\Delta x)-f(\xi)}{\Delta x} \le 0 \\\\\Delta x <0: \frac {f(\xi+\Delta x)-f(\xi)}{\Delta x} \ge 0 \\\\\end{align*}</script><p>由于连续，可导所以以下极限必定存在：</p><script type="math/tex; mode=display">  \begin{align*}\lim_{\Delta x \to 0} {\frac {f(\xi + \Delta x) - f(\xi)}{\Delta x}} = f'(\xi)\end{align*}</script><p>通过（1）、（2）两式可对其求单侧极限：</p><script type="math/tex; mode=display">  \begin{align*}\lim_{\Delta x \to +0} {\frac {f(\xi + \Delta x) - f(\xi)}{\Delta x}} \le 0 \\\\\lim_{\Delta x \to -0} {\frac {f(\xi + \Delta x) - f(\xi)}{\Delta x}} \ge 0\end{align*}</script><p>即：</p><script type="math/tex; mode=display">  \begin{align*}f'(\xi) =\lim_{\Delta x \to 0} {\frac {f(\xi + \Delta x) - f(\xi)}{\Delta x}} = 0\end{align*}</script><p>得证。</p></li></ol></li><li><p>拉格朗日中值定理</p><ul><li>若函数$f(x)$在闭区间$[a,b]$连续，在开区间$(a,b)$内可导，则在开区间$(a,b)$内必定存在$\xi$使得：</li></ul><script type="math/tex; mode=display">     \begin{align*}f(b)-f(a)=(b-a)f'(\xi)   \end{align*}</script><p>​    成立。</p><ul><li><p>几何意义：我们可以注意到(6)式可以改写成：</p></li><li><script type="math/tex; mode=display">   \begin{align*}f'(\xi)=\frac {f(b)-f(a)}{b-a} \end{align*}</script><p>也就是说函数上必定存在一点$\xi$使得$f’(\xi)$等于$a,b$两点的切线斜率，即其平行于此点处的切线。</p></li><li><p>证明：<br>首先，构造函数：</p></li><li><script type="math/tex; mode=display">   \begin{align*}\varphi(x) = f(x)-f(a)-\frac {f(b)-f(a)}{b-a}(x-a) \end{align*}</script><p>很容易的出结论：$\varphi(a)=\varphi(b)=0$。也就是说$\varphi(x)$满足罗尔定理的一切条件，即可得式(5)的结论。</p><p>设此点为$\xi$则必有：</p><script type="math/tex; mode=display">   \begin{align*}\varphi'(\xi)=0 \end{align*}</script><p>成立，即：</p><script type="math/tex; mode=display">   \begin{align*}\varphi'(\xi)=f'(\xi)-\frac {f(b)-f(a)}{b-a}=0 \end{align*}</script><script type="math/tex; mode=display">   \begin{align*}f'(\xi)=\frac {f(b)-f(a)}{b-a} \end{align*}</script><p>得证。</p></li><li><p>拉格朗日中值定理的应用：</p><p>由于(6)式，令$b=x+\Delta x$，$a=x$，所以$\xi$可以被表示为$x+\theta\Delta x$的形式：</p><script type="math/tex; mode=display">   \begin{align*}f(x+\Delta x)-f(x)=f'(x+\theta\Delta x)\Delta x\\\\(0<\theta<1) \end{align*}</script><p>又因为微分表达式：</p><script type="math/tex; mode=display">   \begin{align*}\text{d}y=f'(x)\Delta x \end{align*}</script><p>所以拉格朗日中值定理给出的表达式就是微分的精确值，当$\Delta x$很小时，误差不大，但是当其变大时，可能产生相当严重的误差。</p></li><li><p>拉格朗日中值定理的推论：</p><ul><li><p>推论1：</p><p>如果在开区间$(a,b)$内，恒有$f’(x)=0$，则$f(x)$在区间内恒为常数。</p><p>证明：</p><p>设$x_1,x_2\in (a,b)$且$x_1&lt;x_2$，则会有$\xi\in(x_1,x_2)$，使得：</p><script type="math/tex; mode=display"> \begin{align*}f'(\xi)=\frac {f(x_2)-f(x_1)}{x_2-x_2}=0\end{align*}</script><p>故有</p><script type="math/tex; mode=display"> \begin{align*}f(x_2)=f(x_1)\end{align*}</script><p>由于其对区间内的一切实数都成立，所以其函数值在区间内恒为常数。</p></li><li><p>推论2：</p><p>如果在开区间$(a,b)$内恒有$f’(x)=g’(x)$成立，则有：</p><script type="math/tex; mode=display"> \begin{align*}f(x) = g(x) + C\end{align*}</script><p>其中C为常数。</p><p>由此推论可得：如果两函数在开区间内导数值处处相等，则这两个函数在此区间内只差一个常数。</p><p>证明：</p><p>构造函数$\varphi(x)=f(x)-g(x)$，由于$\varphi’(x)=0$在区间内恒成立，所以根据推论2，有：</p><script type="math/tex; mode=display"> \begin{align*}\varphi(x)=C\end{align*}</script><p>所以：</p><script type="math/tex; mode=display"> \begin{align*}f(x)=g(x)+C\end{align*}</script><p>得证。</p></li></ul></li></ul></li><li><p>柯西中值定理</p><ul><li><p>若$F(x),f(x)$在闭区间$[a,b]$连续，在开区间$(a,b)$可导，$F’(x)$在区间内均不等于$0$，$F(x)$在$(a,b)$内至少存在一点$\xi$使得：</p><script type="math/tex; mode=display">   \begin{align*}\frac {f(b)-f(a)} {F(b)-F(a)}=\frac {f'(\xi)} {F'(\xi)} \end{align*}</script><p>成立。</p></li><li><p>几何意义：</p><p>设参数方程：</p><script type="math/tex; mode=display">   \begin{align*}\begin{cases} x = F(t) & a \le t \le b \\\\y=f(t) & a \le t \le b \end{cases} \end{align*}</script><p>表示$(f(a),F(a)),(f(b),F(b))$两点之间的曲线，</p><p>对其进行求导：</p><script type="math/tex; mode=display">   \begin{align*}y=f(t)=f[F^{-1}(x)] \\\\y'(x)=\frac {\text{d}y}{\text{d}x}=\frac {\text{d}y}{\text{d}t}\frac {\text{d}t}{\text{d}x}=f'(x)[F^{-1}(x)]'=\frac {f'(x)}{F'(x)} \end{align*}</script><p>我们可以发现其描述的就是在这条曲线上必有一点$\xi$的切线与这两点的连线平行，其中$\frac {f(b)-f(a)}{F(b)-F(a)}$表示的就是两点之间的连线的斜率。</p></li><li><p>证明：</p><p>在证明之前，有一点值得论述：定理已经给出条件$F’(x)\ne0,x\in (a,b)$我们会发现$F(b)-F(a)$不可以等于$0$，否则$F(a)=F(b)$满足罗尔定理的条件，会得出$F’(x)=0$与原条件矛盾，所以此处不必指明$F(b)-F(a)\ne 0$，只需$F’(x)\ne0,x\in (a,b)$即可。</p><p>首先，构造函数：</p><script type="math/tex; mode=display">   \begin{align*}\varphi(x)=f(x)-f(a)-\frac {f(b)-f(a)}{F(b)-F(a)}(F(x)-F(a)) \end{align*}</script><p>不难看出，与拉格朗日中值定理的证明过程相似，有$\varphi(a)=\varphi(b)=0$。所以满足罗尔定理，可得：有$\xi$存在，使得</p><script type="math/tex; mode=display">   \begin{align*}\varphi'(\xi)=f'(\xi)-\frac {f(b)-f(a)}{F(b)-F(a)}F'(\xi)=0 \end{align*}</script><p>成立，所以得证。</p></li></ul></li></ol>]]></content>
    
    
    <summary type="html">&lt;h2 id=&quot;高等数学-高汝熹-4-1-中值定理&quot;&gt;&lt;a href=&quot;#高等数学-高汝熹-4-1-中值定理&quot; class=&quot;headerlink&quot; title=&quot;高等数学-高汝熹 4.1 中值定理&quot;&gt;&lt;/a&gt;高等数学-高汝熹 4.1 中值定理&lt;/h2&gt;</summary>
    
    
    
    <category term="Math" scheme="http://gyrojeff.moe/categories/Math/"/>
    
    
    <category term="Math" scheme="http://gyrojeff.moe/tags/Math/"/>
    
    <category term="Calculus" scheme="http://gyrojeff.moe/tags/Calculus/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="http://gyrojeff.moe/2020/02/28/Hello-World/"/>
    <id>http://gyrojeff.moe/2020/02/28/Hello-World/</id>
    <published>2020-02-28T12:19:12.000Z</published>
    <updated>2020-03-09T10:40:55.000Z</updated>
    
    <content type="html"><![CDATA[<p>在面包人爸爸的帮助下，折腾了几个小时，奶茶铺终于开张咯（手动@枫亚\侧边栏里有啦/）。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在面包人爸爸的帮助下，折腾了几个小时，奶茶铺终于开张咯（手动@枫亚\侧边栏里有啦/）。&lt;/p&gt;
</summary>
      
    
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/categories/Hexo/"/>
    
    
    <category term="Hexo" scheme="http://gyrojeff.moe/tags/Hexo/"/>
    
  </entry>
  
  <entry>
    <title>使用Java, AppleScript对晓黑板进行定时自动打卡</title>
    <link href="http://gyrojeff.moe/2020/02/28/%E4%BD%BF%E7%94%A8Java-AppleScript%E5%AF%B9%E6%99%93%E9%BB%91%E6%9D%BF%E8%BF%9B%E8%A1%8C%E5%AE%9A%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%93%E5%8D%A1/"/>
    <id>http://gyrojeff.moe/2020/02/28/%E4%BD%BF%E7%94%A8Java-AppleScript%E5%AF%B9%E6%99%93%E9%BB%91%E6%9D%BF%E8%BF%9B%E8%A1%8C%E5%AE%9A%E6%97%B6%E8%87%AA%E5%8A%A8%E6%89%93%E5%8D%A1/</id>
    <published>2020-02-28T10:49:56.000Z</published>
    <updated>2020-09-14T23:56:09.000Z</updated>
    
    <content type="html"><![CDATA[<p>由于我们学校要求每天7点起床打卡，但是实在做不到，遂写了这个脚本。</p><h2 id="绪论"><a href="#绪论" class="headerlink" title="绪论"></a>绪论</h2><p>由于晓黑板不支持网页版，只能使用App进行打卡，所以我使用网易的安卓模拟器，安装App。</p><h2 id="打卡实现"><a href="#打卡实现" class="headerlink" title="打卡实现"></a>打卡实现</h2><p>逻辑非常简单：</p><ul><li>使用java的Robot类来移动，点击鼠标</li><li>由于Robot对模拟器输入无效，就使用Applescript键入1</li><li>再点击一次按钮，完成打卡</li></ul><a id="more"></a><p>代码：</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> edu.sfls.Jeff.JavaDev.App.AutoClockIn;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> java.awt.*;</span><br><span class="line"><span class="keyword">import</span> java.awt.event.InputEvent;</span><br><span class="line"><span class="keyword">import</span> java.io.IOException;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Main</span> </span>&#123;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> <span class="keyword">throws</span> AWTException, InterruptedException, IOException </span>&#123;</span><br><span class="line">        Robot robot = <span class="keyword">new</span> Robot();</span><br><span class="line">        robot.mouseMove(<span class="number">441</span>, <span class="number">978</span>);</span><br><span class="line">        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);</span><br><span class="line">        Thread.sleep(<span class="number">10</span>);</span><br><span class="line">        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);</span><br><span class="line">        Thread.sleep(<span class="number">1000</span>);</span><br><span class="line">        String[] script = &#123;<span class="string">&quot;osascript&quot;</span>, <span class="string">&quot;-e&quot;</span>, <span class="string">&quot;tell application \&quot;NemuPlayer\&quot;\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\tactivate\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;end tell\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;tell application \&quot;System Events\&quot;\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\ttell process \&quot;NemuPlayer\&quot;\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\t\ttell window 1\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\t\t\tkey code 18\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\t\tend tell\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;\tend tell\n&quot;</span> +</span><br><span class="line">                <span class="string">&quot;end tell&quot;</span>&#125;;</span><br><span class="line">        Runtime.getRuntime().exec(script);</span><br><span class="line">        Thread.sleep(<span class="number">1000</span>);</span><br><span class="line">        robot.mouseMove(<span class="number">487</span>, <span class="number">127</span>);</span><br><span class="line">        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);</span><br><span class="line">        Thread.sleep(<span class="number">10</span>);</span><br><span class="line">        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="打包java文件"><a href="#打包java文件" class="headerlink" title="打包java文件"></a>打包java文件</h2><p>首先我们需要通过IDE/命令行打包成可执行jar文件</p><h2 id="使用AppleScript封装成App"><a href="#使用AppleScript封装成App" class="headerlink" title="使用AppleScript封装成App"></a>使用AppleScript封装成App</h2><p>代码：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">do shell script &quot;java -jar /Users/jefferson/Documents/Coding\\ Directory/Apple\\ Script/daka/AutoClockIn.jar&quot;</span><br></pre></td></tr></table></figure><h2 id="使用plist来定时执行"><a href="#使用plist来定时执行" class="headerlink" title="使用plist来定时执行"></a>使用plist来定时执行</h2><p>虽然可以用java的办法，但是我有点懒，直接使用Mac OS原生的方法，创建一个plist</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="meta-keyword">plist</span> <span class="meta-keyword">PUBLIC</span> <span class="meta-string">&quot;-//Apple//DTD PLIST 1.0//EN&quot;</span> <span class="meta-string">&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">plist</span> <span class="attr">version</span>=<span class="string">&quot;1.0&quot;</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">dict</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 名称，要全局唯一 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>Label<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">string</span>&gt;</span>com.jefferson.cron.clockin<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 命令， 第一个为命令，其它为参数--&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>ProgramArguments<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">array</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>open<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">string</span>&gt;</span>/Users/jefferson/Documents/Coding Directory/Apple Script/daka/daka.app<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">array</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 运行时间 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>StartCalendarInterval<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">dict</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">key</span>&gt;</span>Minute<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">integer</span>&gt;</span>01<span class="tag">&lt;/<span class="name">integer</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">key</span>&gt;</span>Hour<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">      <span class="tag">&lt;<span class="name">integer</span>&gt;</span>7<span class="tag">&lt;/<span class="name">integer</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">dict</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 标准输入文件 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>StandardInPath<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">string</span>&gt;</span>/Users/jefferson/Documents/run-in-meican.log<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 标准输出文件 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>StandardOutPath<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">string</span>&gt;</span>/Users/jefferson/Documents/run-in-meican.log<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 标准错误输出文件 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">key</span>&gt;</span>StandardErrorPath<span class="tag">&lt;/<span class="name">key</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">string</span>&gt;</span>/Users/jefferson/Documents/run-in-meican.log<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">dict</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">plist</span>&gt;</span></span><br></pre></td></tr></table></figure><h2 id="写一个shell脚本来刷新"><a href="#写一个shell脚本来刷新" class="headerlink" title="写一个shell脚本来刷新"></a>写一个shell脚本来刷新</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">launchctl unload ~/Library/LaunchAgents/com.jefferson.cron.clockin.plist</span><br><span class="line">sleep 0.5</span><br><span class="line">launchctl load ~/Library/LaunchAgents/com.jefferson.cron.clockin.plist</span><br></pre></td></tr></table></figure><h2 id="给脚本加权限"><a href="#给脚本加权限" class="headerlink" title="给脚本加权限"></a>给脚本加权限</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo chmod +x reset.sh</span><br></pre></td></tr></table></figure><h2 id="运行脚本启动"><a href="#运行脚本启动" class="headerlink" title="运行脚本启动"></a>运行脚本启动</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.&#x2F;reset.sh</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;p&gt;由于我们学校要求每天7点起床打卡，但是实在做不到，遂写了这个脚本。&lt;/p&gt;
&lt;h2 id=&quot;绪论&quot;&gt;&lt;a href=&quot;#绪论&quot; class=&quot;headerlink&quot; title=&quot;绪论&quot;&gt;&lt;/a&gt;绪论&lt;/h2&gt;&lt;p&gt;由于晓黑板不支持网页版，只能使用App进行打卡，所以我使用网易的安卓模拟器，安装App。&lt;/p&gt;
&lt;h2 id=&quot;打卡实现&quot;&gt;&lt;a href=&quot;#打卡实现&quot; class=&quot;headerlink&quot; title=&quot;打卡实现&quot;&gt;&lt;/a&gt;打卡实现&lt;/h2&gt;&lt;p&gt;逻辑非常简单：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用java的Robot类来移动，点击鼠标&lt;/li&gt;
&lt;li&gt;由于Robot对模拟器输入无效，就使用Applescript键入1&lt;/li&gt;
&lt;li&gt;再点击一次按钮，完成打卡&lt;/li&gt;
&lt;/ul&gt;</summary>
    
    
    
    <category term="瞎搞" scheme="http://gyrojeff.moe/categories/%E7%9E%8E%E6%90%9E/"/>
    
    
    <category term="OSX" scheme="http://gyrojeff.moe/tags/OSX/"/>
    
    <category term="AppleScript" scheme="http://gyrojeff.moe/tags/AppleScript/"/>
    
    <category term="Java" scheme="http://gyrojeff.moe/tags/Java/"/>
    
    <category term="plist" scheme="http://gyrojeff.moe/tags/plist/"/>
    
    <category term="shell" scheme="http://gyrojeff.moe/tags/shell/"/>
    
  </entry>
  
</feed>
