{"id":61,"date":"2010-01-01T16:33:00","date_gmt":"2010-01-01T08:33:00","guid":{"rendered":"http:\/\/localhost\/?p=61"},"modified":"2010-01-01T16:33:00","modified_gmt":"2010-01-01T08:33:00","slug":"pku_2008_individual_practice_7_1","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=61","title":{"rendered":"PKU 2008 Individual Practice 7 (1)"},"content":{"rendered":"<p> <strong>PKU 2008 Individual Practice 7<br \/><\/strong>                        &#160;            <strong>3666 Problem A<\/strong> <a href=\"http:\/\/acm.pku.edu.cn\/JudgeOnline\/problem?id=3666\">Making the Grade<\/a>            \u5927\u610f\u3002\u3002\u5c31\u662f\u7528\u6700\u5c0f\u7684\u4ee3\u4ef7\u628a\u4e00\u7fa4\u6570\u53d8\u6210\u5355\u8c03\u7684\u3002\u3002\u53d8\u5316\u4e00\u4e2a\u6570\u7684\u4ee3\u4ef7\u662f\u53d8\u5316\u7684\u7edd\u5bf9\u503c\u3002\u3002<br \/>\u9996\u5148\u5f88\u660e\u786e\u662f\u53ef\u4ee5\u79bb\u6563\u7684\uff0c\u5c31\u662f\u8bf4\u5982\u679c\u4e00\u4e2a\u6570\u4e0d\u8fd9N\u4e2a\u6570\u4e2d\uff0c\u4e5f\u6ca1\u6709\u5fc5\u8981\u628a\u5176\u4ed6\u7684\u6570\u53d8\u6210\u8fd9\u4e2a\u6570\u3002\u3002<br \/>\u6240\u4ee5\u5b9e\u9645\u4e0a\u6709\u7528\u7684\u6570\u53ea\u6709N\u4e2a\u3002\u3002\u8bbe\u8fd9\u4e9b\u6570\u4e3aA1..N<br \/>\u90a3\u4e48\u8bbeD[i][j]\u4e3a1..i,\u7b2ci\u4e2a\u6570\u4e3aAj\u8ba9\u6240\u6709\u6570\u9012\u589e\u7684\u6700\u5c0f\u4ee3\u4ef7\u3002\u3002<br \/>\u90a3\u4e48D[i][j]=|Ai-Aj|+min(D[i-1][k])(1&lt;=k&lt;=j)<br \/>\u90a3\u4e48\u7b54\u6848\u5c31\u662fmin(D[N][1..N])\u3002\u3002<br \/>\u5b9e\u9645\u4e0a\u8fd9\u662fBOI\u7684\u539f\u9898\u3002\u3002\u5f53\u65f6N&lt;=100000\uff0c\u6240\u4ee5N^2\u53ea\u80fd\u89c1\u9b3c\u53bb\uff0c<br \/>\u4f46\u8fd9\u4e2aN\u53ea&lt;=2000\u3002\u3002\u53ef\u4ee5\u8fc7\u3002\u3002\u3002<br \/>\u6709\u4e00\u4e2a\u7528\u5de6\u504f\u6811\u7684NLogN\u7684\u7b97\u6cd5\u3002\u3002\u4f46\u662f\u592a\u9ebb\u70e6\u4e86\u3002\u3002<br \/>Code:<br \/>#include&lt;iostream&gt;<br \/>#include&lt;cstdio&gt;<br \/>#include&lt;algorithm&gt;<br \/>#include&lt;cstring&gt;<br \/>#include&lt;utility&gt;<br \/>#include&lt;cstdlib&gt;<br \/>#include&lt;string&gt;<br \/>#include&lt;cmath&gt;<br \/>using namespace std;<br \/>const int maxn=2010,inf=~0U&gt;&gt;1;<br \/>int A[maxn],B[maxn],DP[maxn],n;<br \/>inline int cost(int i,int j){return i&gt;j?(i-j):(j-i);}<br \/>int solve()<br \/>{<br \/> for(int i=0;i&lt;n;i++)<br \/>  DP[i]=cost(B[i],A[0]);<br \/> int tmp;<br \/> for(int i=1;i&lt;n;i++)<br \/> {<br \/>  tmp=inf;<br \/>  for(int j=0;j&lt;n;j++)<br \/>  {<br \/>   tmp=min(tmp,DP[j]);<br \/>   DP[j]=tmp+cost(B[j],A[i]);<br \/>  }<br \/> }<br \/> return *min_element(DP,DP+n);<br \/>}<br \/>int main()<br \/>{<br \/> freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/> cin&gt;&gt;n;for(int i=0;i&lt;n;i++) scanf(&quot;%d&quot;,A+i),B[i]=A[i];<br \/> sort(B,B+n);int ans=solve();<br \/> for(int l=0,r=n-1;l&lt;r;l++,r&#8211;)  <br \/>  swap(A[l],A[r]);<br \/> ans=min(ans,solve());<br \/> cout&lt;&lt;ans&lt;&lt;endl;<br \/>}                        &#160;            <strong>3667 Problem B<\/strong> <a href=\"http:\/\/acm.pku.edu.cn\/JudgeOnline\/problem?id=3667\">Hotel<\/a> <br \/>\u7528\u4e00\u4e2a\u7ebf\u6bb5\u6811\u7ef4\u62a4\u5c31OK\u4e86\u3002\u3002\u9700\u8981\u4f7f\u7528\u61d2\u6807\u8bb0\u3002\u3002<br \/>Code\uff1a<br \/>#include&lt;iostream&gt;<br \/>&#160;<br \/>#include&lt;algorithm&gt;<br \/>&#160;<br \/>#include&lt;cstring&gt;<br \/>&#160;<br \/>#include&lt;utility&gt;<br \/>&#160;<br \/>#include&lt;cstdio&gt;<br \/>&#160;<br \/>#define Renew(x,c) x=max(x,c)<br \/>&#160;<br \/>using namespace std;<br \/>&#160;<br \/>struct Tree<br \/>&#160;<br \/>{<br \/>&#160;<br \/> bool sign,e;<br \/>&#160;<br \/> int max,Lmax,Rmax,size,l,r;<br \/>&#160;<br \/> Tree*Lch,*Rch;<br \/>&#160;<br \/>}A[150000],*now,*root;<br \/>&#160;<br \/>Tree* NewNode(int l,int r)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> now-&gt;sign=false;<br \/>&#160;<br \/> now-&gt;max=now-&gt;Lmax=now-&gt;Rmax=r-l+1;<br \/>&#160;<br \/> now-&gt;size=r-l+1;<br \/>&#160;<br \/> now-&gt;l=l;<br \/>&#160;<br \/> now-&gt;r=r;<br \/>&#160;<br \/> return now++;<br \/>&#160;<br \/>}<br \/>&#160;<br \/>void Update(Tree*Fa)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> if(Fa-&gt;Lch-&gt;max==Fa-&gt;Lch-&gt;size)<br \/>&#160;<br \/>  Fa-&gt;Lmax=Fa-&gt;Lch-&gt;size+Fa-&gt;Rch-&gt;Lmax;<br \/>&#160;<br \/> else<br \/>&#160;<br \/>  Fa-&gt;Lmax=Fa-&gt;Lch-&gt;Lmax;<br \/>&#160;<br \/> if(Fa-&gt;Rch-&gt;max==Fa-&gt;Rch-&gt;size)<br \/>&#160;<br \/>  Fa-&gt;Rmax=Fa-&gt;Rch-&gt;size+Fa-&gt;Lch-&gt;Rmax;<br \/>&#160;<br \/> else<br \/>&#160;<br \/>  Fa-&gt;Rmax=Fa-&gt;Rch-&gt;Rmax; <br \/>&#160;<br \/> Fa-&gt;max=Fa-&gt;Lch-&gt;Rmax+Fa-&gt;Rch-&gt;Lmax;<br \/>&#160;<br \/> Renew(Fa-&gt;max,max(Fa-&gt;Lch-&gt;max,Fa-&gt;Rch-&gt;max));<br \/>&#160;<br \/>}<br \/>&#160;<br \/>Tree* Build(int l,int r)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> if(l==r)return NewNode(l,r);<br \/>&#160;<br \/> int mid=(l+r)\/2;<br \/>&#160;<br \/> Tree* T=NewNode(l,r);<br \/>&#160;<br \/> T-&gt;Lch=Build(l,mid);<br \/>&#160;<br \/> T-&gt;Rch=Build(mid+1,r);<br \/>&#160;<br \/> return T; <br \/>&#160;<br \/>}<br \/>&#160;<br \/>void Set(Tree*T,bool e)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> T-&gt;sign=true;<br \/>&#160;<br \/> T-&gt;e=e;<br \/>&#160;<br \/> T-&gt;Lmax=T-&gt;Rmax=T-&gt;max=e?T-&gt;size:0;<br \/>&#160;<br \/>}<br \/>&#160;<br \/>void Push(Tree*T)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> if(T-&gt;sign)<br \/>&#160;<br \/> { <br \/>&#160;<br \/>  if(T-&gt;size&gt;1)<br \/>&#160;<br \/>  {<br \/>&#160;<br \/>   Set(T-&gt;Lch,T-&gt;e);<br \/>&#160;<br \/>   Set(T-&gt;Rch,T-&gt;e);<br \/>&#160;<br \/>  }<br \/>&#160;<br \/>  T-&gt;sign=false;<br \/>&#160;<br \/> }<br \/>&#160;<br \/>}<br \/>&#160;<br \/>int l,r;<br \/>&#160;<br \/>void set(Tree*T,bool e)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> if(T-&gt;l&gt;=l and T-&gt;r&lt;=r)<br \/>&#160;<br \/> {<br \/>&#160;<br \/>  Set(T,e);<br \/>&#160;<br \/>  return;<br \/>&#160;<br \/> }<br \/>&#160;<br \/> int mid=T-&gt;Lch-&gt;r;<br \/>&#160;<br \/> Push(T);<br \/>&#160;<br \/> if(mid&gt;=l)<br \/>&#160;<br \/>  set(T-&gt;Lch,e);<br \/>&#160;<br \/> if(r&gt;mid)<br \/>&#160;<br \/>  set(T-&gt;Rch,e); <br \/>&#160;<br \/> Update(T);<br \/>&#160;<br \/>}<br \/>&#160;<br \/>int len;<br \/>&#160;<br \/>int Put(Tree*T)<br \/>&#160;<br \/>{ <br \/>&#160;<br \/> Push(T);<br \/>&#160;<br \/> if(T-&gt;Lch-&gt;max&gt;=len)<br \/>&#160;<br \/>  return Put(T-&gt;Lch);<br \/>&#160;<br \/> if(T-&gt;Lch-&gt;Rmax+T-&gt;Rch-&gt;Lmax&gt;=len) <br \/>&#160;<br \/>  return T-&gt;Lch-&gt;r-T-&gt;Lch-&gt;Rmax+1;<br \/>&#160;<br \/> if(T-&gt;Rch-&gt;max&gt;=len)<br \/>&#160;<br \/>  return Put(T-&gt;Rch);<br \/>&#160;<br \/> return 0;  <br \/>&#160;<br \/>}<br \/>&#160;<br \/>void In(int D)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> len=D;<br \/>&#160;<br \/> int a=Put(root);<br \/>&#160;<br \/> <a href=\"http:\/\/www.opengroup.org\/onlinepubs\/009695399\/functions\/printf.html\">printf<\/a>(&quot;%dn&quot;,a);<br \/>&#160;<br \/> if(a)<br \/>&#160;<br \/>  l=a,r=a+D-1,set(root,false);<br \/>&#160;<br \/>}<br \/>&#160;<br \/>void Out(int l,int r)<br \/>&#160;<br \/>{<br \/>&#160;<br \/> ::l=l;::r=r;<br \/>&#160;<br \/> set(root,true);<br \/>&#160;<br \/>}<br \/>&#160;<br \/>int n,m;<br \/>&#160;<br \/>void init()<br \/>&#160;<br \/>{<br \/>&#160;<br \/> cin&gt;&gt;n&gt;&gt;m;<br \/>&#160;<br \/> now=A;<br \/>&#160;<br \/> root=Build(1,n);<br \/>&#160;<br \/>}<br \/>&#160;<br \/>void work()<br \/>&#160;<br \/>{<br \/>&#160;<br \/> int k,l,d;<br \/>&#160;<br \/> while(m&#8211;)<br \/>&#160;<br \/> {<br \/>&#160;<br \/>  scanf(&quot;%d&quot;,&amp;k);<br \/>&#160;<br \/>  if(k==1)<br \/>&#160;<br \/>   scanf(&quot;%d&quot;,&amp;d),In(d);<br \/>&#160;<br \/>  else<br \/>&#160;<br \/>   scanf(&quot;%d %d&quot;,&amp;l,&amp;d),Out(l,l+d-1);<br \/>&#160;<br \/> }<br \/>&#160;<br \/>}<br \/>&#160;<br \/>int main()<br \/>&#160;<br \/>{<br \/>&#160;<br \/> init();<br \/>&#160;<br \/> work();<br \/>&#160;<br \/>}                        &#160;            <strong>3668 Problem C<\/strong> <a href=\"http:\/\/acm.pku.edu.cn\/JudgeOnline\/problem?id=3668\">Game of Lines<\/a>            \u5c31\u662f\u6240\u6709\u76f4\u7ebf\u4e2d\u4e0d\u540c\u659c\u7387\u7684\u4e2a\u6570\u3002\u3002\u76f4\u63a5set\u5c31\u53ef\u4ee5\u4e86\u3002\u3002<br \/>Code:<br \/>#include&lt;iostream&gt;<br \/>#include&lt;cstdio&gt;<br \/>#include&lt;utility&gt;<br \/>#include&lt;set&gt;<br \/>using namespace std;<br \/>typedef pair&lt;int,int&gt; pi;<br \/>int n;<br \/>pi A[300];<br \/>int gcd(int a,int b)<br \/>{return b?gcd(b,a%b):a;}<br \/>pi operator-(pi x,pi y)<br \/>{<br \/> return pi(x.first-y.first,x.second-y.second);<br \/>}<br \/>int main()<br \/>{<br \/> freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/> cin&gt;&gt;n;<br \/> for(int i=0;i&lt;n;i++)<br \/>  cin&gt;&gt;A[i].first&gt;&gt;A[i].second;  <br \/> set&lt;pi&gt; S;pi get;<br \/> for(int i=0;i&lt;n;i++)<br \/>  for(int j=i+1;j&lt;n;j++)<br \/>  {<br \/>   get=A[j]-A[i];<br \/>   int d=gcd(get.first,get.second);<br \/>   get.first\/=d;<br \/>   get.second\/=d;<br \/>   S.insert(get);<br \/>  }<br \/> cout&lt;&lt;S.size()&lt;&lt;endl;<br \/>}                        &#160;            <strong>3669 Problem D<\/strong> <a href=\"http:\/\/acm.pku.edu.cn\/JudgeOnline\/problem?id=3669\">Meteor Shower<\/a>            BFS&#8230;<br \/>Code:<br \/>#include&lt;iostream&gt;<br \/>#include&lt;cstdio&gt;<br \/>#include&lt;utility&gt;<br \/>#include&lt;queue&gt;<br \/>#define Renew(x,c) x=min(x,c)<br \/>using namespace std;<br \/>typedef pair&lt;int,int&gt; pi;<br \/>const int maxn=310,inf=~0U&gt;&gt;1;<br \/>int T[maxn][maxn],D[maxn][maxn];<br \/>queue&lt;pi&gt; Q;<br \/>inline bool inarea(int x,int y)<br \/>{return x&gt;=0 and y&gt;=0 and x&lt;maxn and y&lt;maxn;}<br \/>int main()<br \/>{<br \/> freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/> int m,x,y,t;cin&gt;&gt;m;<br \/> for(int i=0;i&lt;maxn;i++)<br \/>  for(int j=0;j&lt;maxn;j++)<br \/>   T[i][j]=D[i][j]=inf; <br \/> const int di[]={-1,0,1,0},dj[]={0,1,0,-1};<br \/> while(m&#8211;)<br \/> {<br \/>  scanf(&quot;%d %d %d&quot;,&amp;x,&amp;y,&amp;t);<br \/>  Renew(T[x][y],t);<br \/>  for(int ii,jj,d=0;d&lt;4;d++)  <br \/>  {<br \/>   ii=x+di[d];jj=y+dj[d];<br \/>   if(inarea(ii,jj))<br \/>    Renew(T[ii][jj],t);<br \/>  }<br \/> }<br \/> D[0][0]=0;Q.push(pi(0,0));int c;<br \/> while(Q.size())<br \/> {<br \/>  pi t=Q.front();Q.pop();c=D[t.first][t.second];<br \/>  if(T[t.first][t.second]==inf)<br \/>  {<br \/>   cout&lt;&lt;c&lt;&lt;endl;<br \/>   return 0;<br \/>  }<br \/>  for(int ii,jj,d=0;d&lt;4;d++)  <br \/>  {<br \/>   ii=t.first+di[d];jj=t.second+dj[d];<br \/>   if(inarea(ii,jj) and  D[ii][jj]==inf and T[ii][jj]&gt;c+1)<br \/>    D[ii][jj]=c+1,Q.push(pi(ii,jj));<br \/>  }<br \/> }<br \/> cout&lt;&lt;-1&lt;&lt;endl;<br \/>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PKU 2008 Individual Practice 7 &#160; 3666 Problem A Making the Grade \u5927\u610f\u3002\u3002\u5c31\u662f\u7528\u6700\u5c0f\u7684\u4ee3\u4ef7\u628a\u4e00\u7fa4\u6570\u53d8\u6210\u5355\u8c03\u7684\u3002\u3002\u53d8\u5316\u4e00\u4e2a\u6570\u7684\u4ee3\u4ef7\u662f\u53d8\u5316\u7684\u7edd\u5bf9\u503c\u3002\u3002\u9996\u5148\u5f88\u660e\u786e\u662f\u53ef\u4ee5\u79bb\u6563\u7684\uff0c\u5c31\u662f\u8bf4\u5982\u679c\u4e00\u4e2a\u6570\u4e0d\u8fd9N\u4e2a\u6570\u4e2d\uff0c\u4e5f\u6ca1\u6709\u5fc5\u8981\u628a\u5176\u4ed6\u7684\u6570\u53d8\u6210\u8fd9\u4e2a\u6570\u3002\u3002\u6240\u4ee5\u5b9e\u9645\u4e0a\u6709\u7528\u7684\u6570\u53ea\u6709N\u4e2a\u3002\u3002\u8bbe\u8fd9\u4e9b\u6570\u4e3aA1..N\u90a3\u4e48\u8bbeD[i][j]\u4e3a1..i,\u7b2ci\u4e2a\u6570\u4e3aAj\u8ba9\u6240\u6709\u6570\u9012\u589e\u7684\u6700\u5c0f\u4ee3\u4ef7\u3002\u3002\u90a3\u4e48D[i][j]=|Ai-Aj|+min(D[i-1][k])(1&lt;=k&lt;=j)\u90a3\u4e48\u7b54\u6848\u5c31\u662fmin(D[N][1..N])\u3002\u3002\u5b9e\u9645\u4e0a\u8fd9\u662fBOI\u7684\u539f\u9898\u3002\u3002\u5f53\u65f6N&lt;=100000\uff0c\u6240\u4ee5N^2\u53ea\u80fd\u89c1\u9b3c\u53bb\uff0c\u4f46\u8fd9\u4e2aN\u53ea&lt;=2000\u3002\u3002\u53ef\u4ee5\u8fc7\u3002\u3002\u3002\u6709\u4e00\u4e2a\u7528\u5de6\u504f\u6811\u7684NLogN\u7684\u7b97\u6cd5\u3002\u3002\u4f46\u662f\u592a\u9ebb\u70e6\u4e86\u3002\u3002Code:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;cstring&gt;#include&lt;utility&gt;#include&lt;cstdlib&gt;#include&lt;string&gt;#include&lt;cmath&gt;using namespace std;const int maxn=2010,inf=~0U&gt;&gt;1;int A[maxn],B[maxn],DP[maxn],n;inline int cost(int i,int j){return i&gt;j?(i-j):(j-i);}int solve(){ for(int i=0;i&lt;n;i++) DP[i]=cost(B[i],A[0]); int tmp; for(int i=1;i&lt;n;i++) { tmp=inf; for(int j=0;j&lt;n;j++) { tmp=min(tmp,DP[j]); DP[j]=tmp+cost(B[j],A[i]); } } return *min_element(DP,DP+n);}int main(){ freopen(&quot;in&quot;,&quot;r&quot;,stdin); cin&gt;&gt;n;for(int i=0;i&lt;n;i++) scanf(&quot;%d&quot;,A+i),B[i]=A[i]; sort(B,B+n);int ans=solve(); for(int l=0,r=n-1;l&lt;r;l++,r&#8211;) swap(A[l],A[r]); ans=min(ans,solve()); cout&lt;&lt;ans&lt;&lt;endl;} &#160; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/61"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=61"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/61\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=61"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=61"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=61"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}