摘要: 如果有1,那么肯定无解如果没有1,那么肯定存在解,但是不是无穷多个呢,容易注意到,如果所有数的最大公约数不是1,任意一个不能被这个最大公约数整除的数都可以成为解,就有无穷多个解如果这n个数互质,假设有2个数m,n互质。可以把上限缩小到m*n-m-n,下面简单证明一下。设m>n构造{m,2m....(n-1)*m}那么这个集合对n的余数,就等于{1,2,3,4..n-1},假设取集合中2个不同的元素有k1*m≡ k2*m (mod n),因为(m,n)= 1,两边同乘m的逆元,就有k1 = k2。一个集合有n-1个元素,又是n的所有余数的子集。那么显然这2个集合相等。 因为m>n,可 阅读全文
posted @ 2013-10-14 17:57 1carus 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 我一直很喜欢ACM。但是为了我热爱的东西,我又付出了多少呢? 仔细回忆,除了刚开始接触时很努力的刷了100道题之外,在过去的一年中,我基本没刷几道题。每日靠着小聪明蒙混过关,偶尔做几道题,觉得很有所得。其实比起很多人,还差的很远。早就听说过HH大神半年900题的传奇经历,前几天又偶然看到UESTC的训练模式,看到里面说大家都在通宵刷题,更觉得惭愧。我本身就身在弱校,学校没有一点acm氛围,更需要自己努力,如果自己再懒惰,大概老天也不会帮助我。今天晚上我仔细的反思了自己,终于能站在一个较高的角度看过去的一年。如果我当初努力了,当然不会后悔,但是现在的我,挺后悔。我终于体会到,对acm,只有热情是 阅读全文
posted @ 2013-10-14 02:56 1carus 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 比赛的时候觉得好难,看了提示又觉得好简单,为神马会这样?练的太少!容易发现max必须在一组全是A,一组全是B中取得,设一组为T,通过一些转化,只用求出min{所有的(max(A(T)+ B(T)- ΣA,ΣB - (A(T) + B(T) ))},于是问题转化为求有多少个A(T)+ B(T), 有多少个和的问题就是简单dp了。。。 阅读全文
posted @ 2013-10-13 10:36 1carus 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 网上看见一道挺有意思的题,1到200任选101个数,肯定有一个能被另一个整除做法就是把所有数的2的次方提出来。。只留下奇数因子,那么只可能是1到199这100个奇数,选101个数,就最少有一个相同了- -!真是没事做,我要开始刷题了。。 阅读全文
posted @ 2013-10-05 21:46 1carus 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 我真是个傻逼。。这题想了好长时间,最后还是看别人的代码有了点灵感。写的时候发现位运算那点写的各种不利索。。又模仿了一下别人的代码。。。。先说一下思路好了。。每个数最多有16位,也就是大约能搞出6万个数,最多有100个数,问题就转化为在这100个集合里每个集合找出一个数组成一个不降的序列。根据苏神教我的,这种有大量重复的搜索就是其实就是dp啦。dp[i][j]表示长度为i,最后一个数是j的序列有几种方法,就有dp[i][j] = Σdp[i-1][k(k# include # include # include # include # include # include # define MOD 阅读全文
posted @ 2013-09-29 17:59 1carus 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 嘛。。稍微有一点变形,相当于每隔一段草,一行或一列就成新的了,用rnum,cnum记录一下就好了。# include # include # include # include using namespace std;char map[100][100];int mp[500][500],f[500],flag[500],r,c,sum,rnum,cnum,maxn,col[100][100];int find(int i){ int j; for (j=1;j<=cnum;++j) { if (mp[i][j]&&!flag[j]) { ... 阅读全文
posted @ 2013-09-25 22:59 1carus 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题目在这里http://community.topcoder.com/stat?c=problem_statement&pm=12750&rd=15703看第一队的得分S,总分是A如果S>A/2并且S-a[i](ai是s中最小的元素))# include # include # include # define maxn 1600000LLusing namespace std;typedef long long ll;ll dp[maxn];class YetAnotherTwoTeamsProblem{public: long long count(vector sk 阅读全文
posted @ 2013-09-21 19:14 1carus 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 刚开始试着连一下,对于没有任何遮挡的线段,连接观察点和他的中点,如果没有阻挡,那么肯定就能看见啦对于有遮挡的呢,我们可以试一下连接遮挡他的遮挡线段的端点,发现好像有点意思,如果射线能跟他严格相交,并且射线在另一面没有被夹住的话,就是可以看见的于是有了算法,连接端点和所有中点。怎么编程呢,发现可以设一个mr表示如果射线右边有端点交于射线的最小距离,ml同理,mm表示于射线严格相交的最近的一个点,我们发现,如果mm不存在,或者射线被2端夹住了(ml# include # include # include # include using namespace std;int n,cansee[300 阅读全文
posted @ 2013-09-19 16:45 1carus 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 这是一道usaco的题,section 3.4 raucous rockets如果只有1张唱片,就是一个背包问题,现在有m张唱片,怎么办呢?dp[i][j][k]表示前i首歌曲在j个cd中最后一个cd时间为k的最大值如果这首歌不选,就是dp[i-1][j][k]如果选,可以在当前时间就选,就是dp[i-1][j][k-a[i]]+1也可以在以前选啊。。就是dp[i][j][k-1](如果k是0怎么办?那就用dp[i][j-1][t(t是时间最大值)]!)这里可以优化啊。。在现在的cd上又不马上放的话还不如在当前就选。。所以就相当于在前面的cd上放。那我们就用dp[i][j-1][t];我们就得 阅读全文
posted @ 2013-09-18 18:52 1carus 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 已经快半夜了,嘛。。我的第一篇文章就写一道几何题目吧。题目在这里http://community.topcoder.com/stat?c=problem_statement&pm=996&rd=4372 大意就是说,有n个城市,从标号第0个出发,最后又回来,最短距离是多少。因为最多只有9个,所以可以枚举所有可能组合,可以用里的next_permutation实现。当然,先要转化一下坐标。以地心为原点就有:double x = sin(lng/180*PI)*cos(lat/180*PI)*radius;double y = cos(lng/180*PI)*cos(lat/180 阅读全文
posted @ 2013-09-11 23:43 1carus 阅读(266) 评论(0) 推荐(0) 编辑