2016 Personal Training #6 Div.2
来源:互联网 发布:java反序列化实例 编辑:程序博客网 时间:2024/06/06 13:23
UVALive6442 - Coins on a Ring
题意:给出长度为n的环,从0开始编号到n-1,在这些点上有凹槽可以插硬币,给出m个硬币,硬币位置可以重复,问要使得这些硬币间的距离相等,输出一个硬币所需要移动的最大值.
思路:二分答案,判断移动mid步是否满足条件.第1个点可移动的范围为[l,r]=[p[0]-mid,p[0]+mid],那么第2个点可移动的范围既要满足与第1个点相差n/m即是在[l+n/m,r+n/m],还要满足自身的移动范围[p[1]-mid,p[1]+mid];
所以l=max(l+n/m,p[1]-mid),r=min(r+n/m,p[1]+mid),
若是l>r说明没有交集,即是不存在同时满足这两个条件的移动范围.
#include<bits/stdc++.h>using namespace std;int p[20005],n,m;bool judge(int d){ int l=p[0]-d,r=p[0]+d; for (int i=1;i<m;++i){ l=max(l+n/m,p[i]-d); r=min(r+n/m,p[i]+d); if(l>r)return 0; } return 1;}int main(){ int t,k=1; scanf("%d",&t); while (t--){ scanf("%d%d",&n,&m); for (int i=0;i<m;++i){ scanf("%d",p+i); } sort(p,p+m); int left=0,right=n,mid; while (left<right){ mid=(left+right)/2; if(judge(mid))right=mid; else left=mid+1; } printf("Case #%d: %d\n",k++,left); }}
UVALive6440 - Emergency Handling
题意:T组数据,每组数据N个事件,P t0,s(t0),r.P表示病人,t0表示其到达时间,s(t0)表示其最开始的严重性,r表示严重性随着时间增加的比例,A t,要求输出在t时刻严重性最大的病人严重性和他的r.
思路:类似做到过优先队列的题目.s(t)=s(t0)+r(t-t0)=s(t0)-r*t0+r*t.设x=s(t0)-r*t0,该x是个常数,所以严重性和时间是成正比的.因为比例是0-100的数,所以可以开一个105大的优先队列数组.
#include<bits/stdc++.h>using namespace std;char str[5];int main(){ int t,n,a,b,c,k=1; scanf("%d",&t); while (t--){ priority_queue<int>Q[105]; printf("Case #%d:\n",k++); scanf("%d",&n); while (n--){ scanf("%s",str); if (str[0]=='P'){ scanf("%d%d%d",&a,&b,&c); Q[c].push(b-a*c); } else { scanf("%d",&a); int m=0,r=0; for (int i=0;i<=100;i++){ if (!Q[i].empty()){ if (Q[i].top()+i*a>=m){ m=Q[i].top()+i*a; r=i; } } } printf("%d %d\n",m,r); Q[r].pop(); } } }}
UVALive6434 - Number Assignment
题意:T组数据,每组数据输入N,M,输入N个数,输出分成M组数使得每组数的最大值-最小值之和最小.
思路:分析得到每个数之间的差值越大,就应该分开,总共需要分开M次.
#include<bits/stdc++.h>using namespace std;int a[1005],b[1005];bool cmp(int a,int b){ return a>b; //此处不能写 a>=b,否则RE.}int main(){ int t,m,n,k=1,sum; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=0;i<n;i++){ scanf("%d",a+i); } sort(a,a+n); sum=a[n-1]-a[0]; for(int i=0;i<n-1;i++){ b[i]=a[i+1]-a[i]; } int cnt=n-1; sort(b,b+cnt,cmp); for(int i=0;i<m-1;i++){ sum-=b[i]; } printf("Case #%d: %d\n",k++,sum); }}
UVALive6437 - Power Plant
题意:看题目Figure1,2就可以明白.
思路:求最小生成树,将其余的几个发电站初始化直接和第一个发电站形成父子关系.
#include<bits/stdc++.h>using namespace std;int boss[205];struct node{ int a,b,c;}num[40000];bool cmp(node A,node B){ return A.c<B.c;}int find(int x){ return x==boss[x]?x:find(boss[x]);}void unio(int x,int y){ int fx=find(x),fy=find(y); if(fx!=fy)boss[fx]=fy;}int main(){ int t,n,m,k,a,b,c,f=1,p1,p; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ boss[i]=i; } scanf("%d",&p1); for(int i=1;i<k;i++){ scanf("%d",&p); boss[p]=p1; } for(int i=0;i<m;i++){ scanf("%d%d%d",&num[i].a,&num[i].b,&num[i].c); } sort(num,num+m,cmp); int ans=0; for(int i=0;i<m;i++){ if(find(num[i].a)==find(num[i].b))continue; ans+=num[i].c; unio(num[i].a,num[i].b); } printf("Case #%d: %d\n",f++,ans); }}
UVALive6439 - Pasti Pas!
题意:T组数据,每组数据一个字符串,可以将子字符串用其他字符替换使得其变成一个回文串,问能形成该回文串的最大长度.题目的样例解释很清楚.
思路:模拟一下过程即可.
#include<bits/stdc++.h>using namespace std;string str1,str2,str;int main(){ int t,ans,k=1; scanf("%d",&t); while (t--){ cin>>str; str1=str2=""; ans=0; int len=str.length(); for (int i=0;i<len/2;++i){ str1=str1+str[i]; str2=str[len-1-i]+str2; if (str1==str2){ ans+=2; str1=str2=""; } } if (len%2)ans++; else if (str1!=str2)ans++; printf("Case #%d: %d\n",k++,ans); }}
- 2016 Personal Training #6 Div.2 G
- 2016 Personal Training #6 Div.2
- 2016 Personal Training #9 Div.2
- 2016 Personal Training #2 Div.2 SPOJ AMR11A
- 2016 Personal Training #5 Div.2 Gym 100637J
- 2016 Personal Training #8 Div.2 A B H
- 2016 Personal Training #3 Div.2 SGU 409
- 2016 Personal Training #11 Div.2 B G J
- 2016 Personal Training #1 Div.2 D - 1D Cafeteria (B) Gym 100989D
- 2016 Personal Training #7 Div.2 CodeForces 589A Email Aliases
- 2016 Personal Training #8 Div.2 I - Lucky Numbers CodeForces 95B
- 2016 Personal Training #4 Div.2 A B C G H
- UESTC 2016 Summer Training #6 Div.2(未完待续)
- UESTC 2016 Summer Training #2 Div.2(未完待续)
- UESTC 2016 Summer Training #1 Div.2(未完待续)
- UESTC 2016 Summer Training #3 Div.2(未完待续)
- UESTC 2016 Summer Training #4 Div.2(未完待续)
- UESTC 2016 Summer Training #5 Div.2(未完待续)
- [Cloud Computing]Mechanisms: Virtual CPU
- HDU - 3555 Bomb
- 从一个scene跳转到另一个scene的代码以及一些控件代码
- Android Toolbar菜单动态切换item的图标
- input框自动填充内容背景颜色为黄色解决方法
- 2016 Personal Training #6 Div.2
- SDUT3324顺序表应用1:多余元素删除之移位算法
- HDU 5761 Rower Bo(多校3)
- crontab 定时任务
- CentOS6.5安装与配置JDK-7
- 浅谈PHP弱类型安全
- shadertoy 跳动的心
- python包
- 关于智能家居主界面,通话记录界面设计的相关问题(ViewPager以及自定view)