HDU 4647 Another Graph Game

如果没有边的作用,显然轮流拿当前的最大值即可。

加上边的作用,将边权平均分给两个点,如果一个人选走一条边的两个点,就获得了边的权值;如果分别被两个人拿走,两人的差值不变。

将边权平均分配给点,对点的权值排序轮流选择。

 #include<cstdio>
#include<algorithm>
#include<iostream>
#define MAXN 100010
#define EPS 1e-8
typedef long long LL;
using namespace std;
double arr[MAXN];
int main() {
int n, m;
int i;
int x, y, val;
double a, b;
while (~scanf("%d%d", &n, &m)) {
for (i = ; i <= n; i++) {
scanf("%lf", &arr[i]);
}
for (i = ; i < m; i++) {
scanf("%d%d%d", &x, &y, &val);
arr[x] += val * 0.5 + EPS;
arr[y] += val * 0.5 + EPS;
}
sort(arr + , arr + + n);
a = b = ;
for (i = n; i > ; i -= ) {
a += arr[i];
b += arr[i - ];
}
cout << (LL) (a - b + EPS) << endl;
}
return ;
}

HDU 4648 Magic Pen 6

求前缀和,枚举擦除的起点,求出最右端的位置,更新答案。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 100010
using namespace std;
int arr[MAXN];
int sum[MAXN];
int pos[MAXN];
int main() {
int n, m;
int i;
int ans;
while (~scanf("%d%d", &n, &m)) {
sum[] = ;
memset(pos, -, sizeof(pos));
for (i = ; i <= n; i++) {
scanf("%d", &arr[i]);
arr[i] = (arr[i] % m + m) % m;
sum[i] = (sum[i - ] + arr[i]) % m;
pos[sum[i]] = i;
}
ans = ;
for (i = ; i <= n; i++) {
ans = max(ans, pos[sum[i - ]] - i + );
}
printf("%d\n", ans);
}
return ;
}

HDU 4649 Professor Tian

dp[i][j][k]表示第i位,处理到第j个数,该位的结果为k的概率。

答案就是每一位的dp[i][n][1]*(1<<i)相加。

 #include<cstdio>
#include<cstring>
#define MAXN 220
#define MAXM 20
double dp[MAXM][MAXN][];
int arr[MAXN];
char str[MAXN];
double p[MAXN];
int main() {
int n;
int ca = ;
int i, j, k, l;
int tmp;
double ans;
while (~scanf("%d", &n)) {
for (i = ; i <= n; i++) {
scanf("%d", &arr[i]);
}
for (i = ; i <= n; i++) {
scanf(" %c", &str[i]);
}
for (i = ; i <= n; i++) {
scanf("%lf", &p[i]);
}
memset(dp, , sizeof(dp));
for (i = ; i < MAXM; i++) {
if (arr[] & ( << i)) {
dp[i][][] = ;
} else {
dp[i][][] = ;
}
for (j = ; j <= n; j++) {
if (arr[j] & ( << i)) {
l = ;
} else {
l = ;
}
for (k = ; k < ; k++) {
if (str[j] == '&') {
tmp = k & l;
} else if (str[j] == '|') {
tmp = k | l;
} else {
tmp = k ^ l;
}
dp[i][j][tmp] += dp[i][j - ][k] * ( - p[j]);
dp[i][j][k] += dp[i][j - ][k] * p[j];
}
}
}
ans = ;
for (i = ; i < MAXM; i++) {
ans += dp[i][n][] * ( << i);
}
printf("Case %d:\n%lf\n", ca++, ans);
}
return ;
}

【 2013 Multi-University Training Contest 5 】的更多相关文章

  1. 【 2013 Multi-University Training Contest 8 】

    HDU 4678 Mine 对于每个空白区域,求SG值. 最后异或起来等于0,先手必败. #pragma comment(linker,"/STACK:102400000,102400000 ...

  2. 【 2013 Multi-University Training Contest 7 】

    HDU 4666 Hyperspace 曼哈顿距离:|x1-x2|+|y1-y2|. 最远曼哈顿距离,枚举x1与x2的关系以及y1与y2的关系,取最大值就是答案. #include<cstdio ...

  3. 【 2013 Multi-University Training Contest 6 】

    HDU 4655 Cut Pieces 假设n个数构成的总数都分成了n段,总数是n*a1*a2*...*an.但是答案显然不会那么多. 对于相邻的两个ai,ai+1,如果选择相同的颜色,那么就减少了a ...

  4. 【 2013 Multi-University Training Contest 4 】

    HDU 4632 Palindrome subsequence dp[x][y]表示区间[x,y]构成回文串的方案数. 若str[x]==str[y],dp[x][y]=dp[x+1][y]+dp[x ...

  5. 【 2013 Multi-University Training Contest 3 】

    HDU 4622 Reincarnation 枚举字符串的起点,构造后缀自动机,每次插入一个字符,就能统计得到当前不同字串的个数,预处理出所有的询问. #include<cstdio> # ...

  6. 【 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<=i<n. ...

  7. 【 2013 Multi-University Training Contest 1 】

    HDU 4602 Partition f[i]表示和为i的方案数.已知f[i]=2i-1. dp[i]表示和为i,k有多少个.那么dp[i]=dp[1]+dp[2]+...+dp[i-1]+f[i-k ...

  8. 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump

    多校训练就这么华丽丽的到了 ,于是乎各种华丽丽的被虐也開始了. 这是多校的1002; 最小费用最大流. 题目大意: 有n*m个方格,每一个方格都一个的十进制一位的数.你能够操作K次. 对于每一次操作, ...

  9. 【2018 Multi-University Training Contest 5】

    01: 02:https://www.cnblogs.com/myx12345/p/9436953.html 03: 04: 05:https://www.cnblogs.com/myx12345/p ...

随机推荐

  1. 遗传算法在JobShop中的应用研究(part 7:整体流程)

    """ pop是种群,种群中的每个个体的形式是,(makespan, 染色体)""" pop = [(ComputeStartTimes(g ...

  2. 在Linux中查看所有正在运行的进程

    可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...

  3. jsp页面输出序号

    <c:forEach items="${tests}" var="test" varStatus="s"> <li> ...

  4. js 定义方法的集中方式

    1:调用关键字function来构造 如:    function  distance(x1,x2,y1,y2)    {    var  dx = x2 - x1;    var  dy = y2  ...

  5. spring+缓存

    1.配置ehcache.xml <?xml version="1.0" encoding="UTF-8"?> <ehcache updateC ...

  6. asp.net 时间操作

    /*在dt上加天数*/ DateTime dt = DateTime.Now.AddDays(); /*将指定的天数加到此实例的值上: 即以当前日期为基础的情况下上加上30天.*/ DateTime ...

  7. javascript高级编程3第二章:在html中使用javascript

    2.1 <script>元素 向html页面中插入javascript的主要方法,就是使用<script>元素.这个元素被加入到正式的html规范中.html4.01为< ...

  8. 命名空间$.fn

    $.fn.xxx是可以用对象来调用的命名空间,例如 $.fn.input() 在声明时就可以用 $('abc').input()    $.fx是指jquery的特效. 如果使用显示.滑动.淡入淡出. ...

  9. monkey 自己总结

    adb shell monkey -p com.test.smstest --pct-touch 50 --pct-motion 30 --pct-nav 20 -s 10 -v --throttle ...

  10. 利用SSH传输文件

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...