A:选球问题

http://39.106.164.46/problem.php?id=1208
思路:
从小到大排序即可,依次取满足题意的k个球。
AC代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#define MAX 55
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;int n,k,a[MAX];
char ch[MAX];int main(){while(cin>>n>>k){for(int i=0;i<n;i++){cin>>ch[i];a[i]=ch[i]-'a'+1;}sort(a,a+n);int cnt=1,ans=a[0],tmp=a[0];for(int i=1;i<n;i++){if(cnt==k) break;if(a[i]>=tmp+2){ans+=a[i];cnt++;tmp=a[i];}}if(cnt!=k) cout<<-1<<endl;else cout<<ans<<endl;}return 0;
}

B:模拟出入栈游戏

http://39.106.164.46/problem.php?id=1209
题意:
按顺序压入a-z 26个字母,在栈顶的元素可以随时被取出,问给出的序列是否为一个合理的出栈序列。
思路:
依次判断前25个字母,若其后一个字母大于前一个字母,则合理;
若后一个字母小于前一个字母,就判断这两个字母间的所有字母是否都已出栈,若存在没有出栈的,则不合理,反之,则合理。
AC代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#define MAX 30
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;int a[MAX],b[MAX];
string s;int main(){while(cin>>s){memset(a,0,sizeof(a));memset(b,0,sizeof(b));int len=s.length();bool flag=true;for(int i=0;i<len;i++){a[i]=s[i]-'a'+1;}for(int i=0;i<len-1;i++){if(a[i]>a[i+1]){for(int j=a[i+1]+1;j<a[i];j++){if(b[j]==0){flag=false;break;}}if(!flag) break;}b[a[i]]=1;}if(flag) cout<<"yes"<<endl;else cout<<"no"<<endl;}return 0;
}

C:爬楼梯游戏

http://39.106.164.46/problem.php?id=1210
思路:
简单的递推。注意使用scanf读入数据。
代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#define MAX 1000005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;int n,dp[MAX];
int mod=1e9+7;int main(){dp[1]=1,dp[2]=2;for(int i=3;i<=MAX;i++){dp[i]=(dp[i-1]+dp[i-2])%mod;}while(scanf("%d",&n)!=EOF){printf("%d\n",dp[n]);}return 0;
}

D:小镇购物

