Codeforces 621
来源:互联网 发布:京都 知乎 编辑:程序博客网 时间:2024/05/16 07:12
传送门:
http://codeforces.com/problemset/problem/621/A
sb题
#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=1e5+10;ll a[maxn];int n;int main(){ cin>>n;int sum=0;ll summ=0;ll minn=1e18; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); if(a[i]&1) { minn=min(minn,a[i]);sum++; } summ+=a[i]; } if(sum&1){ summ-=minn; } cout<<summ<<endl;}
B:http://codeforces.com/problemset/problem/621/B
我还是比较喜欢这个写法的,用两个map写,可以将不同的对角线编号左斜和右斜,一个x+y是定值,一个x-y是定值,比我分着4个for循环讨论要优美多了!
优美:
#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n,ans=0;map<ll,ll>M1,M2;int main(){ cin>>n; ll x,y; for(int i=0;i<n;i++){ cin>>x>>y; ans+=M1[x+y]; M1[x+y]++; ans+=M2[x-y]; M2[x-y]++; } cout<<ans; return 0;}
我的屌丝写法:
#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=2e5+10;int a[1005][1005];int n,x,y;ll ans;int main(){ cin>>n;ans=0; for(int i=1;i<=n;i++){ scanf("%d%d",&x,&y);a[x][y]=1; } x=1;y=1;int sum; for(int i=1;i<=1000;i++){ x=1;y=i;sum=0; while(x<=1000&&y<=1000){ if(a[x][y]) sum++; x++;y++; } ans+=sum*(sum-1)/2; }// cout<<"ans="<<ans<<endl; x=1;y=1; for(int i=2;i<=1000;i++){ y=1;x=i;sum=0; while(x<=1000&&y<=1000){ if(a[x][y]) sum++; x++;y++; } ans+=sum*(sum-1)/2; }//cout<<"ans="<<ans<<endl; x=1;y=1; for(int i=1000;i>=1;i--){ x=1;y=i;sum=0; while(x<=1000&&y>=1){ if(a[x][y]) sum++; x++;y--; } ans+=sum*(sum-1)/2; }//cout<<"ans="<<ans<<endl; for(int i=2;i<=1000;i++){ y=1000;x=i;sum=0; while(x<=1000&&y>=1){ if(a[x][y]) sum++; x++;y--; } ans+=sum*(sum-1)/2; }//cout<<"ans="<<ans<<endl; printf("%lld\n",ans);}
C:http://codeforces.com/problemset/problem/621/C
概率题,因为p是质数,所以相邻数中只要有一个能整除p就可以了,因此扫一遍就行了,按对算,1到n,可以把n赋给0,然后正好就是扫一个环了。
#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=1e5+10;const double eps=1e-8;double a[maxn];double sum=0;int n,p,l,r;double cal(double l,double r){ return (double)(1-(1-l)*(1-r));}int main(){ cin>>n>>p; for(int i=1;i<=n;i++){ scanf("%d%d",&l,&r); int num=(r)/p-(l-1)/p; a[i]=(double)num/(double)(r-l+1); // cout<<"a[i]="<<a[i]<<endl; } sum=2000.0*cal(a[1],a[n]); for(int i=1;i<=n-1;i++){ sum+=2000.0*(cal(a[i],a[i+1])); } printf("%.6f\n",sum);}
1 0
- Codeforces 621
- CodeForces 621B
- CodeForces 621B
- CodeForces 621C
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- swift-枚举
- 尾递归
- 取样问题——《编程珠玑》学习笔记
- R语言数据挖掘包
- 得到单精度数
- Codeforces 621
- 其实我还想写篇关于视频播放开发的日志的
- [Spring实战系列](5)Spring应用上下文
- spring setter属性注入
- 函数指针&回调&循环依赖
- spring4.1+mybatis简单配置
- 三层登录实现
- Babylonjs入门--问题小结
- java中(&,&&)和或(|,||)的区别