L2-4 缘之空

1.使用倍增法求最近公共祖先,然后利用公共祖先计算两点的树上距离

2.但是此题并没有提供根节点,所以要先找到根节点以后才可以进行倍增法求lca

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
const int N=2e5+5;
//-------------倍增法求最近公共祖先---------------------------
int n,q;
vector<int>vct[N];
int dep[N],fa[N][20];//dep存u点的深度,fa存从u点向上跳2的i次方层祖先节点 void dfs(int u,int father){
dep[u]=dep[father]+1;
fa[u][0]=father; ////init跳1步
for(int i=1;i<=17;i++) fa[u][i]=fa[fa[u][i-1]][i-1];
for(auto v:vct[u]) if(v!=father) dfs(v,u);
}
int lca(int u,int v){
if(dep[v]>dep[u]) swap(u,v);
////先跳到同一层
for(int i=17;i>=0;i--) if(dep[fa[u][i]]>=dep[v]) u=fa[u][i];
if(u==v) return u;
for(int i=17;i>=0;i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
return fa[u][0];
}
int dist(int u,int v){ return dep[u]+dep[v]-2*dep[lca(u,v)];}
//-------------------------------------------------------
//求树上距离使用倍增法方便,只求最近公共祖先使用tarjan方便 signed main()
{
cin>>n>>q;
map<int,int>mp;
for(int i=1;i<n;i++) {
int a,b;
cin>>a>>b;
mp[b]=1;
vct[a].push_back(b);
vct[b].push_back(a);
}
//------求根节点,看哪个节点没有父节点 -----
int head=1;
for(int i=1;i<=n;i++){
if(!mp[i]) {
head=i;
break; }
}
//-------------------------------
dfs(head,0); while(q--)
{
int u,v; cin>>u>>v;
int llca=lca(u,v),d=dist(u,v);
//不能同系
if(llca==u||llca==v||d<=4) cout<<"NO";
else cout<<"YES";
cout<<endl;
cout<<d;
cout<<endl;
} }

L1-7 拼接梯子

1.本来以为要搜索,其实只需要看二进制位上的1即可,每一个1都代表2的次方,但是如果是奇数或者所有材料的和都比梯子小就无法满足题意,因为材料全为偶数,其次在左移的时候1要写成1ll。

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
const int N=2e5+5;
int a[68]; signed main()
{ int k,l; cin>>k>>l;
int ans=-1,cnt=0;
if(l&1||(1ll<<(k+1))-1<l) {
cout<<"No";//||2的n次方的等比求和为2的n+1次方减1
}
else //注意-1要放在整个左移外面,不然就会先计算k+1-1,再左移
{
while(l)
{
if(l&1) ans=cnt;
l>>=1;//二进制位往右移检查是不是一,若是更新ans
cnt++;
}
cout<<"Yes"<<endl;
ans=(1ll<<ans);
cout<<ans;
} }

L2-1 特殊的沉重球

也是一道dfs的好题,其实这个题可以总结成一类题

有n个物品,每个背包最大可以装w体积的物品,每个物品的体积为ci,且1<=ci<=w,求可以装下这n个物品的最少的背包数量。

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
int n,w;
int ans;
int a[70],b[1000005];//a为宝可梦的数量,b为每个球装的重量
void dfs(int x,int now)//x为第几个宝可梦,now为现在用了几个球
{
if(now>=ans) return ;
if(x>n)
{ for(int i=1;i<=now;i++) cout<<b[i]<<" ";
cout<<endl;
ans=min(now,ans);
return ;
} for(int i=1;i<=now;i++)//注意这里是i<=now
{
if(a[x]+b[i]<=w){//之前的球可以装进去,那么就不增加
b[i]+=a[x];
dfs(x+1,now);//不增加球数
b[i]-=a[x]; }
}
//前面的球都无法装这个宝可梦,单独开一个
b[now+1]+=a[x];
dfs(x+1,now+1);
b[now+1]-=a[x];
} signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>w;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
ans=n;//最多用掉n个
dfs(1,1);
cout<<ans; }

L1-6 分鸽子

二分答案,枚举鸽子肉重量,看这个重量下可以达到的人数是否大于等于m即可

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353
int n,m;
int a[100005];
bool check(int x)
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]>=x) sum+=a[i]/x;//注意要取等
}
if(sum>=m) return 1;
return 0; } signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
int l=1,r=1e10;
int ans=0;
//---二分板子-----建议背这个--
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;
}else r=mid-1;
}
//-----------------------
cout<<ans; }

L1-4 颠倒阴阳

按题意模拟即可,学会转二进制和十进制到相互转换

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353 char c[505][505];
int n,m,flag=1;
int ans[15];
map<int,int>mp;
queue<pii>q; signed main()
{
ios::sync_with_stdio(0),cin.tie(0);
int n;
cin>>n;
string s;
while(n)
{
s+=n%2+'0';
n/=2;
}
int ans=0;
//取反过程
for(int i=0;i<s.size();i++){
if(s[i]=='0') s[i]='1';
else s[i]='0';
}
//补0
while(s.size()<32) s+='0'; //cout<<s; for(int i=0;i<s.size();i++)
{
ans=ans*2+s[i]-'0';//可以按十进制理解
} cout<<ans; }

L1-5 演唱会

转换为秒数来比较即可

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353 char c[505][505];
int n,m,flag=1;
int ans[15];
map<int,int>mp;
queue<pii>q; signed main()
{
//ios::sync_with_stdio(0),cin.tie(0);
int hh,mm,ss;
char cc;
//用cc吃掉百分号,因为实际上没用
cin>>hh>>cc>>mm>>cc>>ss; int sum=hh*3600+mm*60+ss;
int tt=3600+22*60+33;
if(sum+tt<19*3600) cout<<"arrive on time";
else if(sum+tt<21*3600) cout<<"arrive late";
else if(sum+tt>=21*3600)cout<<"too late"; }

