奋斗群群赛---4
来源:互联网 发布:centos 阿里云 yum源 编辑:程序博客网 时间:2024/06/05 08:28
奋斗群群赛—4
- 奋斗群群赛4
- T1Arpa and a research in Mexican wave
- 题目位置
- 题意
- AC代码
- 小反思
- T2Arpa and an exam about geometry
- 题目位置
- 题意
- AC代码
- 小反思
- T3Five Dimensional Points
- 题目位置
- 题意
- 小反思
- T4Polycarpus Dice
- 题目位置
- 题意
- AC代码
- 小反思
- 总结
- T1Arpa and a research in Mexican wave
T1:Arpa and a research in Mexican wave
题目位置:
T1位置所在
题意:
有一排观众席,有n个人,当t=1时第一个人站起来,t=2时第二个人站起来,t=3时第三个人站起来……到k位置,都是站起来,但是k+1时k+1的人站起来,而编号为1的人坐下,k+2时为k+2的人站起来,标号为2的人坐下…问输入一个时间,此时有多少人站着的!
AC代码:
#include <bits/stdc++.h>using namespace std;int main(){ int n,k,t; scanf("%d%d%d",&n,&k,&t); if(t<=k) { printf("%d\n",t); return 0; } else if(t>k&&t<=n) { printf("%d",k); return 0; } else if(t>n) { printf("%d",max(k-(t-n),0)); return 0; }}
小反思:
无——水题一道啊!只是记住,在n+k之后是0个人站着,不会有负数的情况出现的
T2:Arpa and an exam about geometry
题目位置:
T2位置所在
题意:
纸上有三个点a, b, c,问有没有可能找到另一个点,将纸张绕着这个点选择一定角度后a与原来的b点重复,b与原来的c点重复。所以根据全等的概念,有SAS可以知道是1->2的距离一定要等于2->3的距离,但是仔细想想,还不能在一条线(为什么?自己想,哈哈!)
AC代码:
#include <bits/stdc++.h>using namespace std;int main(){ long long int x1,y1,x2,y2,x3,y3; cin>>x1>>y1>>x2>>y2>>x3>>y3; double dis1,dis2; dis1=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); dis2=(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3); if(dis1!=dis2) { cout<<"NO"; return 0; } else { if((y1-y2)*(x2-x3)!=(x1-x2)*(y2-y3)) cout<<"YES"; else cout<<"NO"; }}
小反思:
应该将斜率公式来变成乘法,这也证实了代码最好别除,真的!
T3:Five Dimensional Points
题目位置:
T3位置所在
题意:
讲了什么向量的鬼东西,但是如果将题意理解了就会发现是十分简单的,只要一点的算法优化,就不会TLE了!
在五维空间下给你n个点,然你求有多少个好点分别是什么.
好点:任意两个不同于这个点的点,如果其与改点相连后的夹角大于等于90
坏点:存在小于90的.
#include <bits/stdc++.h>using namespace std;int a[10005][6],book[3005];int f(int x,int b,int c){ int tot=0; for(int i=1; i<=5; i++) tot+=(a[x][i]-a[b][i])*(a[x][i]-a[c][i]); return tot;}int main(){ int n,all=0; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d%d%d%d%d",&a[i][1],&a[i][2],&a[i][3],&a[i][4],&a[i][5]); for(int i=1; i<=n; i++) { int tot=0,flag=0; for(int j=1; j<=n; j++) { for(int v=1; v<=n; v++) if(i!=j&&j!=v&&v!=i) { if(f(i,j,v)<=0) tot++; else if(f(i,j,v)>0) { flag=1; break; } } if(flag==1) break; } if(tot==(n-1)*(n-2)) { all++; book[i]=1; } } cout<<all<<endl; for(int i=1; i<=n; i++) if(book[i]==1) cout<<i<<endl;}
小反思:
第一次错了主要是因为没有很好的优化,即出现一个坏的点的时候就可以直接的将它给break掉了,否则判到尾还是会TLE,即(1,3,2)与(1,2,3)是一起判断的,所以根据公式,出现(n-1)*(n-2) 的可能就是符合了的!
T4:Polycarpus’ Dice
题目位置:
T4题目位置
题意:
给你n个骰子,然后每个骰子有d[i]面,给你一个a,a表示这n个骰子所扔的点数和
然后问你,每一个骰子有多少个数不能投掷到~
AC代码:
#include <bits/stdc++.h>using namespace std;long long int dice[200005];int main(){ long long int n,s,tot=0,all; cin>>n>>s; for(int i=1; i<=n; i++) { cin>>dice[i]; tot+=dice[i]; }//cout<<tot<<" tot"<<endl; for(int i=1; i<=n; i++) { long long int ans; ans=min((s+(long long int)1-n),dice[i])-max((s+dice[i]-tot),(long long int)1)+1; ans=dice[i]-ans; cout<<ans<<" "; }}
小反思:
一定要推公式,不然又会TLE的!
总结
1.学会推公式
2.多考虑边界情况
3.灵活考虑剪枝的情况,可以方便不会TLE!
阅读全文
0 0
- xjoi奋斗群群赛4
- 奋斗群群赛---4
- 奋斗群群赛4总结与心得
- xjoi奋斗群群赛2
- 奋斗群群赛---3 渐入佳境
- xjoi奋斗群群赛3
- xjoi奋斗群群赛5
- 奋斗群群赛---5
- xjoi奋斗群群赛6
- 奋斗群群赛---6
- 奋斗群群赛---7
- xjoi奋斗群群赛7
- xjoi奋斗群群赛8
- 奋斗群群赛---8
- 奋斗群群赛---9
- 奋斗群群赛11---筚路蓝缕
- 奋斗群群赛---12
- xjoi奋斗群群赛10
- 【nowcoder】四则运算
- 五、删除项目
- 初识人工智能--基本概念
- JDK和JRE的区别
- 时间格式 2016-08-15T16:00:00.000Z
- 奋斗群群赛---4
- spring 事务管理
- 使用TabLayout实现简单登录布局的实现
- Vue学习笔记10——demo地址
- SpringCloud分布式开发五大神兽 服务发现
- 六、查看项目
- Atom Trailing spaces问题,自动删除空白符,git diff有差异但实际相同
- TCP/IP协议三次握手与四次握手流程解析
- Android 点击搜索框 输入法回车键变成搜索键