2013 Multi-University Training Contest 5 部分解题报告
problem 1005(hdu 4647)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4647
Another Graph Game
思路:(官方题解)
若没有边权,则对点权从大到小排序即可。。
考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。
。。因为当两个人分别选择不同的点时,这一权值将互相抵消。
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define LL __int64 6 using namespace std; 7 const int maxn=100010; 8 double st[maxn]; 9 bool cmp(double a,double b) 10 { 11 return a>b; 12 } 13 int main() 14 { 15 int n,m; 16 while(scanf("%d%d",&n,&m)!=EOF) 17 { 18 int i,j; 19 for(i=1;i<=n;i++) 20 { 21 scanf("%lf",&st[i]); 22 } 23 int u,v; 24 double w; 25 for(i=1;i<=m;i++) 26 { 27 scanf("%d%d%lf",&u,&v,&w); 28 st[u]+=w/2; 29 st[v]+=w/2; 30 } 31 sort(st+1,st+n+1,cmp); 32 double sum=0; 33 for(i=1;i<=n;i+=2) 34 { 35 if(i+1<=n) 36 { 37 sum+=(st[i]-st[i+1]); 38 } 39 else 40 sum+=st[i]; 41 } 42 printf("%I64d\n",(LL)sum); 43 } 44 return 0; 45 }
View Code
problem 1006(hdu 4648)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4648
Magic Pen 6
思路:(官方题解)
题意转化一下就是:
给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。
分析:
设这列数前i项和为s[i],
则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],
所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,
即 s[j]%m-s[i-1]%m == 0,
因此,只需要每一个余数找使s[i]%m等于该余数的最小的i,和s[j]%m等于该余数的最大的j,相减即为最长的连续的数的长度。
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define LL __int64 6 using namespace std; 7 const int maxn=10010; 8 LL sum[maxn*10]; 9 int hash[maxn]; 10 int main() 11 { 12 //freopen("1006.in","r",stdin); 13 // freopen("output.out","w",stdout); 14 int n,m; 15 while(scanf("%d%d",&n,&m)!=EOF) 16 { 17 int i; 18 LL a; 19 int mmax=0; 20 memset(hash,-1,sizeof(hash)); 21 hash[0]=0; 22 for(i=1; i<=n; i++) 23 { 24 scanf("%I64d",&a); 25 a=a%m; 26 if(a<0) 27 a+=m; 28 if(i==1) 29 sum[i]=a; 30 else 31 sum[i]=sum[i-1]+a; 32 sum[i]%=m; 33 if(hash[sum[i]]==-1) 34 { 35 hash[sum[i]]=i; 36 } 37 int ch; 38 ch=i-hash[sum[i]]; 39 if(ch>mmax) 40 mmax=ch; 41 } 42 printf("%d\n",mmax); 43 } 44 return 0; 45 }
View Code
problem 1007(hdu 4649)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4649
Professor Tian
思路:
dp[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少。
则:有状态转移方程
若不选择第i个数:dp[i][j][0]=dp[i-1][j][0]*p[i];//第j位为0的概率
dp[i][j][1]=dp[i-1][j][1]*p[i];//第j位为1的概率
若选择第i个数:
dp[i][j][(0|da[i][j])]+=dp[i-1][j][0]*(1-p[i]);//操作为'|'时j位为0的概率 dp[i][j][(1|da[i][j])]+=dp[i-1][j][1]*(1-p[i]);//操作为‘|’时j位为1的概率
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 const int maxn=205; 6 double dp[maxn][21][2]; 7 int data[maxn]; 8 double p[maxn]; 9 char sstr[maxn*4]; 10 char str[maxn]; 11 int da[maxn][21]; 12 int main() 13 { 14 int n; 15 int k=0; 16 while(scanf("%d",&n)!=EOF) 17 { 18 19 int i,j; 20 k++; 21 memset(da,0,sizeof(da)); 22 memset(dp,0,sizeof(dp)); 23 for(i=0; i<=n; i++) 24 { 25 scanf("%d",&data[i]); 26 for(j=0; j<20; j++) 27 { 28 if(((1<<j)&data[i])!=0) 29 da[i][j]=1; 30 else 31 da[i][j]=0; 32 } 33 } 34 getchar(); 35 gets(sstr); 36 //puts(sstr); 37 int len=strlen(sstr); 38 int u=1; 39 for(i=0; i<len; i++) 40 { 41 if((sstr[i]=='|')||(sstr[i]=='&')||(sstr[i]=='^')) 42 { 43 str[u]=sstr[i]; 44 u++; 45 //printf("[%c]\n ",sstr[i]); 46 } 47 } 48 for(i=1; i<=n; i++) 49 { 50 scanf("%lf",&p[i]); 51 } 52 for(j=0; j<20; j++) 53 { 54 if(da[0][j]==1) 55 { 56 dp[0][j][1]=1; 57 dp[0][j][0]=0; 58 } 59 else 60 { 61 dp[0][j][0]=1; 62 dp[0][j][1]=0; 63 } 64 } 65 for(i=1; i<=n; i++) 66 { 67 for(j=0; j<20; j++) 68 { 69 dp[i][j][0]=dp[i-1][j][0]*p[i]; 70 dp[i][j][1]=dp[i-1][j][1]*p[i]; 71 if(str[i]=='|') 72 { 73 dp[i][j][(0|da[i][j])]+=dp[i-1][j][0]*(1-p[i]); 74 dp[i][j][(1|da[i][j])]+=dp[i-1][j][1]*(1-p[i]); 75 } 76 else if(str[i]=='&') 77 { 78 dp[i][j][(0&da[i][j])]+=dp[i-1][j][0]*(1-p[i]); 79 dp[i][j][(1&da[i][j])]+=dp[i-1][j][1]*(1-p[i]); 80 } 81 else 82 { 83 dp[i][j][(0^da[i][j])]+=dp[i-1][j][0]*(1-p[i]); 84 dp[i][j][(1^da[i][j])]+=dp[i-1][j][1]*(1-p[i]); 85 } 86 //printf("%d %d = %.6f %.6f\n",i,j,dp[i][j][0],dp[i][j][1]); 87 } 88 89 } 90 double ans=0; 91 for(i=0; i<20; i++) 92 { 93 //printf("%f\n",dp[n][i][1]); 94 ans+=dp[n][i][1]*(1<<i); 95 } 96 printf("Case %d:\n",k); 97 printf("%.6f\n",ans); 98 } 99 }
View Code
problem 1009(hdu 4651)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4651
Partition
思路:五边形定理
公式:P(n)=(-1)^(i-1)*P(n-q(i))...q(i)=3*(i^2)±i,(i=0,±1,±2,.......)
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 const int maxn=100010; 7 const __int64 mod=1000000007; 8 __int64 res[maxn]; 9 __int64 q[maxn]; 10 __int64 fq[maxn]; 11 void init() 12 { 13 int i; 14 memset(res,0,sizeof(res)); 15 res[0]=1; 16 res[1]=1; 17 res[2]=2; 18 res[3]=3; 19 for(i=1;i<=1000;i++) 20 { 21 q[i]=(3*i*i-i)/2; 22 fq[i]=(3*i*i+i)/2; 23 if(fq[i]>2*maxn) 24 { 25 break; 26 } 27 } 28 int fi; 29 int n; 30 for(n=4;n<maxn-5;n++) 31 { 32 int num=0; 33 i=1; 34 while(n-q[i]>=0) 35 { 36 num+=pow(-1,i-1)*res[n-q[i]]; 37 num%=mod; 38 if(n-fq[i]>=0) 39 { 40 fi=-i; 41 num+=pow(-1,fi-1)*res[n-fq[i]]; 42 num%=mod; 43 } 44 else 45 break; 46 i++; 47 } 48 res[n]=num%mod; 49 if(res[n]<0) 50 res[n]+=mod; 51 } 52 } 53 int main() 54 { 55 int T; 56 scanf("%d",&T); 57 init(); 58 while(T--) 59 { 60 int n; 61 scanf("%d",&n); 62 printf("%I64d\n",res[n]); 63 } 64 return 0; 65 }
View Code
转载于:https://www.cnblogs.com/wanglin2011/p/3254501.html
2013 Multi-University Training Contest 5 部分解题报告相关推荐
- 2013 Multi-University Training Contest 6 部分解题报告
problem 1001(hdu 4655) 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4655 1 #include<stdio.h> 2 ...
- 2013 Multi-University Training Contest 4 部分解题报告
problem 1001(hdu 4632) 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4632 Palindrome subsequence 思路:记 ...
- 2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 Apare_xzc
2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 by xzc,zx,lj 先 ...
- 2012 winter training @HIT Day 2 解题报告
今天第二天,主要练习二分和枚举.其实我突然发现,当做题突然卡主的时候,不妨想想今天练习的是什么内容-- 传送门http://acm.hit.edu.cn/hoj/contest/view?id=100 ...
- LeetCode第187场周赛(Weekly Contest 187)解题报告
差点又要掉分了,还好最后几分钟的时候,绝杀 AK.干巴爹!!! 第一题:思路 + 模拟暴力. 第二题:线性扫描. 第三题:双指针(滑动窗口) + 优先队列. 第四题:暴力每一行最小 k 个 + 优先队 ...
- LeetCode第176场周赛(Weekly Contest 176)解题报告
又是一周掉分之旅,我发现,LeetCode周赛的数据好水,所以有的时候,实在没思路,先暴力解决试试(即使分析出时间复杂度会超时),比如第二题和第三题都可以暴力通过,GG思密达. 这周主要使用了数据结构 ...
- CQUPT WEEKLY TRAINING (3)解题报告
T1: 一些士兵围成圈,每个士兵有个高度.求一个最小的相离高度差. 循环维护一遍,然后判断一下头尾. #include <cstdio> #include <algorithm> ...
- 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...
- 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
最新文章
- 数字信号处理中卷积的图形化动态解释
- ubuntu 安装 Sublime Text 2
- 谈C++求a+b(大神勿喷)
- Hadoop MapReduce链式实践--ChainReducer
- activex与matlab,在MATLAB图形用户界面设计中使用ActiveX控件
- Android计分器课程设计,课程设计题八:篮球比赛计分器
- Globle.asax错误:异常详细信息: S…
- 微信小程序:使用阿里icon图标
- 测试新人如何提高工作效率
- npm WARN using --force Recommended protections disabled.
- 人人都能看懂的 AI 入门课
- 高仿绚丽彩虹悬浮音乐播放器html5源码
- js操作设置css动画,使用 CSS3 和 JavaScript 制作链接反转 3D 动画 - 文章教程
- java 文字串叠字检查_正则表达式的相关应用
- STK。如何规定“视线”的范围
- 软工-点赞和取消点赞
- ffmpeg example演示教程 -AudioDecode
- Mysql 计算当前日期是本月第几周:一个自定义算法
- DNS查询的命令行工具
- WuThreat身份安全云-TVD每日漏洞情报-2022-12-22
热门文章
- python二分查找
- 西门子数控面板图解_20190319工控维修日记(西门子系统第四讲)
- 135编辑器 html,135编辑器,微信图文编辑器,微信图文美化编辑器,格式多方便的图文编辑-...
- java jersey使用总结_jersey使用指南
- android自定义文件选择,关于安卓自定义本地文件选择库的实现
- 梦到计算机坏了无法算账,梦见算账,做梦梦见算账是什么征兆?
- php getconfig,PHP: tidy::getConfig - Manual
- 了解下SOAP Envelope 元素
- 【C语言】用宏实现将一个整数的二进制位的奇数位和偶数位交换
- 关于ValueError: Unknown projection ‘3d‘报错的解决方法