L1-3 Pokémon

不是闪光的概率为99,按要求保留两位输出,记得闪光还得多除100

/**   - swj -
*
      />_____フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /  ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ **/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
#define mod 998244353 char c[505][505];
int n,m,flag=1;
int ans[15];
map<int,int>mp;
queue<pii>q; signed main()
{
//ios::sync_with_stdio(0),cin.tie(0);
double a[8];
for(int i=1;i<=7;i++) {
char cc;
cin>>a[i]>>cc;
}
int xx,f; cin>>xx>>f;
if(f==1) printf("%.2lf",a[xx+1]/100);
else printf("%.2lf",a[xx+1]*0.99);
cout<<"%"; }

武汉工程大学2020GPLT选拔赛(重现赛)的更多相关文章

  1. 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) Chino with Equation(组合公式)

    链接:https://ac.nowcoder.com/acm/contest/553/D来源:牛客网 题目描述 Chino的数学很差,因此Cocoa非常担心.今天,Cocoa要教Chino解不定方程. ...

  2. 第十四届浙江财经大学程序设计竞赛重现赛--A-A Sad Story

    链接:https://www.nowcoder.com/acm/contest/89/A 来源:牛客网 1.题目描述 The Great Wall story of Meng Jiangnv’s Bi ...

  3. 2016ACM/ICPC亚洲区沈阳站-重现赛赛题

    今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...

  4. 2016 CCPC 东北地区重现赛

    1. 2016 CCPC 东北地区重现赛 2.总结:弱渣,只做出01.03.05水题 08   HDU5929 Basic Data Structure    模拟,双端队列 1.题意:模拟一个栈的操 ...

  5. 2016 CCPC长春重现赛

    1.2016中国大学生程序设计竞赛(长春)-重现赛 2.总结:会做的太少,应变能力也不行,或者说猜题目的能力不行 02  水 04  HDU 5914  Triangle 1.题意:1~n,n个数,问 ...

  6. 2016年中国大学生程序设计竞赛(合肥)-重现赛1001 HDU 5961

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  7. 2016年中国大学生程序设计竞赛(合肥)-重现赛1008 HDU 5968

    异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  8. 2016年中国大学生程序设计竞赛(合肥)-重现赛1009 HDU 5969

    最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  9. HDU 5127.Dogs' Candies-STL(vector)神奇的题,set过不了 (2014ACM/ICPC亚洲区广州站-重现赛(感谢华工和北大))

    周六周末组队训练赛. Dogs' Candies Time Limit: 30000/30000 MS (Java/Others)    Memory Limit: 512000/512000 K ( ...

  10. HDU 6227.Rabbits-规律 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))

    Rabbits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total S ...

随机推荐

  1. Redis常用命令手册

    http://c.biancheng.net/redis_command/ Redis客户端(client)命令 Redis 提供了一些操作客户端(client)的命令,比如查询所有已连接到服务器的客 ...

  2. iScroll4中事件点击一次却触发两次解决方案

    iScroll是我们在做手机网页中常用的滑动控件之一.单说其功能已相当丰富.但个别时候也是会掉坑的,正好这次就遇上了.在android的app中嵌入网页时不少手机会出现一次点击两次触发的现象.经过一段 ...

  3. 从源码解析golang Timer定时器体系的来龙去脉

    大家好,我是思无邪,某go中厂开发工程师,也是OSPP2024的学生参与者! 如果你觉得我的文章有帮助,记得三连支持一下哦! 目前正在深入研究源码,与你们一起进步,共同攻克编程难关! 欢迎关注我的公众 ...

  4. 虚拟化技术 - CPU虚拟化

    本文分享自天翼云开发者社区<虚拟化技术 - CPU虚拟化>,作者:谢****悦 物理机器是由CPU,内存和I/O设备等一组资源构成的实体.虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设 ...

  5. Spark Sql调优

    一.任务调参 1.1 spark.executor.memory executor执行分配的内存大小 1.2 spark.executor.cores executor执行分配的核数 1.3 spar ...

  6. 关于选择最佳.NET Core SSH服务器库的全面分析

    关于选择最佳.NET Core SSH服务器库的全面分析 在安全远程访问领域,SSH(安全外壳协议)服务器对于在潜在不安全的网络上实现客户端与服务器之间的安全通信至关重要.对于使用.NET Core的 ...

  7. Openlayers 距离环绘制

    思路:利用layer的StyleFunction 来使地图移动或者放缩的时候,使圆保持在地图中心 /** * 绘制距离环 * @param {number} distance 每环间隔距离,单位:米 ...

  8. OpenCvSharp 打开rtsp视频并录制mp4文件

    public class OpenCvSharpUtils { private VideoCapture Capture; private VideoWriter VideoWriter; priva ...

  9. Java进阶 - [1-5] 集合容器

    ArrayList add 1.先确认是否需要扩容,如果需要,则进行扩容操作ensureExplicitCapacity. 2.进行赋值 elementData[size++] = e; 扩容 1.如 ...

  10. DW001 - 数据仓库理论知识

    数据仓库概念 数据仓库基本架构 数据集市概念 数据湖概念 数据仓库概念 数据仓库(Data Warehouse,DW)是一个面向主题的.集成的.非易失的.反映历史变化的.用来支持企业管理决策的数据集合 ...