[关闭]
@baobaobear 2020-03-08T11:37:01.000000Z 字数 5880 阅读 139

休闲赛18

contest


A OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. const int N = 100010;
  7. int main()
  8. {
  9. int x, res;
  10. scanf("%d", &x);
  11. res = x;
  12. int n = 0;
  13. for(int i = 0; i < 31; i ++)
  14. if(x >> i & 1) n = max(n, i);
  15. for(int i = 0; i < n; i ++)
  16. {
  17. x = (x << 1) % (1 << (n + 1)) | (x >> n & 1);
  18. res = max(res, x);
  19. }
  20. printf("%d", res);
  21. return 0;
  22. }

B OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. const int N = 100010;
  7. int main()
  8. {
  9. int n;
  10. scanf("%d", &n);
  11. for(int i = 0; i < 1 << n; i ++)
  12. {
  13. printf("%d:", i);
  14. for(int j = 0; j < n; j ++)
  15. if(i >> j & 1) printf(" %d", j);
  16. puts("");
  17. }
  18. return 0;
  19. }

C OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. const int N = 100010;
  7. int a[N];
  8. int main()
  9. {
  10. int n, m;
  11. scanf("%d%d", &n, &m);
  12. n --, m --;
  13. int res = n / m;
  14. if(n % m) res ++;
  15. printf("%d", res);
  16. return 0;
  17. }

D Calculus9

  1. #include<stdio.h>
  2. double cal(long long x)
  3. {
  4. long long sum=0,temp=x;
  5. while(x)
  6. {
  7. sum+=x%10;
  8. x/=10;
  9. }
  10. return (double)temp/sum;
  11. }
  12. int main()
  13. {
  14. long long num=0,bot=1,temp1,temp2;
  15. int k;
  16. scanf("%d",&k);
  17. while(1)
  18. {
  19. while(1)
  20. {
  21. temp1=num+bot;
  22. temp2=num+bot*10;
  23. if(cal(temp1)<=cal(temp2))break;
  24. else bot=temp2-num;
  25. }
  26. num+=bot;
  27. printf("%lld\n",num);
  28. k--;
  29. if(!k)break;
  30. }
  31. }

E OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. typedef long long LL;
  7. int num(int x)
  8. {
  9. int res = 0;
  10. while(x) res += x % 10, x /= 10;
  11. return res;
  12. }
  13. int f(int x)
  14. {
  15. int res = 0;
  16. while(x > 9)
  17. {
  18. res += x;
  19. x = num(x);
  20. }
  21. res += x;
  22. return res;
  23. }
  24. int main()
  25. {
  26. int n;
  27. scanf("%d", &n);
  28. for(int i = n; i >= n - 10000 && i >= 1; i --)
  29. {
  30. if(f(i) == n)
  31. {
  32. printf("%d", i);
  33. return 0;
  34. }
  35. }
  36. printf("-1");
  37. return 0;
  38. }

F Calculus9

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. double n,a,b;
  6. scanf("%lf",&n);
  7. a=(double)((int)n+1);
  8. b=sqrt(2)*n;
  9. printf("%.10lf\n",a>b?a:b);
  10. }

G OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<cmath>
  6. #include<set>
  7. #define x first
  8. #define y second
  9. using namespace std;
  10. typedef pair<int, int> PII;
  11. typedef long long LL;
  12. const int N = 1010;
  13. const LL INF = 1e18;
  14. PII a[N];
  15. set<PII> S;
  16. int main()
  17. {
  18. int n;
  19. scanf("%d", &n);
  20. for(int i = 0; i < n; i ++)
  21. {
  22. scanf("%d%d", &a[i].x, &a[i].y);
  23. S.insert({a[i].x, a[i].y});
  24. }
  25. LL res = INF;
  26. for(int i = 0; i < n; i ++)
  27. for(int j = i + 1; j < n; j ++)
  28. {
  29. int x1 = a[i].x, y1 = a[i].y;
  30. int x2 = a[j].x, y2 = a[j].y;
  31. if(x1 == x2 || y1 == y2) continue;
  32. if(S.count({x1, y2}) && S.count({x2, y1}))
  33. res = min(res, (LL)abs(x1 - x2) * abs(y1 - y2));
  34. }
  35. if(res == INF) res = -1;
  36. printf("%lld", res);
  37. return 0;
  38. }

