﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-slytherin-文章分类-USACO</title><link>http://www.cppblog.com/slytherin/category/18565.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Oct 2012 05:24:51 GMT</lastBuildDate><pubDate>Tue, 09 Oct 2012 05:24:51 GMT</pubDate><ttl>60</ttl><item><title>[USACO]Prime Cryptarithm</title><link>http://www.cppblog.com/slytherin/articles/189855.html</link><dc:creator>slytherin</dc:creator><author>slytherin</author><pubDate>Fri, 07 Sep 2012 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/slytherin/articles/189855.html</guid><wfw:comment>http://www.cppblog.com/slytherin/comments/189855.html</wfw:comment><comments>http://www.cppblog.com/slytherin/articles/189855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/slytherin/comments/commentRss/189855.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/slytherin/services/trackbacks/189855.html</trackback:ping><description><![CDATA[<p>根据数据&nbsp; 可以得出一个三位数乘一个两位数，那么111 &lt;= i &lt;= 999&nbsp;&nbsp;,&nbsp; 11 &lt;= j &lt;= 99,且相乘分布和与乘积均为可找到数，枚举判断即可。<br /><br />#include &lt;stdio.h&gt;<br />int count;<br />int hash[10];</p>
<p>void <br />init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int z,i,n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; freopen("crypt1.in","r",stdin);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=1;i&lt;=n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d",&amp;z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hash[z] = 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>int <br />pd(int a)<br />{<br />&nbsp;&nbsp;&nbsp; while(a &gt; 0)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!hash[a % 10])return 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a/=10;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; return 1;&nbsp;&nbsp;&nbsp; <br />}</p>
<p>void <br />Enum()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long&nbsp; a,b,s,i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i = 111 ;i &lt;= 999;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j = 11 ;j &lt;= 99;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = i * j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(s &lt;= 9999)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = i * (j % 10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = i * (j / 10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pd(i) &amp;&amp; pd(j) &amp;&amp; pd(s) &amp;&amp; pd(a) &amp;&amp; pd(b) &amp;&amp; a&lt;1000 &amp;&amp; b&lt;1000)count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />}<br />&nbsp;&nbsp;&nbsp; <br />void <br />write()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; freopen("crypt1.out","w",stdout);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%ld\n",count);<br />}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />int <br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enum();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />}<br /><br />PS：<br />1，应注意&nbsp;&nbsp; 对于每个分步和也要在可招数内。<br />2，分布和为三位数<br />3，因为C的全局变量特点，初始为0，则可以避免相乘里有0的可能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><img src ="http://www.cppblog.com/slytherin/aggbug/189855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/slytherin/" target="_blank">slytherin</a> 2012-09-07 20:17 <a href="http://www.cppblog.com/slytherin/articles/189855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[USACO]milking cows</title><link>http://www.cppblog.com/slytherin/articles/165127.html</link><dc:creator>slytherin</dc:creator><author>slytherin</author><pubDate>Tue, 07 Feb 2012 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/slytherin/articles/165127.html</guid><wfw:comment>http://www.cppblog.com/slytherin/comments/165127.html</wfw:comment><comments>http://www.cppblog.com/slytherin/articles/165127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/slytherin/comments/commentRss/165127.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/slytherin/services/trackbacks/165127.html</trackback:ping><description><![CDATA[<div>前言：很久没有很好的自己写题了，所以这次当成练习。。。结果惨不忍睹。。。最后从网上找到的题解，理解后学习后直接用家里的笔记本直接在TXT上写好，提交&nbsp; AC的。<br />#include &lt;stdio.h&gt;<br />#include &lt;memory.h&gt;<br />int main()<br />{<br />&nbsp;&nbsp;&nbsp; FILE *fin,*fout;<br />&nbsp;&nbsp;&nbsp; fin=fopen("milk2.in","r");<br />&nbsp;&nbsp;&nbsp; fout=fopen("milk2.out","w");<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; long n,i,j,x,y,max=0,min=10000000;<br />&nbsp;&nbsp;&nbsp; int ans[2]={0,0};<br />&nbsp;&nbsp;&nbsp; char a[1000000];
<p>&nbsp;&nbsp;&nbsp; memset(a,0,sizeof(a));</p>
<p>&nbsp;&nbsp;&nbsp; fscanf(fin,"%ld",&amp;n);<br />&nbsp;&nbsp;&nbsp; for(i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fscanf(fin,"%ld %ld",&amp;x,&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y--;<br />&nbsp;if(x&lt;min) min=x;<br />&nbsp;if(y&gt;max) max=y;<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=x;j&lt;=y;j++)a[j]=1;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; for(i=min;i&lt;=max;i+=j)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(j=0;a[i+j]==a[i];j++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(j&gt;ans[a[i]])ans[a[i]]=j;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; fprintf(fout,"%d %d\n",ans[1],ans[0]);<br />&nbsp;&nbsp;&nbsp; fclose(fin);fclose(fout);<br />&nbsp;&nbsp;&nbsp; return 0;<br />}</p>写几条反思吧：<br />1，对于这种题目，总喜欢用最基础的判断大小来求，结果就是，花了一个小时，也没把答案给写好。这个用HASH的方法，值得我去学习。<br />2，coding能力太差，需要锻炼，对于语句要能看出主题思想。<br />3，有惯性思维。在for循环后，正常情况下不加结束分号，但有时是空语句。需要注意<br /></div> <img src ="http://www.cppblog.com/slytherin/aggbug/165127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/slytherin/" target="_blank">slytherin</a> 2012-02-08 00:11 <a href="http://www.cppblog.com/slytherin/articles/165127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>