Codeforces Round #206 (Div. 2)
来源:互联网 发布:微博旅游博主数据统计 编辑:程序博客网 时间:2024/04/27 14:38
CodeForces 355A
题意:S(n)为n各个位上的和,dr(n)为n的根。
- dr(n) = S(n), ifS(n) < 10;
- dr(n) = dr( S(n) ), ifS(n) ≥ 10.
给定k和d,k为n的位数,d为dr(n)。请你给出一个符合情况的n。
思路:因为d是根,肯定小于10,所以将d作为n的第一位,后面跟上k-1个0即可。需要特判d=0的情况,d=0时n只能为0
/************************************************************************* File Name: A.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月19日 星期二 09时01分15秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;int main(){ int k,d; while(~scanf("%d%d",&k,&d)){ if(!d && k>1)puts("No solution"); else{ printf("%d",d); k--; while(k--)printf("0"); puts(""); } }}
CodeForces 355B
题意:四种票,c1是可以坐一种bus或trolley一次,c2是可以坐一种bus或trolley无限次,c3是可以坐所有bus或者所有trolley无限次,c4是可以坐所有bus和trolley无限次。给定c1,c2,c3,c4以及分别乘坐n种bus和m种trolley的次数,问怎么买票最便宜。
思路:每种c1和c2比,相加后和c3比,bus和trolley相加后和c4比,得出最小值。
/************************************************************************* File Name: B.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月19日 星期二 09时10分33秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;int main(){ int n,m,c1,c2,c3,c4,i,x,ans,tmp; while(~scanf("%d%d%d%d%d%d",&c1,&c2,&c3,&c4,&n,&m)){ ans=tmp=0; for(i=0;i<n;++i){ scanf("%d",&x); tmp+=Min(x*c1,c2); } tmp=Min(tmp,c3); for(i=0;i<m;++i){ scanf("%d",&x); ans+=Min(x*c1,c2); } ans=Min(ans,c3); ans=Min(ans+tmp,c4); printf("%d\n",ans); }}
CodeForces 355C
题意:给你一排n个物品,机器人去取,只能在端点取,从左取的花费是l,从右取是r。
如果连续从左取,附加花费是ql,连续从右取,附加花费是qr。问取完的最小花费。
思路:无论怎么取左边从左取和右边从右取都会有一条交线,我们枚举这条交线算出花费,枚举求出最小花费。显然的,左右交替取比连续取的花费要小。所以在确定交线之后优先左右交替取,直到只剩下一边再连续取。
/************************************************************************* File Name: C.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月19日 星期二 10时27分32秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=1e5+10,INF=0x3f3f3f3f;int w[N],pre[N];int main(){ int n,l,r,ql,qr,i; while(~scanf("%d%d%d%d%d",&n,&l,&r,&ql,&qr)){ pre[0]=0; for(i=1;i<=n;++i){ scanf("%d",w+i); pre[i]=pre[i-1]+w[i]; } int minn=INF,tmp; for(i=0;i<=n;++i){ tmp=pre[i]*l+(pre[n]-pre[i])*r; //cout<<"tmp="<<tmp<<endl; if(n-2*i>1)tmp+=(n-2*i-1)*qr; else if(n-2*i<-1)tmp+=(2*i-n-1)*ql; //cout<<"tmp="<<tmp<<endl; minn=Min(minn,tmp); } printf("%d\n",minn); }}
CodeForces 355D
CodeForces 355E
题意:求n个数的最大公约数,这n个数可以最大减k。
思路:设该最大公约数为d,a%d<=k 令m=min{ai},若ai%m<=k,则m-1<=k,m<=k+1.
即m<=k+1时,m即为所要找的d。
m>k+1时,ai%m>k,又有ai%d<=d-1,所以k+1是最小的肯定符合情况的数,所以d在区间[k+1,m)中找。
暴力时间复杂度为O(n*k),会T
不去考虑ai%d是不是小于等于k,而是反过来考虑ai在不在范围区间里,[d,d+k],[2d,2d+k]......[xd,xd+k]. (xd+k<=max{ai}+d)
时间复杂度为O(k*logn)
/************************************************************************* File Name: E.cpp ID: obsoles1 PROG: LANG: C++ Mail: 384099319@qq.com Created Time: 2016年07月19日 星期二 10时45分20秒 ************************************************************************/#include<bits/stdc++.h>#define Max(x,y) ((x)>(y)?(x):(y))#define Min(x,y) ((x)<(y)?(x):(y))#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)#define Abs(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))#define ll long long#define Mem0(x) memset(x,0,sizeof(x))#define Mem1(x) memset(x,-1,sizeof(x))#define MemX(x) memset(x,0x3f,sizeof(x))#define pb push_backusing namespace std;const int N=300010,INF=0x3f3f3f3f;int a[N];int main(){ int n,k,i,j,pos1,pos2; while(~scanf("%d%d",&n,&k)){ for(i=0;i<n;++i) scanf("%d",a+i); sort(a,a+n); if(a[0]<=k+1){ printf("%d\n",a[0]); continue; } for(i=a[0];i>k;--i){ int cnt=0; for(j=1;j*i+k<=a[n-1]+i;++j){ pos1=lower_bound(a,a+n,j*i)-a; pos2=lower_bound(a,a+n,j*i+k+1)-a; cnt+=pos2-pos1; } if(cnt==n)break; } printf("%d\n",i); }}
- Codeforces Round #206 (Div. 2)
- Codeforces Round 206 DIV 2
- Codeforces Round #206(Div. 2)
- Codeforces Round #206 (Div. 2)
- Codeforces Round #206 (Div. 2) - b
- Codeforces Round #206 (Div. 2)B
- Codeforces Round #206 (Div. 1)
- Codeforces Round #102 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #104 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #107 (Div. 2)
- Codeforces Round #108 (Div. 2)
- Codeforces Round #110 (Div. 2)
- Codeforces Round #122 (Div. 2)
- Codeforces Round #121 (Div. 2)
- MFC学习笔记——如何使窗口最大化,但不遮盖任务栏
- django Model 继承
- 安卓的访问网络
- 简单消息队列
- 9号中断与10号中断......
- Codeforces Round #206 (Div. 2)
- POJ3624Charm Bracelet,用到了滚动数组(AC)
- SQL语句中where 1=1的作用(正解)
- SpringMVC 基础配置
- Eclipse J2EE Maven 配置
- 利用opencv寻找乒乓球的坐标及大小
- 问一个低级问题:头文件包含#include有何作用与意义?
- 硅谷再次拥抱人工智能,真的是新纪元的开始?
- python运算符