本文主要是介绍2012 金华 现场赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
A 水题
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define mod 31536000
#define eps 1e-10
typedef __int64 ll;
struct node
{int a,b;double id;
}M[500010];
int cmp(node a,node b)
{return (long long)a.a*b.b<(long long)b.a*a.b;
}
long long sum,time;
int main()
{int i,j,k,n;while(scanf("%d",&n)!=EOF){if(n==0) break;for(i=0;i<n;i++){scanf("%d%d",&M[i].a,&M[i].b);}sort(M,M+n,cmp);sum=0;time=0;for(i=0;i<n;i++){if(M[i].a==0) continue;sum+=(long long)(M[i].a+(long long)time*M[i].b);sum%=mod;time+=(long long)(M[i].a+(long long)time*M[i].b);time%=mod;}//rintf("%lld %lld",time,sum);printf("%lld\n",sum%mod);}return 0;
}
D 枚举每一个角度,不知道是不是数据水,枚举1000次就可以了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;const double PI=acos(-1.0);
const double g = 9.8;
double H,l1,l2,r1,r2;
int n;
double a[300];int cal(double x){int ret = 0;for(int i = 0;i<n;i++){double vx = a[i]*cos(x);double vy = a[i]*sin(x);double V = sqrt(2.0*g*H+vy*vy);double t = (V-vy)/g;double d = 1.0*t*vx;if(d<=r2&&d>=l2) return 0;if(d<=r1&&d>=l1) ret++;}return ret;
}int main(){while(scanf("%d",&n)&&n!=0){scanf("%lf%lf%lf%lf%lf",&H,&l1,&r1,&l2,&r2);for(int i=0;i<n;i++){scanf("%lf",&a[i]);}double add = PI/1000;int ans = 0;for(double i=-PI/2;i<=PI/2;i+=add){ans = max(ans,cal(i));}printf("%d\n",ans);}
}
I 签到题 所有的平方之和
#include <cstdio>
int a[1000];
int main(){int n;while(scanf("%d",&n)&&n!=0){int ans = 0;for(int i = 0;i<n;i++){scanf("%d",&a[i]);ans += a[i]*a[i];}printf("%d\n",ans);}
}
J 题意没有看 直接样例脑补了一下
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;int n,m,k;
int p;
int vis1[2222];
int vis2[2222];
char str1[20];
char str2[20];int main(){while(scanf("%d%d%d",&n,&m,&k)&&n+m+k!=0){scanf("%d",&p);int ans = 0;memset(vis1,0,sizeof(vis1));memset(vis2,0,sizeof(vis2));int a,b;while(p--){scanf("%s%d%s%d",str1,&a,str2,&b);if(str1[0]=='c') {vis1[b]++;ans+=k;}else {vis2[a]++,ans+=n;}}for(int i=1;i<=m;i++){ans-=vis1[i]*vis2[i];}printf("%d\n",n*m*k-ans);}
}
K 题意开始看错了 ,应该是在每一次时间结束才转弯,中间过程碰到是不转弯的
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n;
int time;struct Point
{int dir;int x,y;int s,t;void go_next(){if(dir==0){x-=s;if(x<1) {x=2-x;dir=2;}}else if(dir==1){y-=s;if(y<1) {y=2-y;dir=3;}}else if(dir==2){x+=s;if(x>n) {x=2*n-x;dir=0;}}else{y+=s;if(y>n) {y=n*2-y;dir=1;}}
}
}T,J;int get_dir(char c)
{if(c=='N') return 0;else if(c=='W') return 1;else if(c=='S') return 2;else return 3;
}int main()
{while(scanf("%d",&n)&&n!=0){T.x=T.y=1;J.x=J.y=n;char op[10];scanf("%s%d%d",op,&T.s,&T.t);T.dir=get_dir(op[0]);scanf("%s%d%d",op,&J.s,&J.t);J.dir=get_dir(op[0]);scanf("%d",&time);for(int i=1;i<=time;i++){T.go_next();J.go_next();if(T.x==J.x&&T.y==J.y){swap(T.dir,J.dir);continue;}if(i%T.t==0) T.dir=(T.dir+1)%4;if(i%J.t==0) J.dir=(J.dir+1)%4;}printf("%d %d\n",T.x,T.y);printf("%d %d\n",J.x,J.y);}return 0;
}
这篇关于2012 金华 现场赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!