随笔分类 - 2013 Multi-University Training Contest
【 2013 Multi-University Training Contest 8 】
摘要:HDU 4678 Mine对于每个空白区域,求SG值。最后异或起来等于0,先手必败。 1 #pragma comment(linker,"/STACK:102400000,102400000") 2 #include 3 #include 4 #define MAXN 1010 5 #define oo 1234567890 6 int arr[MAXN][MAXN]; 7 bool vis[MAXN][MAXN]; 8 int n, m; 9 int dg, bk; 10 int sg[MAXN * MAXN][2]; 11 int go[8][2] = { { 1, 0
阅读全文
【 2013 Multi-University Training Contest 6 】
摘要:HDU 4655 Cut Pieces假设n个数构成的总数都分成了n段,总数是n*a1*a2*...*an。但是答案显然不会那么多。对于相邻的两个ai,ai+1,如果选择相同的颜色,那么就减少了a1*a2*...*ai-1*min(ai,ai+1)*ai+2*ai+3*...*an。不妨假设n=3,三个数分别是a,b,c。且a3的时候同样可以得到结论:a1,an,a2,an-1...使得总的段数最多。 1 #include 2 #include 3 #include 4 typedef long long LL; 5 #define MOD 1000000007 6 #define MAXN
阅读全文
【 2013 Multi-University Training Contest 5 】
摘要:HDU 4647 Another Graph Game如果没有边的作用,显然轮流拿当前的最大值即可。加上边的作用,将边权平均分给两个点,如果一个人选走一条边的两个点,就获得了边的权值;如果分别被两个人拿走,两人的差值不变。将边权平均分配给点,对点的权值排序轮流选择。 1 #include 2 #include 3 #include 4 #define MAXN 100010 5 #define EPS 1e-8 6 typedef long long LL; 7 using namespace std; 8 double arr[MAXN]; 9 int main() {10 int ...
阅读全文
【 2013 Multi-University Training Contest 4 】
摘要:HDU 4632 Palindrome subsequencedp[x][y]表示区间[x,y]构成回文串的方案数。若str[x]==str[y],dp[x][y]=dp[x+1][y]+dp[x][y-1]-dp[x+1][y-1]+(dp[x+1][y-1]+1)=dp[x+1][y]+dp[x][y-1]+1。若str[x]!=str[y],dp[x][y]=dp[x+1][y]+dp[x][y-1]-dp[x+1][y-1]。 1 #include 2 #include 3 #define MAXN 1010 4 #define MOD 10007 5 char str[MAXN];
阅读全文
【 2013 Multi-University Training Contest 2 】
摘要:HDU 4611 Balls Rearrangement令lcm=LCM(a,b),gcd=GCD(a,b)。cal(n,a,b)表示sum(abs(i%a-i%b)),0 2 #include 3 typedef long long LL; 4 using namespace std; 5 LL GCD(LL x, LL y) { 6 return y ? GCD(y, x % y) : x; 7 } 8 LL LCM(LL x, LL y) { 9 return x / GCD(x, y) * y;10 }11 LL cal(LL n, LL a, LL b) {12 ...
阅读全文
【 2013 Multi-University Training Contest 1 】
摘要:HDU 4602 Partitionf[i]表示和为i的方案数。已知f[i]=2i-1。dp[i]表示和为i,k有多少个。那么dp[i]=dp[1]+dp[2]+...+dp[i-1]+f[i-k]。考虑与f有关的项:f[n-k]是答案的一部分,即2n-k-1是答案的一部分。把与dp有关的项:令s[i-1]=dp[1]+dp[2]+...+dp[i-1],那么s[n-1]是答案的一部分。s[i]=s[i-1]+dp[i],又dp[i]=s[i-1]+f[i-k]。推出s[i]=2*s[i-1]+f[i-k],dp[k]=s[k]=1。可以推出s[n-1]=2n-k-1+(n-k-1)*2n-k
阅读全文