130804组队练习赛ZOJ校赛
A.Ribbon Gymnastics
题目要求四个点作圆,且圆与圆之间不能相交的半径之和的最大值。我当时想法很简单,只要两圆相切,它们的半径之和一定最大,但是要保证不能相交的话就只能取两两个点间距离和最短的作为半径和最大的。到现在也不是非常清楚为什么可以A,我们带错节奏了。。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<cmath>
- #define exp 1e-10
- using namespace std;
- inline void RD(int &ret)
- {
- char c;
- do
- {
- c=getchar();
- }
- while(c<'0'||c>'9');
- ret=c-'0';
- while((c=getchar())>='0'&&c<='9')
- {
- ret=ret*10+(c-'0');
- }
- }
- inline void OT(int a)
- {
- if(a>=10)
- {
- OT(a/10);
- }
- putchar(a%10+'0');
- }
- double x[4],y[4];
- double getdis(int i ,int j)
- {
- return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
- }
- int main()
- {
- int i;
- double s1,s2,s3;
- while(scanf("%lf%lf",&x[0],&y[0])!=EOF)
- {
- for(i=1; i<4; i++)
- {
- scanf("%lf%lf",&x[i],&y[i]);
- }
- s1=getdis(0,1)+getdis(2,3);
- s2=getdis(1,2)+getdis(0,3);
- s3=getdis(0,2)+getdis(1,3);
- printf("%.6f\n",min(s1,min(s2,s3)));
- }
- return 0 ;
- }
E.Magnet Darts
一道计算几何题,计算落在距离要求点一个单位正方形范围内的点都需要得到一个分数,求期望。由于读错题意,想太复杂了。。。
我们可以枚举矩形内的所有整点,判断整点是否在要求的多边形内或边缘,计算整点周围区域面积乘以分数,相加求和,再与平面总面积相除,求期望。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<cmath>
- #define exp 1e-10
- using namespace std;
- inline void RD(int &ret)
- {
- char c;
- do
- {
- c=getchar();
- }
- while(c<'0'||c>'9');
- ret=c-'0';
- while((c=getchar())>='0'&&c<='9')
- {
- ret=ret*10+(c-'0');
- }
- }
- inline void OT(int a)
- {
- if(a>=10)
- {
- OT(a/10);
- }
- putchar(a%10+'0');
- }
- struct xl
- {
- double x,y;
- }p[22];
- int n;
- int f2(double x)//判断是否为零
- {
- if(fabs(x)<exp)
- {
- return 0;
- }
- else
- {
- if(x<0)
- {
- return -1;
- }
- else
- {
- return 1;
- }
- }
- }
- double f1(xl p1,xl p2,xl p0)//判断边缘
- {
- return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
- }
- double f3(xl p1,xl p2,xl p0)//判断内部
- {
- return (p1.x-p0.x)*(p2.x-p0.x)+(p2.y-p0.y)*(p1.y-p0.y);
- }
- bool f(xl z)
- {
- int i,j=0;
- xl p1,p2;
- for(i=0;i<n;++i)
- {
- p1=p[i];
- p2=p[(i+1)%n];
- if(f2(f1(p1,p2,z))==0&&f2(f3(p1,p2,z))<=0)
- {
- return true;
- }
- if(f2(f1(p2,z,p1))>0&&f2(p1.y-z.y)<=0&&f2(p2.y-z.y)>0)
- {
- j++;
- }
- if(f2(f1(p2,z,p1))<0&&f2(p1.y-z.y)>0&&f2(p2.y-z.y)<=0)
- {
- j--;
- }
- }
- if(j!=0)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- int main()
- {
- xl a,b,z;
- int i,j;
- double sum,ans,lx,ly,hx,hy,A,B;
- while(scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y)!=EOF)
- {
- RD(n);
- scanf("%lf%lf",&A,&B);
- for(i=0;i<n;++i)
- {
- scanf("%lf%lf",&p[i].x,&p[i].y);
- }
- sum=(a.x-b.x)*(a.y-b.y);
- ans=0.0;
- for(i=a.x;i<=b.x;++i)
- {
- for(j=a.y;j<=b.y;++j)
- {
- z.x=i;
- z.y=j;
- if(f(z)==true)//求区域面积分数
- {
- lx=max(i-0.5,a.x);
- ly=max(j-0.5,a.y);
- hx=min(i+0.5,b.x);
- hy=min(j+0.5,b.y);
- ans+=(hx-lx)*(hy-ly)*(A*i+B*j);
- }
- }
- }
- printf("%.3f\n",ans/sum);
- }
- return 0;
- }
F.Final Exam Arrangement
一道水贪心,找到相应区间标记下就行了。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<cmath>
- #define exp 1e-10
- using namespace std;
- inline void RD(int &ret)
- {
- char c;
- do
- {
- c=getchar();
- }
- while(c<'0'||c>'9');
- ret=c-'0';
- while((c=getchar())>='0'&&c<='9')
- {
- ret=ret*10+(c-'0');
- }
- }
- inline void OT(int a)
- {
- if(a>=10)
- {
- OT(a/10);
- }
- putchar(a%10+'0');
- }
- struct xl
- {
- int x,y,id;
- } s[100001];
- bool cmp(xl x,xl y)//结构体排序
- {
- if(x.x==y.x)
- {
- return x.y<y.y;
- }
- return x.x<y.x;
- }
- int main()
- {
- int i,n,j,r;
- bool v[100001];
- while(scanf("%d",&n)!=EOF)
- {
- for(i=0; i<n; ++i)
- {
- RD(s[i].x);
- RD(s[i].y);
- s[i].id=i+1;
- }
- sort(s,s+n,cmp);
- j=0;
- r=-1;
- for(i=0; i<n; ++i)
- {
- v[i]=false;//标记
- if(s[i].x>=r)
- {
- r=s[i].y;
- j++;
- v[i]=true;
- }
- r=min(r,s[i].y);
- }
- OT(j);
- for(i=0; i<n; ++i)
- {
- if(v[i])
- {
- printf("\n");
- OT(s[i].id);
- }
- else
- {
- printf(" ");
- OT(s[i].id);
- }
- }
- printf("\n\n");
- }
- return 0;
- }
J.Painting Storages
一道排列组合的题目,需要找到状态分解:
当dp[i-1]已经满足状况了:dp[i]=dp[i-1]*2;
当dp[i-1]还没满足状况,则[i-m+1,i]区间则用来满足条件,则i-m必为蓝色,所以dp[i-m-1]不能包括在内。所以需要dp[i-1]+pow(2,i-m-1)-dp[i-m-1];
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<cmath>
- #define N 1000000007
- using namespace std;
- inline void RD(int &ret)
- {
- char c;
- do
- {
- c=getchar();
- }
- while(c<'0'||c>'9');
- ret=c-'0';
- while((c=getchar())>='0'&&c<='9')
- {
- ret=ret*10+(c-'0');
- }
- }
- inline void OT(int a)
- {
- if(a>=10)
- {
- OT(a/10);
- }
- putchar(a%10+'0');
- }
- long long dp[100001],a[100001];
- void f()
- {
- a[0]=1;
- int i;
- for(i=1; i<100001; ++i)//构造2次幂表
- {
- a[i]=a[i-1]*2%N;
- }
- }
- int main()
- {
- f();
- int i,n,m;
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- memset(dp,0,sizeof(dp));
- dp[m]=1;
- for(i=m+1; i<=n; ++i)
- {
- dp[i]=((dp[i-1]*2%N+a[i-m-1])%N-dp[i-m-1]+N)%N;//状态递推过程
- }
- cout<<dp[n]<<endl;
- }
- return 0 ;
- }
130804组队练习赛ZOJ校赛的更多相关文章
- ZOJ 3955 Saddle Point 校赛 一道计数题
ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- SCNU省选校赛第二场B题题解
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...
- 2014上半年acm总结(1)(入门+校赛)
大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干= = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...
- 2017CUIT校赛-线上赛
2017Pwnhub杯-CUIT校赛 这是CUIT第十三届校赛啦,也是我参加的第一次校赛. 在被虐到崩溃的过程中也学到了一些东西. 这次比赛是从5.27早上十点打到5.28晚上十点,共36小时,中间睡 ...
- HZNU第十二届校赛赛后补题
愉快的校赛翻皮水! 题解 A 温暖的签到,注意用gets #include <map> #include <set> #include <ctime> #inclu ...
- 校赛F
问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...
- PKU2018校赛 H题 Safe Upper Bound
http://poj.openjudge.cn/practice/C18H 题目 算平均数用到公式\[\bar{x}=\frac{x_1+x_2+x_3+\cdots+x_n}{n}\] 但如果用in ...
- 【魔改】hdu6325 多校赛3G xy排序凸包+llvector模板
凸包算法前的预处理,可以极角排序,也可以按X,Y轴排序, 极角排序需要找到角落里的一个点,Xy轴排序要跑两遍凸包 而本题的要求只要一个上半凸包,并且有X轴从小到大以及字典序限制,完全符合xy排序,直接 ...
随机推荐
- Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径
注意:1. 模板需放在 WEB-INF 目录下2. 指定模板路径时不需要添加扩展名, Spring将自动添加 .xls 到URL 属性中.3. 在指定URL前需先设置 view 的 Applicat ...
- iBatis之Iterator的使用
一:前言 现在这个项目使用的是iBatis,我刚刚开始的时候说是用MyBatis,因为我以前用过,觉得还是比较好用的啊,而且不像iBatis样,查什么一个字段不能多也不能少,觉得好无语啊. 二:内容 ...
- 【hdu1712】分组背包(每组最多选1个)
[分组背包] [题意]ACboy要开始选课了,上一门课能够获得的收益和他上这门课的时间是有关的,然后给你若干门课,让你帮他进行选课,每一门课自然是只能选择一个课程时长,问你如何选择,才能使ACboy获 ...
- unity下的Line of Sight(LOS)的绘制
先说说什么是Linf of Sight.在很多RTS游戏中,单位与单位之间的视野关系经常会受到障碍物遮挡.Line of Sight指的就是两个物体之间是否没有障碍物遮挡. 比如在dota中,玩家的视 ...
- bzoj 1951 lucas crt 费马小定理
首先假设输入的是n,m 我们就是要求m^(Σ(c(n,i) i|n)) mod p 那么根据费马小定理,上式等于 m^(Σ(c(n,i) i|n) mod (p-1)) mod p 那么问题的关键就 ...
- vue指令v-bind
v-bind用于绑定 html 属性,通常会将v-bind缩写(如"v-bind:class"可缩写成":class"): v-bind除了可以绑定字符串类型变 ...
- Git-回滚操作
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit git log 查询回滚版本唯一commit标识代码 git reset --ha ...
- 获取span中的值
js-code:var baseinfoallfeesum=$("#allFeeSum").html(); $("#baseInfoAllFeeSum").va ...
- mysql约束与索引的区别
一:约束 作用:是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具(约束): 这里主要讲解mysql的约束: 1.非空约束:not null; 指示某列不能存储 ...
- [ Openstack ] Openstack-Mitaka 高可用之 Mariadb-Galera集群部署
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...