weak win 第一期
2016-07-28 11:10
411 查看
目前还只做了ACD
等今天打完多校再补一下E,F? B题 题意真的读不懂
A
给你一个大圆(半径为R),再给你n个小圆(半径为r),问你如果把小圆放进大圆里面(在边缘都有接触的情况下),能否把n个小圆都放进去;
感觉关键条件就是:每个小圆都要贴着大圆放,那么所有的小圆圆心都是落在一个半径为(R-r)的圆上,然后2*pi 就被分为了n份,在 顶角为2 * pi/n 的等腰三角形中(腰为R-r), 我们只需要满足 (R-r)* sin(2pi/n/2) >=r,即可 ,注意 这个精度要达到 10-9, 之前就是eps写成1e-6 所以wa了。
C
给你一串数字,可能有多个数字相同,然后问你最多可以选多少组 3个各不相同的数字出来。 并输出(输出按组内从大到小输出)
比如: 1 2 2 3 4 5
就可以是 1 2 3 和 2 4 5 两组。
一开始想了很多 优先队列乱搞的方法,但是都是在乱搞= =。 最后发现我们只要每次都选出现的最多的那三个就好了, 于是用优先队列搞了一下,这里就顺便可以复习一下优先队列的自定义规则如何写:
D 敢写敢过,就不说啦
等今天打完多校再补一下E,F? B题 题意真的读不懂
A
给你一个大圆(半径为R),再给你n个小圆(半径为r),问你如果把小圆放进大圆里面(在边缘都有接触的情况下),能否把n个小圆都放进去;
感觉关键条件就是:每个小圆都要贴着大圆放,那么所有的小圆圆心都是落在一个半径为(R-r)的圆上,然后2*pi 就被分为了n份,在 顶角为2 * pi/n 的等腰三角形中(腰为R-r), 我们只需要满足 (R-r)* sin(2pi/n/2) >=r,即可 ,注意 这个精度要达到 10-9, 之前就是eps写成1e-6 所以wa了。
int main(){ int n,R,r; scanf("%d %d %d",&n,&R,&r); if(n==1) R>=r?printf("YES\n"):printf("NO\n"); else{ sin(pi*1.0/n)*(R-r) >= r-eps?printf("YES\n"):printf("NO\n"); } return 0; }
C
给你一串数字,可能有多个数字相同,然后问你最多可以选多少组 3个各不相同的数字出来。 并输出(输出按组内从大到小输出)
比如: 1 2 2 3 4 5
就可以是 1 2 3 和 2 4 5 两组。
一开始想了很多 优先队列乱搞的方法,但是都是在乱搞= =。 最后发现我们只要每次都选出现的最多的那三个就好了, 于是用优先队列搞了一下,这里就顺便可以复习一下优先队列的自定义规则如何写:
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<stdlib.h> #include<queue> #include<stack> #include<map> #include<vector> #define mem(a) memset(a,0,sizeof(a)) #define fr(i,n) for(int i=0;i<n;i++) const double pi = acos(-1.0); #define eps 1e-9 const double e = exp(1.0); template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; } template<class T> inline T Min(T a, T b) { return a < b ? a : b; } template<class T> inline T Max(T a, T b) { return a > b ? a : b; } bool cmpbig(int a,int b){return a>b;} bool cmpsmall(int a,int b){return a<b;} using namespace std; int r[100005]; int ans[100005][5]; map<int,int> mp; struct cmp{ bool operator()(int &a,int &b){ if(mp[a]==mp[b]) return a<b; //队列内 按从大到小排列 else return mp[a]<mp[b]; //按出现次数从大到小排列 } }; bool cmp2(int a,int b){ return a>b; } int main(){ int n; scanf("%d",&n); priority_queue<int, vector<int>, cmp > q; for(int i=1;i<=n;i++){ scanf("%d",&r[i]); mp[r[i]]++; } map<int ,int> flag; for(int i=1;i<=n;i++){ if(!flag[r[i]]){ q.push(r[i]); flag[r[i]]++; } } int size=0; while(q.size()>2){ int a,b,c; a=q.top(),q.pop(),mp[a]--; b=q.top(),q.pop(),mp[b]--; c=q.top(),q.pop(),mp[c]--; ans[size][1]=a; ans[size][2]=b; ans[size][3]=c; size++; if(mp[a]) q.push(a); if(mp[b]) q.push(b); if(mp[c]) q.push(c); } printf("%d\n",size); for(int i=0;i<size;i++){ sort(ans[i]+1,ans[i]+4,cmp2); printf("%d %d %d\n",ans[i][1],ans[i][2],ans[i][3]); } return 0; }
D 敢写敢过,就不说啦
相关文章推荐
- linux vsftpd 创建虚拟用户
- commons-dbcp连接池的使用
- Activityd的四种启动模式
- 《Java多线程之CAS》
- 什么是XMLA-- XML for Analysis
- 1、Java多线程基础:进程和线程之由来
- 利用更改Windows7粘滞键漏洞破解登录密码
- AndroidUI高级之十六使用Intent进行通信
- 格
- PyGobject(三十一)布局容器之EventBox
- 进程间通信之管道
- javaweb中使用百度、谷歌地图进行定位
- springboot 配置多数据源
- 深度探索C++对象模型——学习笔记3
- 安卓开发中的那点事
- AndroidUI高级之十六使用Intent进行通信
- AndroidUI高级之十六使用Intent进行通信
- 腾讯云支持DV SSL证书免费申请
- 内部类和final关键字
- HDU 4870 Rating