比赛3总结
来源:互联网 发布:日本水知道答案知乎 编辑:程序博客网 时间:2024/06/17 17:25
- T1
- 题面
- 题意
- 输入
- 输出
- 代码
- 错误代码
- T2
- 题面
- 题意
- 代码
- T3
- 题面
- 题意
- 代码
- T4
- 题面
- 题意
- 代码
- 方法
- T5
- 题面
- 题意
- 输入与输出
- 具体题意
- 数据范围
- 方法
- 代码
T1
题面
题意
在药剂店中可以买到任何药水。每个药水的特点是两个整数——效果和成本。药水的效率是效果与成本的比值,可能是非整数。整数A和B表示要的效果与成本,L ≤ A ≤ R,X ≤ B ≤ Y,在店内有效果为L到R和成本为X到Y的药水(即有(R - L + 1)·(Y - X + 1)的药水)。则有效率为K的药水吗?
输入
L,R,X,Y,K(1 ≤ L ≤ R ≤ 10^7, 1 ≤ X ≤ Y ≤ 10^7, 1 ≤ K ≤ 10^7)。
输出
有则输出”YES”,无则输出”NO”.
代码
include<bits/stdc++.h>using namespace std;int main(){ long long l,r,x,y,k,i,j,m; cin>>l>>r>>x>>y>>k; for(i=x;i<=y;i++) { m=k*i;//将除法改为乘法以避免"double"的问题. if(m>=l&&m<=r) { cout<<"YES"; return 0; } }//通过一个循环来试验,避免了两个循环的错误 cout<<"NO";}
错误代码
include<bits/stdc++.h>using namespace std;int main(){ long long l,r,x,y,k,i,j; cin>>l>>r>>x>>y>>k; for(i=l;i<=r;i++) { for(j=x;j<=y;j++) { if(k*j==i) { cout<<"YES"; return 0; } } } cout<<"NO";}//复杂度为n^2
T2
题面
题意
输入R,L表示大圆与大小圆(同心圆)的半径差,在输入n,以下n行每行三个整数表示圆心的坐标与圆的半径,计算完全在大小圆不重叠部分的圆的个数.
代码
include<bits/stdc++.h>using namespace std;int main(){ long double n,x,y,r,q,p,ans=0,jl; int i; cin>>p>>q>>n; for(i=1;i<=n;i++) { cin>>x>>y>>r; if(r<=q/2) { jl=sqrt(x*x+y*y); if(jl+r<=p&&jl-r>=p-q) { ans++; } } } cout<<ans;}//用它到原点的距离与半径的和差与大小圆半径相比较.
T3
题面
题意
有一棵树,每一个点的数为它到树顶的路径中的所有数,去掉一个数后的最大公因数中的最大值
代码
暂无
T4
题面
题意
输入一串整数序列,a1,a2,a3等,可进行操作使数列的最大公约数大于1.
操作:删去a[i],a[i+1],并换成a[i]-a[i+1]与a[i]+a[i+1].
代码
include<bits/stdc++.h>using namespace std;long long a[100010];int main(){ long long m,n,k,i,j,ans=0; cin>>n; cin>>a[1]; k=a[1]; if(a[1]%2==0) a[1]=0; else a[1]=1; for(i=2;i<=n;i++) { cin>>a[i]; k=__gcd(k,a[i]); if(a[i]%2==0) a[i]=0; else a[i]=1; } if(k>1) { cout<<"YES"<<endl<<0; return 0; }//首先判断原来的数列是否符合条件 for(i=2;i<=n;i++) { if(a[i]==1&&a[i-1]==1) { a[i]=a[i-1]=0; ans++; } } for(i=1;i<=n;i++) { if(a[i]==1) ans+=2; } cout<<"YES"<<endl<<ans;}//判断是一个还是两个连续奇数
方法
首先判断开始是否满足条件.
若不符合则默认2为最终最大公约数(因为它最小,最好达到).
若有连续两个奇数,则只需一次操作.仅一个奇书时要两次操作.相加即可.
T5
题面
题意
有N个银行,编号为从1到N,也有N - 1条线来连接银行。所有银行最初都是在线的。每家银行也有其初始实力:银行I有初始强度AI。在继续之前,让我们定义一些关键字。当且仅当存在一条直接连接两银行时,两银行相邻。当且仅当存在一个在线k银行时,i和k,k和j相邻,则i与j半相邻。当一家银行被入侵时,它就变成了离线(不再在线),与它相邻或半邻接的其他银行的实力也增加了1。在破坏使,该银行的实力决不能超过他计算机的力量。之后,反复选择一些银行继续攻击,直到所有银行都被入侵.
但若继续破解X银行,只有在满足以下所有条件的情况下才行:
X银行在线。也就是说,X银行还没有被黑客攻击。
X银行与某个离线银行相邻。
X银行的强度小于或等于Inzane的计算机力量。
确定并输出计算机入侵所有的银行所需要的最小强度。
输入与输出
N,a[1]~a[N],以下N-1行每行两个整数,为线的首尾.
输出计算机的最小强度.
具体题意
有一棵树,每个点都有一个权值,将一个点删去时,与这个点距离<=2的点权值+1,问将所有点删除完之后被删除点的权值的最大值.
数据范围
1 ≤ N ≤ 3*10^5, - 10^9 ≤ ai ≤ 10^9
方法
统计出最大数,第二大数的个数,再根据此进行比较输出.
详见代码
代码
#include<bits/stdc++.h>#define ll long long#define N 300000#define M 1000000001using namespace std;ll n,first[N+5],num[N+5],bb=0,mm,mx,mm2,z=-M,K=0;struct bian{ ll to,next;}bn[N*2];void add(ll p,ll q){ bb++; bn[bb].to=q; bn[bb].next=first[p]; first[p]=bb;}int ss(ll p){ ll i=0,q,o; o=p; p=first[p]; while(p!=-1) { if(num[bn[p].to]==z) { q=bn[p].to; i++; } p=bn[p].next; } if(i==mm2-1) return o; else if(i==1&&K==0) { K=1; return ss(q); } else return 0;}int ss2(int p){ ll i=0,q; p=first[p]; while(p!=-1) { if(num[bn[p].to]==z-1) { i++; } p=bn[p].next; } if(i==mm) return 1; else return 0;}int dd(int p)//用于判断是否为:最大数---任意数----最大数的情况.即一任意数与所有最大数相连. { int u,i,v; u=first[p]; while(u!=-1) { v=first[bn[u].to]; i=0; while(v!=-1) { if(num[bn[v].to]==z) i++; v=bn[v].next; } if(i!=1) { if(i==mm2) return 1; else return 0; } u=bn[u].next; } return 0;}int main(){ ll i,j,p,q,mn=M,y,u,v; cin>>n; memset(first,-1,sizeof(first)); for(i=1;i<=n;i++) { cin>>num[i]; z=max(z,num[i]);//z为最大值 } for(i=1;i<=n-1;i++) { cin>>p>>q; add(p,q); add(q,p); } for(i=1;i<=n;i++) { if(num[i]==z-1) { mm++;//第二大的数的个数 } if(num[i]==z) { mm2++;//最大数的个数 mx=i;//其中一个最大数的序号 } } if(mm2==1)//仅有一个最大数时 { i=mm; j=first[mx]; while(j!=-1) { if(num[bn[j].to]==z-1) i--;//判断第二大的数是否全部与它相连 j=bn[j].next; } if(i==0)//全部连通 { cout<<z; return 0; } else { cout<<z+1; return 0; } } else if(mm2==2) { int pp=0; u=first[mx]; while(u!=-1) { if(num[bn[u].to]==z) { pp=1;// cout<<u<<bn[u].to; v=bn[u].to; break; } u=bn[u].next; } if(pp==0)//不连通 { pp=dd(mx); if(pp==0) { cout<<z+2; } else { cout<<z+1; } return 0; } else//连通则为z+1,因为另一最大数-1与第二大数加2均为z+1 同下 { cout<<z+1; return 0; } } else if(mm2>2) { i=mm2; y=ss(mx);//用于判断最大数是否连通 if(y==0)//表示不连通 { if(dd(mx)==0) { cout<<z+2; } else { cout<<z+1; } return 0; } else//与上面原理相同 { cout<<z+1; return 0; } }}
- 比赛3总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 【比赛总结】Charlson Cup 3 -- ContestHunter
- 省赛组队赛3 比赛总结
- 比赛总结+近期总结
- 比赛总结+近期总结
- 8.8号比赛总结
- 总结小车比赛
- 蓝桥杯比赛总结
- 华中赛区比赛总结
- DIV3I比赛总结
- SRM 562 比赛总结
- SRM 563 比赛总结
- [vijos P1066]弱弱的战壕
- Python教程百度网盘哪里有?
- 集合,不定期更新
- 电脑加内存遇到的不开机问题解决
- JavaScript学习总结(十九)——使用js加载器动态加载外部Javascript文件
- 比赛3总结
- Photon Server与unity客户端连接
- led驱动分析
- Bootstrap框架----地址联动--选择地址
- 【IIS】启用IIS
- Ti437x LED总线驱动模型程序+设备树
- SonarQube Scanner 安装使用文档
- linux下svn服务器搭建及虚拟机网路问题
- Android音频驱动-ASOC之PCM HW Params