http://39.106.164.46/problem.php?id=1211
思路:
多源BFS。题目求的是从每个商店出发购买s种物品的代价。但如果每个商店都进行一遍BFS,n太大会超时。由于k<=100,可以换个思考方式,对物品进行BFS,我们可以求出从第i个商店出发购买第j种物品所花费的最小代价。ans[MAX][105]代表第i个商店到第j种商品的最近距离,既做标记数组又做计数数组。最后只需对ans[i]进行排序,取前s种花费最小的商品即可。
代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#define MAX 100005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;int n,m,k,s;
int shop[MAX],ans[MAX][105];//ans[i][j]代表第i个商店到第j种商品的最近距离,既做标记数组又做计数数组vector<int> adj[MAX];void bfs(int id){ //id为商品编号queue<int> q;for(int i=1;i<=n;i++){if(shop[i]==id){//如果该商店的物品就是要搜索的物品则代价为0ans[i][id]=0;//从拥有该物品的商店开始搜索q.push(i);}}while(!q.empty()){int top=q.front();q.pop();for(int i=0;i<adj[top].size();i++){int nxt=adj[top][i]; //现在搜索到的商店编号if(ans[nxt][id]==-1){//该商店还没被搜索到, 则购买index物品的代价为上一步的代价+1ans[nxt][id]=ans[top][id]+1;q.push(nxt);}}}
}int main(){while(scanf("%d %d %d %d",&n,&m,&k,&s)!=EOF){for(int i=1;i<=n;i++){scanf("%d",&shop[i]);}int a,b;for(int i=0;i<m;i++){scanf("%d %d",&a,&b);adj[a].push_back(b);adj[b].push_back(a);}memset(ans,-1,sizeof(ans)); //初始化-1for(int i=1;i<=k;i++){bfs(i);}for(int i=1;i<=n;i++){int res=0;//我们把第i个商店购买各个物品所需要的代价排序//我们存数据的时候是从1开始的所以要加1sort(ans[i]+1,ans[i]+1+k);//从中挑选代价最小的s个物品for(int j=1;j<=s;j++)res+=ans[i][j];printf("%d ",res);}printf("\n");for(int i=1;i<=n;i++){adj[i].clear();}}return 0;
}

E:graph’s connected components

http://39.106.164.46/problem.php?id=1212
题意:
给出m个数,其中任意的x和y,若 x (按位与)y = 0,则x和y是相邻的,求形成的图中总共的连通分量的个数。
思路:
感觉像是并查集,可还是wa了 qwq。。。。求正解
首先,若存在0,则连通分量就是1
若不存在0,可以先找出满足2的次方的最大数,所有小于这个数的都和这个数在一个集合中
然后若两个数相加的和为2的x次方-1,则这两个数也在一个集合中
下面的代码可以通过弱化版:
http://39.106.164.46/problem.php?id=1245
代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#define MAX 5000005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;int n,m;
int a[MAX],b[MAX],fa[MAX],flag[MAX];int findfather(int x){if(x==fa[x]) return fa[x];else return fa[x]=findfather(fa[x]);
}void _union(int a,int b){int aa=findfather(a);int bb=findfather(b);if(aa!=bb){fa[aa]=bb;}
}int main(){while(scanf("%d %d",&n,&m)!=EOF){memset(flag,0,sizeof(flag));memset(b,0,sizeof(b));bool f=true;for(int i=0;i<m;i++){scanf("%d",&a[i]);if(a[i]==0){f=false;}}if(!f){printf("1\n");continue;}sort(a,a+m);for(int i=0;i<m;i++){b[a[i]]=i;flag[a[i]]=1;}for(int i=0;i<MAX;i++){fa[i]=i;}int t=2,maxl=-1,index=-1;while(t<=n){if(flag[t]==1){maxl=max(maxl,t);index=b[t];}t*=2;}for(int i=0;i<index;i++){_union(i,index);}for(int i=max(0,index);i<m;i++){for(int j=1;j<=n;j++){int tmp=(int)pow(2,j)-a[i]-1;if(tmp>=0&&flag[tmp]==1&&findfather(i)!=findfather(b[tmp])){_union(i,b[tmp]);}}int t=a[i]*2,maxl=(int)pow(2,n);while(t<=maxl){if(flag[t]==1){_union(i,b[t]);}t*=2;}}int cnt=0;for(int i=0;i<m;i++){if(fa[i]==i) cnt++;}printf("%d\n",cnt);}return 0;
}

2019年中南大学研究生复试机试题 题解相关推荐

  1. 1028: 安全路径(2014年中南大学研究生复试机试题 )

    1028: 安全路径 时间限制: 1 Sec  内存限制: 128 MB 提交: 228  解决: 96 [提交][状态][讨论版] 题目描述 卫斯理小说经常提及外星人,比如蓝血人. 在土星星球有很多 ...

  2. 2018年 中南大学研究生复试机试题(1025~ 1028)

    目录: A:最短距离 B:a + b问题 C:逃离迷宫 D:可乐 A:最短距离 http://39.106.164.46/problem.php?id=1025 思路: 设小王的坐标为(x1 + u1 ...

  3. 2014年中南大学研究生复试机试题(字符串、基础dp、最短路)

    A.B.C题很简单. D.最大连续子序列 思路: 求最大连续子序列的值以及左右端点. 那么我们记录连续和值为s,最值为maxx,只有maxx改变时才改变左右端点,考虑记录l,r,即当前的区间端点. 那 ...

  4. 1019: 堆石子 2016年中南大学研究生复试机试题

    题目描述 在一片沙滩上摆放着 n堆石子. 现要将石子有次序地合并成一堆. 规定每次选2 堆相邻石子合并成新的一堆,合并的费用为新的一堆石子数.试设计一个算法,计算出将 n堆石子合并成一堆的最小总费用. ...

  5. 2016年中南大学研究生复试机试题(1015~1019)

    目录: **A:第几天 B:加油站 C:序列求平均 D:士兵排阵 ** A:第几天 http://39.106.164.46/problem.php?id=1015 思路: 分闰年和非闰年讨论即可. ...

  6. 中南大学2019研究生复试机试题

    中南大学2019研究生复试机试题 机试题共六题 1.选球问题 题目描述 输入 输出 样例输入 样例输出 解决代码 2.模拟出入栈游戏 题目描述 输入 输出 样例输入 样例输出 解决代码 3.爬楼梯游戏 ...

  7. 1004: 惠民工程 (2013年中南大学研究生复试机试 )

    1004: 惠民工程 时间限制: 1 Sec  内存限制: 128 MB 提交: 404  解决: 81 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 市政府"惠民工程&q ...

  8. 2013年中南大学计算机研究生复试机试题解

    高温假闲着无聊,在voj上把CSU的机试题 刷了一道,可能是因为题目年代比较久远,题目的难度并不是很大.稍稍整理一下,希望以后用得着. 1264: 惠民工程 所有题目中唯一的数据结构题 一道最小生成树 ...

  9. 1028-可乐(中南大学18年研究生复试机试题)

    题目描述 猪年快乐!在这个快乐的日子里我们当然要去超市买可乐喝啦! 现在超市有n种可乐,第 i 种可乐的价格为C[i] ,体积为 2i-1 毫升,每种可乐都是无限供应的 ,现在你想买至少 L毫升的可乐 ...

  10. 13-19年复旦大学计算机学院研究生复试机试题

    (不保证代码完全正确,自己敲的可能存在不完善的地方,请各位大佬发现后指出,谢谢!) 暂时结束. 试题列表 2019上机题 2018上机题 2017上机题 2016上机题 2015上机题 2014上机题 ...

最新文章

  1. 阿里将AI引入时尚界,消费者会对程序员的审美买账吗?
  2. 徐科:做IC不外乎PPA,但需要成百上千的专家合作 投入数千万
  3. vue 心跳监控_【笔记】vue中websocket心跳机制
  4. 微软Adam挑战Google Brain:我的机器学习比你快
  5. Mybatis源码之数据源模块分析
  6. android代码生成excel,AndroidExcel
  7. 用友软件动态密码安全认证解决方案
  8. sqlserver提权失败_利用mssql模拟登录提权
  9. 手把手教你写个ORM(一)
  10. [Erlang 0041] 详解io:format
  11. oracle中分析函数range值范围,Oracle实战4(分析函数)
  12. 计算机怎么建多个ppt,电脑怎么将多个PPT文件合并成一个
  13. AndroidQ SystemUI之插件化机制Plugin
  14. 初来乍到,多多关照!
  15. bug解决 2021-09-20 build之后出现shader消失的原因之一
  16. thinkphp6 通过命令行快速生成多应用模块报 【Command “build“ is not defined.】错误的解决办法
  17. 闲鱼冻结多个欺诈用户:还是治标不治本
  18. 这一波再抢不到微信红包封面,就只能怪你自己了
  19. CNCF 宣布 etcd 项目毕业!
  20. USB转re232转换器(串口线)设备出现感叹号且设备管理器下的端口没有出现,解决办法

热门文章

  1. 计算机图形学VC 配置,计算机图形学(VC++实现)(第2版)
  2. 让人惊愕的coffee spitter
  3. KendoUI系列:switch 开关
  4. Practical Test Reminders, Character Arrays, C-Strings
  5. 华为鸿蒙会没有广告,为什么华为会选择不做任何预告突然发布鸿蒙系统?
  6. virtualbox复制vdi
  7. syntastic 和 pathogen 安装使用
  8. 洛谷 P4238 【模板】多项式求逆 ntt
  9. VR看房项目总结(1)
  10. smith 图中Q值和阻抗匹配