[关闭]
@darkproject 2018-03-07T15:48:10.000000Z 字数 1866 阅读 771

cf and at

oj


Codeforces 938.C Constructing Tests

nxn的矩阵,只含有0和1两种元素,要求使每个mxm的矩阵(这个矩阵为nxn矩阵的子矩阵)至少含有一个0,求得最多的1的元素个数。此题并不要求输出最多的1的个数。而要求的是给1的个数,输出对应的n和m。
,x为元素1的个数。方程可以转化为利用筛法对x分解,分别代表,细节问题看代码注释。

  1. #include <bit/stdc++.h>
  2. int t;
  3. int main(){
  4. scanf("%d",&t);
  5. while(t--){
  6. int x; scanf("%d",&x);
  7. if(!x){
  8. printf("1 1\n"); continue;
  9. }
  10. bool suc=0;
  11. for(int i=1;i*i<x;++i) if(x%i==0){
  12. int t=x/i;
  13. if((t+i)%2) continue;//如果2*n不是偶数求得的n不是正确值。
  14. int n=(t+i)/2,m=(t-i)/2;
  15. if(n/(n/m)==m){//判断m是否正确
  16. suc=1; printf("%d %d\n",n,n/m); break;
  17. }
  18. }
  19. if(!suc) printf("-1\n");
  20. }
  21. }

Codeforces Round #465(Div2) C. Fifa and Fafa(计算几何+数论)

Fifa想要在公寓使用网络,公寓范围是一个以(x1,y1)为圆心,r为半径的圆,Fifa想要设置一个网络覆盖区域,这个区域也是一个圆。而要求覆盖范围不超出公寓外且不包括Fafa这个点(x2,y2),且使没覆盖的公寓范围最小。输出设置的网络区域的圆心和半径。
分三种情况讨论,一种Fafa在公寓范围外或上,一种与公寓圆心重合,另一种在公寓内。前2种比较好处理,最后一种看图解。

此处输入图片的描述

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. using namespace std;
  6. double r,x1,y1,x2,y2;
  7. int main()
  8. {
  9. cin>>r>>x1>>y1>>x2>>y2;
  10. double d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
  11. double R=(sqrt(d)+r)/2;
  12. if(d>=r*r)
  13. printf("%.7f %.7f %.7f",x1,y1,r);
  14. else if(d==0)
  15. printf("%.7f %.7f %.7f",x1,y1+r/2,r/2);
  16. else{
  17. double dx=x1-x2;
  18. double dy=y1-y2;
  19. printf("%.7f %.7f %.7f",x2+dx*R/sqrt(d),y2+dy*R/sqrt(d),R);
  20. }
  21. return 0;
  22. }

bjtu1819 二哥的求和

给一个长度为n的数组,求出公式。给出q个查询,查询区间[l,r]的公式的值。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. const int maxn = 1e5+5;
  7. int t,q,n;
  8. long long mxr[maxn],hyx[maxn],a[maxn];
  9. //https://citel.bjtu.edu.cn/acm/oj/problem/1819
  10. //将图中式子拆分为a[i]*(i+1)-a[i];
  11. //维护前缀和得到正确答案
  12. int main()
  13. {
  14. int cnt=1;
  15. scanf("%d",&t);
  16. while(t--)
  17. {
  18. scanf("%d",&n);
  19. for(long long i=1;i<=n;i++)
  20. {
  21. scanf("%lld",&a[i]);
  22. mxr[i]=mxr[i-1]+a[i];
  23. hyx[i]=hyx[i-1]+a[i]*(i+1);
  24. }
  25. scanf("%d",&q);
  26. printf("Case %d: \n",cnt++);
  27. while(q--)
  28. {
  29. long long l,r;
  30. scanf("%lld%lld",&l,&r);
  31. long long ans=(hyx[r]-hyx[l-1])-(mxr[r]-mxr[l-1])*l;
  32. printf("%lld\n",ans);
  33. }
  34. }
  35. return 0;
  36. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注