codeforces 808
A距离下一个lucky 年 还有多少年 lucky 定义是 数字只有一个位不为0
第一位加上1 然后乘上好几个10就可以
#include <iostream> #include<string.h> #include<stdio.h> using namespace std ; #define ll __int64 int dig[15]; ll z[15]; int main() { ll n; scanf("%I64d",&n); int cnt=0; ll a=n; z[0]=1; for(int i=1;i<=10;i++) z[i]=z[i-1]*10; while(a) { dig[cnt++]=a%10; a=a/10; } ll b=(dig[cnt-1]+1)*z[cnt-1]; printf("%I64d\n",b-n); return 0; }
B 求一下平均
#include <iostream> #include<string.h> #include<stdio.h> using namespace std ; #define ll __int64 #define MAXN 200100 double z[MAXN]; int main() { int k,n; while(scanf("%d%d",&n,&k)!=EOF) { z[0]=0; for(int i=1;i<=n;i++) { scanf("%lf",&z[i]); z[i]=z[i]+z[i-1]; } double ans=0; for(int i=k;i<=n;i++) ans=ans+z[i]-z[i-k]; printf("%.7lf\n",ans/(n-k+1)); } return 0; }
C n个茶杯 m是总共的水 然后n个茶杯的大小每个茶杯里至少有一半的水 然后就是杯子大的水不能比杯子小的水少
1 每个至少有一半
2 从大的杯子到小的杯子加水
#include <iostream> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std ; #define ll __int64 #define MAXN 200 int w[MAXN]; struct node { int w,ind; }z[MAXN]; bool cmp(node a,node b) { if(a.w==b.w) return a.ind<b.ind; return a.w>b.w; } int main() { int n,co; while(scanf("%d%d",&n,&co)!=EOF) { memset(w,0,sizeof(w)); for(int i=1;i<=n;i++) { scanf("%d",&z[i].w); z[i].ind=i; } sort(z+1,z+n+1,cmp); for(int i=1;i<=n;i++) { int ind=z[i].ind; w[ind]=(z[i].w+1)/2; co=co-w[ind]; } if(co<0) { printf("-1\n"); continue; } int j=1; while(co>0) { int ind=z[j].ind; int c1=z[j].w-w[ind]; if(co>c1) { co=co-c1; w[ind]=z[j].w; } else { w[ind]=w[ind]+co; co=0; } j++; } for(int i=1;i<n;i++) printf("%d ",w[i]); printf("%d\n",w[n]); } return 0; }
D 移动一个数字到前面 或者移到后面 位子任意 或者不移动 求 前面的一部分 然后剩下的 他们的和相等
列举每一个数 当作移动的 向前 二分x sum[x]-w[i]==sum/2 向后二分... sum[] 是前缀和
nlog(n);
posted on 2017-05-17 16:39 HelloWorld!--By-MJY 阅读(139) 评论(0) 编辑 收藏 举报