H

I OUHE_csc

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. typedef long long LL;
  7. const int N = 55, M = 100010, INF = 0x3f3f3f3f;
  8. int w[N];
  9. int f[M];
  10. int main()
  11. {
  12. int n, t = 1;
  13. while(scanf("%d", &n), n)
  14. {
  15. bool flag = true;
  16. for(int i = 1; i <= n; i ++)
  17. {
  18. scanf("%d", &w[i]);
  19. if(i > 1 && w[i] % w[i - 1]) flag = false;
  20. }
  21. if(w[1] != 1) printf("Case #%d: Cannot pay some amount\n", t ++);
  22. else if(flag) printf("Case #%d: OK\n", t ++);
  23. else{
  24. int m = w[n] * 2;
  25. f[0] = 0;
  26. for(int i = 1; i <= m; i ++) f[i] = INF;
  27. for(int i = 1; i <= n; i ++)
  28. for(int j = w[i]; j <= m; j ++)
  29. f[j] = min(f[j], f[j - w[i]] + 1);
  30. flag = true;
  31. for(int i = 1; i <= m; i ++)
  32. {
  33. int x = i, res = 0;
  34. for(int j = n; j && x; j --)
  35. {
  36. res += x / w[j];
  37. x %= w[j];
  38. }
  39. if(res > f[i])
  40. {
  41. flag = false;
  42. break;
  43. }
  44. }
  45. if(flag) printf("Case #%d: OK\n", t ++);
  46. else printf("Case #%d: Cannot use greedy algorithm\n", t ++);
  47. }
  48. }
  49. return 0;
  50. }

J Calculus9

  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<algorithm>
  4. using namespace std;
  5. struct crystal{double x,y;}p[100005],q[100005];
  6. bool cmpx(struct crystal a,struct crystal b){return a.x<b.x;}
  7. bool cmpy(struct crystal a,struct crystal b){return a.y<b.y;}
  8. double dis(struct crystal a,struct crystal b){double x=a.x-b.x,y=a.y-b.y;return sqrt(x*x+y*y);}
  9. double getMin(double a,double b){return a<b?a:b;}
  10. double ans=-1;
  11. void closest(int l,int r)
  12. {
  13. if(r-l==1)
  14. {
  15. if(dis(p[l],p[r])<ans||ans<0)ans=dis(p[l],p[r]);
  16. return ;
  17. }
  18. else if(r-l==2)
  19. {
  20. double temp=getMin(getMin(dis(p[l],p[l+1]),dis(p[l],p[l+2])),dis(p[l+1],p[l+2]));
  21. if(temp<ans||ans<0)ans=temp;
  22. return ;
  23. }
  24. int mid=(r+l)/2,c=0;
  25. closest(l,mid);
  26. closest(mid+1,r);
  27. for(int i=mid;i>=l;i--)
  28. {
  29. if(p[mid].x-p[i].x<ans)
  30. {
  31. q[c].x=p[i].x;
  32. q[c].y=p[i].y;
  33. c++;
  34. }
  35. else break;
  36. }
  37. for(int i=mid+1;i<=r;i++)
  38. {
  39. if(p[i].x-p[mid].x<ans)
  40. {
  41. q[c].x=p[i].x;
  42. q[c].y=p[i].y;
  43. c++;
  44. }
  45. else break;
  46. }
  47. sort(q,q+c,cmpy);
  48. for(int i=0;i<c;i++)
  49. {
  50. for(int j=i+1;j<c&&q[j].y-q[i].y<ans;j++)
  51. {
  52. if(q[j].y-q[i].y>ans)break;
  53. else if(dis(q[i],q[j])<ans||ans<0)ans=dis(q[i],q[j]);
  54. }
  55. }
  56. }
  57. int main()
  58. {
  59. int n;
  60. while(scanf("%d",&n)!=EOF&&n)
  61. {
  62. ans=-1;
  63. for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
  64. sort(p,p+n,cmpx);
  65. closest(0,n-1);
  66. printf("%.8lf\n",ans);
  67. }
  68. }

