FYN OI奋斗之路3~
来源:互联网 发布:手机拍的图片淘宝 编辑:程序博客网 时间:2024/06/16 07:06
- XJOI 奋斗群群赛4
- A - Arpa and a research in Mexican wave
- 题意
- 题解
- B - Arpa and an exam about geometry
- 题意
- 题解
- C - Five Dimensional Points
- 题意
- 题解
- D - PolycarpusDice
- 题意
- 题解
- E - Little Elephant and LCM
- 题意
- 题解
- 总结
- 最终RANK2
- 待提升
- FIGHTING
- A - Arpa and a research in Mexican wave
XJOI 奋斗群群赛4
A - Arpa and a research in Mexican wave
题意
有n个人,最多有k个人站起来,每秒都有一个人站起来或者是坐下,详情见题目里的note。
题解
很简单,分三类讨论即可。
#include<bits/stdc++.h>using namespace std;int main(){ int n,k,t; cin>>n>>k>>t; if(t<=k) cout<<t; else if(t>k&&t<n) cout<<k; else cout<<n+k-t;}
B - Arpa and an exam about geometry
题意
输入三个点的坐标(ax,ay),(bx,by),(cx,cy),如果这三个点能绕一个点,使得a点旋转至b点,c点旋转至d点,则输出“Yes”,否则输出“No”。
题解
判断b的距离到a的距离,b的距离到c的距离是否相等,三点是否不共线,若同时满足,则输出”Yes“,反之输出”No“
#include<bits/stdc++.h>using namespace std;typedef long long int ll;ll f(ll a,ll b,ll c,ll d){ return (c-a)*(c-a)+(d-b)*(d-b);}int main(){ ll ax,ay,bx,by,cx,cy; cin>>ax>>ay>>bx>>by>>cx>>cy; if(f(ax,ay,bx,by)==f(bx,by,cx,cy)&&(bx-ax)*(by-cy)!=(bx-cx)*(by-ay)) cout<<"Yes"; else cout<<"No"; return 0;}
C - Five Dimensional Points
题意
有n个五维的点,求有多少个“好“点,对于“好”点、“坏”点的定义如下:
“好”点:设该点为a,在所给点中任意两个不相等且不为a的点b,c,向量ab与向量bc的夹角均不为锐角。
“坏”点:不是“好”点的点都是“坏”点
题解
可以从二维三维的方向来考虑,在二维中,一个“好”点的周围最多有4个点(x正负方向两个,y正负方向两个),三维则有6个(加上z方向上两个),可以知道,五维的情况下,一个“好”点周围最多有10个点,加上自身,即图中有“好”点的情况下,最多有11个点,即n>11时不可能存在“好”点,然后n<=11的情况就枚举一下就行了。
#include<bits/stdc++.h>using namespace std;int point[10000][10],dis[10000][10],flag,ans[10000],cnt=0;int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ scanf("%d",&point[i][j]); } } if(n>11){ cout<<"0"; return 0; } for(int i=1;i<=n;i++){ memset(dis,0,sizeof(dis)); flag=1; for(int j=1;j<=n;j++) { if(j==i) continue; for(int k=1;k<=5;k++){ dis[j][k] = point[j][k]-point[i][k]; } for(int k=1;k<j;k++){ if(k==i) continue; int s=0; for(int l=1;l<=5;l++){ s=s+dis[k][l]*dis[j][l]; } if(s<=0) continue; else { flag = 0; break; } } if(!flag) break; } if(flag) ans[++cnt] = i; } cout<<cnt<<endl; for(int i=1;i<=cnt;i++){ cout<<ans[i]<<" "; } }
D - Polycarpus’Dice
题意
有n个骰子,需要每个骰子累加和为A,接下来一行n个数,表示这n个骰子的最大点数(也就是说能扔出从1-di这么些个值),问每个骰子有多少个点数扔出来之后其他骰子无论如何扔都满足不了累加和为A的条件。
题解
找出每个骰子满足条件最大的和最小值找出来即可。 找出小于最小值的数目 就是让其他的骰子取最大值,再让他们相加得一和,再用A减去上面的结果就是满足条件的最小的值,之后再减1(因为还满足。。。) 找出大于最大值的数目 用A减去n(n个骰子的最小值),之后再用di减去上面的结果,之后再减1(因为还满足。。。)
#include<bits/stdc++.h>using namespace std;const int N=1000000;typedef long long int ll;ll d[N];int main(){ ll n; ll A; cin>>n>>A; ll s=0; for(int i=1;i<=n;i++){ cin>>d[i]; s=s+d[i]; } if(n==1){ cout<<d[1]-1; return 0; } for(int i=1;i<=n;i++){ d[i]=max((ll)0,d[i]-A-1+n)+max((ll)0,A-s+d[i]-1); cout<<d[i]<<" "; }}
E - Little Elephant and LCM
题意
给你一个a序列,找出一个b序列,1 ≤ bi ≤ ai,使得max(bi)=lcm(bi),问这样的bi序列有多少个。
题解
找出序列中最大的数字i,枚举i=max(b[i]),对i因式分解,对于大于i的部分用快速幂相减,在运算的过程中很容易出现数字过大的情况,所以每做一次运算都要对100000007取模。
#include<bits/stdc++.h>using namespace std;const int mod=1e9+7; long long int num[100000];long long int powermod(long long int a,long long int b){ long long int ans=1; while(b){ if(b&1) ans=ans*a%mod; a=a*a%mod; b=b/2; } return ans;}int main(){ long long int n; long long int j; long long int ans=0,basic; cin>>n; for(int i=1;i<=n;i++){ cin>>num[i]; } sort(num+1,num+n+1); for(int i=1;i<=num[n];i++){ vector <int> a; for(j=1;j*j<=i;j++){ if(i%j==0){ a.push_back(j); if(j*j!=i) a.push_back(i/j); } } sort(a.begin(),a.end()); int b,c=1; basic=1; for(j=1;j<a.size();j++){ b=lower_bound(num+1,num+n+1,a[j])-num; basic=basic*powermod(j,b-c)%mod; basic=basic%mod; c=b; } ans=(ans+basic*(((powermod(j,n-c+1)-powermod(j-1,n-c+1)+mod))%mod))%mod; } cout<<ans%mod;}
总结
最终RANK:2
待提升
还是对于大数据的处理,D题被大数据卡了好几次,以后提交前应该看下大数据是否会爆掉。
FIGHTING!
2017年9月6日
- FYN OI奋斗之路3~
- FYN OI奋斗之路1~
- FYN OI奋斗之路2~
- FYN OI奋斗之路4~
- FYN OI奋斗之路5~
- FYN OI奋斗之路6~
- FYN OI 奋斗之路7~
- FYN OI 奋斗之路8~
- FYN OI奋斗之路9~
- FYN OI 奋斗之路10~
- FYN OI奋斗之路11~
- 【OI之路】06树-3Qtree
- OI 酱油之路
- OI之路
- OI之路就此终结
- 【OI之路】02数论算法-3排列与组合
- czl蒻蒟的OI之路3
- 【OI之路】04排序搜索-3计数排序
- C和指针 15章 输入输出函数//因为CCFCSP考试要到了,所以这里的话就不写代码实践了,就过一遍
- 零碎知识点
- 欢迎使用CSDN-markdown编辑器
- SVG基本形状及样式设置
- 小学生学嵌入式:)移植Linux内核
- FYN OI奋斗之路3~
- 如何理解多态、封装、继承
- 在Eclipse中测试MySQL-JDBC(5)查询1-4之间的所有员工,并且封装为一个个的employee对象,并且存储到一个集合中
- HDU
- [SDUT](1130)数据结构上机测试1:顺序表的应用 ---顺序存储(线性表)
- 流水灯加减速
- PHP 模拟curl上传文件
- 如何使用navicat等可视化工具连接到服务器上的数据库?
- java征程第二部,JSP篇