摘要:
2891 -- Strange Way to Express Integers 1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 public class Main { 5 static final BigInteger ZERO = new BigInteger("0"); 6 static final BigInteger ONE = new BigInteger("1"); 7 static BigInteger gcd(BigInteger a, BigInteger b 阅读全文
摘要:
1077韩信点兵时间限制:500MS 内存限制:65536K提交次数:1103 通过次数:99题型: 编程题语言: 无限制Description相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人、23人一列余1人、29人一列余11人。刘邦茫然而不知其数。你呢? 你是一位优秀的程序员,请你帮刘邦解决这一问题。输入格式要求由键盘输入A,B,C,D,E,F,G,H,a,b,c,d,e,f,g,h十六个数,分别代表每A人一列余a、每B人一列余b、每C人一列余c、每D人一列余D、每E人一列余e、每F人 阅读全文
摘要:
UVa Online Judge 题意,求gcd(1,2)+gcd(1,3)+gcd(2,3)+...+gcd(n-1,n)的和。 这题的做法是,将gcd(a,b)=p(a 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 2222222; 9 typedef long long LL;10 int phi[N];11 LL sum[N];12 13 void PRE() {14 phi[1] = 1;15 for (int i = 2; i > n && n) ... 阅读全文
摘要:
ACM-ICPC Live Archive 一道模拟题,题意是问一个给出的多项式代入正整数得到的值是否总是整数。 这题是一道数论题,其实对于这个式子,我们只要计算1~最高次项是否都满足即可。 做的时候,模拟出了点小错误,一直wa。幸亏最后还是能找到错误的位置。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std; 8 9 const int N = 11111; 10 typedef long long LL; 11 char str[N];... 阅读全文
摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3154 题意是,要求求出区间中小于某个值的数有多少个,然后利用这个个数来更新某个点的值。 直接树套树解决问题,不过这题时间卡的比较紧。留心观察可以发现,询问的数目其实是比较小的,可是总的个数多大30W。如果是O(n*logn*logn)的复杂度建树就会超时,估计这里就是卡这一个了。其余的都不难,不过就是开始的时候没有看出可以卡时间卡这么紧,没有建树的经验,所以直接暴力插点,一直TL 阅读全文
摘要:
UVa Online Judge 题意是计算给定数量的边通过串联并联两种方式,能组成多少种不同的网络。将它转化为一个树形结构,也就是求有多少不同构的树。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const int N = 33;10 LL ans[N];11 int s[N], top;12 13 LL com(LL n, LL m) {14 LL ret = 1;15 for (int i = 0; ... 阅读全文
摘要:
ACM-ICPC Live Archive 还是递推的题。要观察出R比O多4个这个事实,同时不能有两个以上的连续的O,然后就是dp,dp[i][j][k]表示目前为止有i个R,连续的R有j个,第一个字母为O的时候是1,R的时候是0,最后一个字母总是R。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 typedef long long LL; 9 const int N = 1111;10 LL dp[N][5][2]; // N - num of 'R', contin 阅读全文
摘要:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2346 不知道算什么题,好像是数位dp,不过在切递推的题,所以这题应该算是递推。 首先要预处理出dp[i][j][k][p],表示一共有i位数字,其中数字和mod p余j而且这个数mod p余k的个数。然后就是枚举每一位,分段处理出结果。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std 阅读全文
摘要:
昨天打多校的第二场,状态还算可以,不会像第一场那样浑浑噩噩的敲过去了。可是这次的排名却比第一次要低了。 其实昨天比赛很不顺,主要是机房的机器不够,导致我们开局一小时后从三台机减少到只剩一台机。 开始的时候,队友ly像开挂一样,瞬间就看懂了1002,20min敲出了代码,抢了个fb。然后就是1009,这题其实很简单,很容易可以看出就是一个二分匹配的题。题目大意是,给出一些1*2的方块,有横向和纵向放置两种,其中只可能出现横向跟纵向重叠的情况,不会横向和横向纵向和纵向重叠。要求求出,最多可以剩下多少方块,是的它们之间两两不重叠。这样子,就可以对有重叠部分的横向和纵向方块添加一条边。然后求出... 阅读全文
摘要:
UVa Online Judge 训练指南的题目。 题意是,给出n个人,以及一些关系,要求对这n个人构成一个排列,其中父亲必须排在儿子的前面。问一共有多少种方式。 做法是,对于每一个父节点,将它的儿子结点构成的子树看成无序状态,这样子对当前父节点整棵树计算一个排列数。如果把所有的这样的式子写出来,可以发现分子分母是可以相消的。假设点的总数是S,儿子的点的数目分别是A,B,C...,这样的话,对于这个结点,可以求得F(S)=F(A)+F(B)+F(C)+...。最后的结果是所有子树的F(S)*F(A)*F(B)*F(C)*...。最后消去以后就只剩下F(S)/(c(A)*c(B)*c(C)... 阅读全文