第10届 “新秀杯” ACM程序设计大赛网络预选赛 部分代码~
来源:互联网 发布:远程控制软件源代码 编辑:程序博客网 时间:2024/06/06 01:46
A 世界是平的
#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>#include <set>#include <cstring>#include <queue>using namespace std;struct point3{ double x,y,z;};struct line3{ point3 a,b;};struct plane3{ point3 a,b,c;};long long dmult(point3 u,point3 v){ return u.x*v.x+u.y*v.y+u.z*v.z;}point3 xmult(point3 u,point3 v){ point3 ret; ret.x=u.y*v.z-v.y*u.z; ret.y=u.z*v.x-u.x*v.z; ret.z=u.x*v.y-u.y*v.x; return ret;}point3 subt(point3 u,point3 v){ point3 ret; ret.x=u.x-v.x; ret.y=u.y-v.y; ret.z=u.z-v.z; return ret;}point3 pvec(point3 s1,point3 s2,point3 s3){ return xmult(subt(s1,s2),subt(s2,s3));}int dots_onplane(point3 a,point3 b,point3 c,point3 d){ return dmult(pvec(a,b,c),subt(d,a))==0;}double vlen(point3 p){ return sqrt(p.x*p.x+p.y*p.y+p.z*p.z);}int dots_inline(point3 p1,point3 p2,point3 p3){ return vlen(xmult(subt(p1,p2),subt(p2,p3)))==0;}point3 p[100005];int main(){ int n; //freopen("14.in","r",stdin); while(scanf("%d",&n)==1) { //memset(p,0,sizeof(p)); for(int i=0; i<n; ++i) { scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z); } //cout<<dots_inline(p[0],p[1],p[2])<<endl; if(n<=3) { puts("Yes"); continue; } int pos=0; for(int i=2;i<n;++i){ if(!dots_inline(p[0],p[1],p[i])){ pos=i; break; } } bool f=true; for(int i=2; i<n; ++i) { //cout<<dots_onplane(p[0],p[1],p[2],p[i])<<endl; if(!dots_onplane(p[0],p[1],p[pos],p[i])) { f=false; break; } } if(f)puts("Yes"); else puts("No"); } return 0;}
Problem C:心如刀割
只能套模板 还是不清楚怎么做的 还是等标程出来吧
#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>#include <set>#include <cstring>#include <queue>using namespace std;struct point{ double x, y, z; int f;} pa[1005], pb[1005];double xx,yy,zz;int f;int main(){ int n, m, i; while (scanf("%d", &n)==1) { int cnta=0,cntb=0; for(i=0;i<n;++i){ scanf("%lf%lf%lf%d", &xx,&yy,&zz,&f); if(f==1){ pa[cnta].x=xx; pa[cnta].y=yy; pa[cnta++].z=zz; } if(f==-1){ pb[cntb].x=xx; pb[cntb].y=yy; pb[cntb++].z=zz; } } int cnt = 0, finish = 0; double a = 0, b = 0, c = 0, d = 0; while (cnt < 100005 && !finish) { finish = 1; for (i = 0; i < cnta; i++) if (a * pa[i].x + b * pa[i].y + c * pa[i].z + d > 0) { a -= pa[i].x; b -= pa[i].y; c -= pa[i].z; d -= 3; finish = 0; } for (i = 0; i < cntb; i++) if (a * pb[i].x + b * pb[i].y + c * pb[i].z + d <= 0) { a += pb[i].x; b += pb[i].y; c += pb[i].z; d += 3; finish = 0; } cnt++; } if(cnt==100005)puts("No"); else puts("Yes"); } return 0;}
Problem E:不幸的程序猿
跑了JAVA的大数 节约时间 C取模需要注意好
公式:X=[N/2]-1 []代表取整
答案ans=(x+1)*x/2+((N-1)*N*(2N-1)-X(X+1)(2X+1))/6
import java.math.BigDecimal;import java.math.BigInteger; import java.util.Scanner; import java.io.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner (new BufferedInputStream(System.in)); BigInteger N,m,ans1,ans2,ans,x,TWO=BigInteger.valueOf(2); int n; while(cin.hasNext()){ n=cin.nextInt(); N=BigInteger.valueOf(n); m=cin.nextBigInteger(); m=m.add(BigInteger.ONE); if(n==0){ System.out.println(0); continue; } else if(n==1){ System.out.println(0); continue; } else if(n==2){ System.out.println(BigInteger.ONE.mod(m)); continue; } else if(n==3){ System.out.println(BigInteger.valueOf(5).mod(m)); continue; } x=BigInteger.valueOf(n/2-1); //System.out.println(x); ans1=(x.add(BigInteger.ONE)).multiply(x).divide(TWO); ans2=(((N.subtract(BigInteger.ONE)).multiply(N).multiply(N.multiply(TWO).subtract(BigInteger.ONE))).subtract(ans1.multiply(TWO).multiply(TWO.multiply(x).add(BigInteger.ONE)))).divide(BigInteger.valueOf(6)); System.out.println(ans1.add(ans2).mod(m)); } } }
Problem F:反转操作
规律题 可以先求第K位是什么数再反推
#include <iostream>#include <set>#include <cstring>#include <map>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>using namespace std;int main(){ //freopen("data.in","w",stdout); //ios::sync_with_stdio(false); //cin.tie(0); int t,n,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); if(n%2==0) { if(k<=n/2-1) { printf("%d\n",k*2+1); } else { printf("%d\n",(n-k-1)*2); } } else { if(k<(n-1)/2) { printf("%d\n",k*2+1); } else { printf("%d\n",(n-k-1)*2); } } } return 0;}
Problem G:异或序列
可以推出每位数前的系数为 (n-i+1)*i 再根据偶数个数异或为0的特性判断 若为奇数个则对其进行一次异或操作
#include <iostream>#include <set>#include <cstring>#include <map>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>using namespace std;int main(){ //freopen("data.in","r",stdin); //ios::sync_with_stdio(false); //cin.tie(0); int t,n; long long a,ans; scanf("%d",&t); while(t--){ scanf("%d",&n); ans=0; for(long long i=1;i<=n;++i){ scanf("%lld",&a); if(((n-i+1)*i)%2==1)ans^=a; } printf("%lld\n",ans); } return 0;}
Problem I:去重数组
利用set容器的去重性 一开始就看到了这题 12s的时候就出了 ^_^
#include <iostream>#include <set>#include <cstring>#include <map>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>using namespace std;set<int>s;int main(){ //freopen("data.in","r",stdin); //ios::sync_with_stdio(false); //cin.tie(0); int n,a; while(scanf("%d",&n)==1){ s.clear(); for(int i=0;i<n;++i){ scanf("%d",&a); s.insert(a); } printf("%d\n",s.size()); } return 0;}
0 0
- 第10届 “新秀杯” ACM程序设计大赛网络预选赛 部分代码~
- 第十三届ACM"新秀杯"程序设计大赛网络热身赛(泉水题)
- 2013年"新秀杯"程序设计网络预选赛参考题解
- 第八届郑州轻工业学院ACM程序设计大赛校内预选赛
- 广东工业大学第12届ACM程序设计大赛部分题解
- 2012年"新秀杯"程序设计比赛——网络预选赛参考题解
- 大连,第36届ACM国际大学生程序设计竞赛,亚洲区大连赛区预选赛
- ACM/ICPC黑龙江省第四届大学生程序设计竞赛网络预选赛有感
- 第九届 北邮程序设计大赛网络赛 部分题解
- 2013年"新秀杯"程序设计网络资格赛参考题解
- “玲珑杯”郑州轻工业学院第九届ACM程序设计大赛圆满结束
- 2008年第33届ACM/ICPC亚洲区预赛(合肥)网络预选赛_1007 The Luckies number
- 第十八届中山大学程序设计竞赛网络预选赛B题
- 中南大学第九届大学生程序设计竞赛网络预选赛
- 安徽大学第九届大学生程序设计竞赛 网络预选赛
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 A
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 B
- 安徽大学第九届大学生程序设计竞赛 网络预选赛 C
- 内部类的继承-内部类
- C++ 虚函数表解析
- Hello CSDN!
- HDU 3035 War(对偶图求最小割)
- 进程与线程及其区别
- 第10届 “新秀杯” ACM程序设计大赛网络预选赛 部分代码~
- MYSQL EXPLAIN
- Redis源码学习4-基本数据结构之字典
- HDU 1047 大数相加
- TextView中ellipsize属性
- 数学之美(吴军著)学习总结和经典摘抄
- Android常用 adb 命令
- 如何上传Android应用到百度应用平台
- 行列转换