K Calculus9

  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. const int mod=1e9+7;
  5. long long pre[100005]={1},a[100005],ans=0;
  6. int n,k;
  7. bool cmp(long long a,long long b)
  8. {
  9. return a<b;
  10. }
  11. /*快速幂板子*/
  12. long long qmul(long long a,long long b)
  13. {
  14. long long res=1;
  15. while(b)
  16. {
  17. if(b&1)res=res*a%mod;
  18. a=a*a%mod;
  19. b>>=1;
  20. }
  21. return res;
  22. }
  23. /*组合数板子*/
  24. long long C(long long a,long long b)
  25. {
  26. if(a<=0||b<=0||a<b)return 0;
  27. long long k1=pre[a]%mod;
  28. long long k2=qmul(pre[b]%mod,mod-2)%mod;
  29. long long k3=qmul(pre[a-b]%mod,mod-2)%mod;
  30. return ((k1*k2)%mod*k3)%mod;
  31. }
  32. int main()
  33. {
  34. scanf("%d%d",&n,&k);
  35. for(int i=0;i<n;i++)scanf("%lld",&a[i]);
  36. sort(a,a+n,cmp);
  37. pre[0]=1;
  38. for(int i=1;i<=n;i++)pre[i]=pre[i-1]*i%mod;
  39. for(int i=0;i<n;i++)
  40. {
  41. if(n-i-1>=k-1)ans+=(mod-C(n-i-1,k-1))*a[i]%mod;
  42. if(i>=k-1)ans+=C(i,k-1)%mod*a[i]%mod;
  43. ans%=mod;
  44. }
  45. while(ans<0)ans+=mod;
  46. printf("%lld\n",ans%mod);
  47. }

L _Wallace_

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. using namespace std;
  5. const int N=1e6+7;
  6. int Array[N];
  7. namespace SGTree{
  8. int L[N<<2],R[N<<2];
  9. vector<int> dat[N<<2];
  10. void build(int l,int r,int rt=1)
  11. {
  12. L[rt]=l,R[rt]=r;
  13. if(l==r)
  14. {
  15. dat[rt].resize(1);
  16. dat[rt][0]=Array[l];
  17. return;
  18. }
  19. int mid=(l+r)>>1;
  20. build(l,mid,rt<<1),build(mid+1,r,rt<<1|1);
  21. dat[rt].resize(r-l+1);
  22. merge(dat[rt<<1].begin(),dat[rt<<1].end(),
  23. dat[rt<<1|1].begin(),dat[rt<<1|1].end(),
  24. dat[rt].begin());
  25. }
  26. int count(int l,int r,int x,int y,int rt=1)//count elements which is in [x,y]
  27. {
  28. if(l<=L[rt]&&R[rt]<=r)
  29. return upper_bound(dat[rt].begin(),dat[rt].end(),y)
  30. -lower_bound(dat[rt].begin(),dat[rt].end(),x);
  31. int mid=(L[rt]+R[rt])>>1,ret=0;
  32. if(l<=mid) ret+=count(l,r,x,y,rt<<1);
  33. if(r>mid) ret+=count(l,r,x,y,rt<<1|1);
  34. return ret;
  35. }
  36. }
  37. int n,m;
  38. signed main()
  39. {
  40. scanf("%d",&n);
  41. for(register int i=1;i<=n;i++)
  42. scanf("%d",Array+i);
  43. SGTree::build(1,n);
  44. scanf("%d",&m);
  45. int i,j,k,a,b;
  46. while(m--)
  47. {
  48. scanf("%d%d%d",&i,&j,&k);
  49. a=min(Array[i],Array[j])-k;
  50. b=max(Array[i],Array[j])+k;
  51. printf("%d\n",(j-i+1)-SGTree::count(i,j,a,b));
  52. }
  53. return 0;
  54. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注