Ⅰ.L2-021 点赞狂魔---STL应用

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。

输入格式:
输入在第一行给出一个正整数N(≤100),是待统计的用户数。随后N行,每行列出一位用户的点赞标签。 输出格式:
统计每个人点赞的不同标签的数量,找出数量最大的前3名,在一行中顺序输出他们的用户名,其间以1个空格分隔,且行末不得有多余空格。如果有并列,则输出标签出现次数平均值最小的那个,题目保证这样的用户没有并列。若不足3人,则用-补齐缺失,例如mike jenny -就表示只有2人。 输入样例:
5
bob 11 101 102 103 104 105 106 107 108 108 107 107
peter 8 1 2 3 4 3 2 5 1
chris 12 1 2 3 4 5 6 7 8 9 1 2 3
john 10 8 7 6 5 4 3 2 1 7 5
jack 9 6 7 8 9 10 11 12 13 14
输出样例:
jack chris john

思路:使用集合(自动去重) 统计每个人点赞不同博文的数量。输出前3个人,不足3人输出“-”

#include<bits/stdc++.h>
using namespace std; int n;
set<int> se; struct node{
int size;
string name;
int aclSize;
};
node ans[105]; bool cmp(node a,node b){
if(a.size == b.size){
return a.aclSize < b.aclSize;
}
return a.size > b.size;
} int main(){
cin>>n;
for(int i=1;i<=n;i++){
string name;
cin>>name;
ans[i].name = name;
int k;
cin>>k;
ans[i].aclSize = k;
for(int j=1;j<=k;j++){
int d;
cin>>d;
se.insert(d);
}
ans[i].size = se.size();
se.clear();
}
sort(ans+1,ans+n+1,cmp);
int first = 1;
for(int i=1;i<=3 && i<=n;i++){
if(first){
cout<<ans[i].name;
first = 0;
}else{
cout<<" "<<ans[i].name;
}
}
if(n<3){
for(int i=n+1;i<=3;i++){
cout<<" "<<"-";
}
}
return 0;
}

Ⅱ.L2-022 重排链表--数组模拟链表

给定一个单链表 L
请编写程序将链表重新排列为 L
例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。 输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。 接下来有N行,每行格式为: Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为不超过10
​5
​​ 的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。 输出格式:
对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。 输入样例:
00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:
68237 6 00100
00100 1 99999
99999 5 12309
12309 2 00000
00000 4 33218
33218 3 -1

思路:结构体模拟链表,具体做法不太好表达,看代码吧

转载至:https://blog.csdn.net/hy971216/article/details/80496917

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn = 1e5; struct Node{
int address;
int key;
int next;
int num; //结点的最终位置下标
}node[maxn]; //存放数据 后面改变下标后也存放输出结果 bool vis[maxn]; bool cmp(Node a,Node b){
return a.num<b.num;
} int main()
{
int head,n,a;
scanf("%d%d",&head,&n);
int k1=0,k2=0;
for(int i=0;i<maxn;i++){
node[i].num=2*maxn;//初始化 num为最大
}
for(int i=0;i<n;i++){
scanf("%d",&a);//地址作为下标
scanf("%d%d",&node[a].key,&node[a].next);
node[a].address=a;
}
for(int i=head;i!=-1;i=node[i].next){
if(!vis[abs(node[i].key)]){ //没有出现过当前结点的绝对值 就从下标0开始按顺序存放到结构体数组中
vis[abs(node[i].key)]=true;
node[i].num=k1;
k1++;
}else{
node[i].num=maxn+k2;//出现过 就从下标maxn开始存放 因为最大也就maxn个结点
k2++;
}
}
sort(node,node+maxn,cmp);//按num排序
int k=k1+k2;
for(int i=0;i<k;i++){
if(i!=k1-1&&i!=k-1){
printf("%05d %d %05d\n",node[i].address,node[i].key,node[i+1].address); // %05d输出5个长度整数 不足5为补0
}else{
printf("%05d %d -1\n",node[i].address,node[i].key);
}
}
return 0;
}

Ⅲ.L2-023 图着色问题---图着色dfs、bfs、邻接点问题

图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?

但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

输入格式:
输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。题目保证给定的无向图是合法的(即不存在自回路和重边)。 输出格式:
对每种颜色分配方案,如果是图着色问题的一个解则输出Yes,否则输出No,每句占一行。 输入样例:
6 8 3
2 1
1 3
4 6
2 5
2 4
5 4
5 6
3 6
4
1 2 3 3 1 2
4 5 6 6 4 5
1 2 3 4 5 6
2 3 4 2 3 4
输出样例:
Yes
Yes
No
No

思路:只需判断邻接点是否颜色相等,bfs和dfs或者直接暴力看邻接边的两端点。

还有一些特殊样例:当k(颜色数) != 输入的颜色数 也不符合条件

dfs做法 23分 wa了一个点:

#include<bits/stdc++.h>
using namespace std; vector<int> g[510];
int v,e,k,n;
set<int> se;
int vis[510];
int col[510];
bool flag = true; void dfs(int x){
if(!flag)return;
vis[x] = 1;
int color = col[x];
for(int i=0;i<g[x].size();i++){
if(!vis[g[x][i]]){
if(color == col[g[x][i]])
flag = false;
else
dfs(g[x][i]);
}
}
} int main(){
cin>>v>>e>>k;
for(int i=1;i<=e;i++){
int d1,d2;
cin>>d1>>d2;
g[d1].push_back(d2);
g[d2].push_back(d1);
}
cin>>n;
while(n--){
memset(vis,0,sizeof(vis));
for(int i=1;i<=v;i++){
int d;
cin>>d;
se.insert(d);
col[i] = d;
}
if(se.size()!=k){
cout<<"No"<<endl;
}else{
flag = true;
for(int i=1;i<=v;i++){
if(!vis[i] && flag){
dfs(i);
}
}
if(flag){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
} }
se.clear();
}
return 0;
}

其他暴力做法—查看邻接矩阵中的 邻接边两端点颜色是否相等

参考代码:https://blog.csdn.net/guoqingshuang/article/details/80575008

Ⅳ.L2-024 部落--并查集

在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。

输入格式:
输入在第一行给出一个正整数N(≤104),是已知小圈子的个数。随后N行,每行按下列格式给出一个小圈子里的人: K P[1] P[2] ⋯ P[K] 其中K是小圈子里的人数,P[i](i=1,⋯,K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过10​4。 之后一行给出一个非负整数Q(≤104),是查询次数。随后Q行,每行给出一对被查询的人的编号。 输出格式:
首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出Y,否则输出N。 输入样例:
4
3 10 1 2
2 3 4
4 1 5 7 8
3 9 6 4
2
10 5
3 7
输出样例:
10 2
Y
N

思路:并查集,同一部落的属于同一集合

#include<bits/stdc++.h>
using namespace std; const int maxn = 10010;
int n;
int father[maxn];
set<int> se;
set<int> se2; //查找
int find(int x){
if(father[x]==x) return x;
return father[x]=find(father[x]);
} //合并
void unite(int x,int y){
x=find(x);
y=find(y);
if(x!=y)
father[x]=y;
} //初始化
void init(){
for(int i=1;i<=maxn-5;i++){ //注意这里初始化 不能初始化成maxn ----段错误有时也不提醒..大坑
father[i] = i;
}
} int main(){
cin>>n;
init();
for(int i=1;i<=n;i++){
int k;
cin>>k;
int d;
cin>>d;
se.insert(d);//se集合中加入第一个元素
int fa = d;
for(int j=2;j<=k;j++){
cin>>d;
se.insert(d);
unite(fa,d);//合并
}
}
for(set<int>::iterator it = se.begin();it!=se.end();it++){
se2.insert(find(*it));//se2集合查询 有多少个根(部落数量)
}
printf("%d %d\n",se.size(),se2.size());
int q;
cin>>q;
while(q--){
int pa,pb;
cin>>pa>>pb;
pa = find(pa);
pb = find(pb);
if(pa==pb){
puts("Y");
}else{
puts("N");
}
}
return 0;
}

2017年天梯赛LV2题目汇总小结的更多相关文章

  1. 2018年天梯赛LV2题目汇总小结

    Ⅰ.L2-1 分而治之---邻接表 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题 ...

  2. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  3. 2017最新PHP经典面试题目汇总(上篇)

    1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起 ...

  4. [蓝桥杯]2017蓝桥省赛B组题目及详解

    /*——————————————————————————————————————————————————————————— [结果填空题]T1 (分值:5) 题目:购物单 小明刚刚找到工作,老板人很好 ...

  5. 记第一届 CCCC-团体程序设计天梯赛决赛 参赛

    其他都没什么,上午报道,下午比赛两个半小时,最后139分 但四我超遗憾的是,最后在做L3-1二叉搜索树,因为看到有辣么多人做出来,可是我没做出来啊 比赛结束后看了看其他两道当场吐血,L3-3直捣黄龙不 ...

  6. X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp

     0X0.前言 X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目. 题目有一大 ...

  7. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  8. L1-049. 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  9. 『ACM C++』 PTA 天梯赛练习集L1 | 040-41

    近期安排 校赛3.23天梯赛3.30华工校赛 4.21省赛 5.12 ------------------------------------------------L1-040----------- ...

随机推荐

  1. Coffee and Coursework (Easy version)

    Coffee and Coursework (Easy version) time limit per test 1 second memory limit per test 256 megabyte ...

  2. select 标签判断value值相同 就selected高亮

    我写的是里面嵌套php标签 <select name="bq_id[]" multiple="multiple"> <volist name= ...

  3. 泡泡一分钟:Semantic Labeling of Indoor Environments from 3D RGB Maps

    张宁 Semantic Labeling of Indoor Environments from 3D RGB Maps Manuel Brucker,  Maximilian Durner,  Ra ...

  4. Codeforces 584 - A/B/C/D/E - (Done)

    链接:https://codeforces.com/contest/584 A - Olesya and Rodion - [水] 题解:注意到 $t$ 的范围是 $[2,10]$,对于位数小于 $2 ...

  5. C和C指针小记(十七)-使用结构和指针-链表

    1.链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节 ...

  6. 第二周作业-web后台应用开发与xml

    web后台: 网站前台和网站后台通常是相对于动态网站而言,即网站建设是基于数据库开发 的网站.基于带数据库开发的网站,一般分网站前台和网站后台.网站前台是面向网站访问用户的,通俗的说也就是给访问网站的 ...

  7. 20144306《网络对抗》MAL_恶意代码分析

    一.基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控? 使用Windows自带的schtasks指 ...

  8. VUE 全局变量的几种实现方式

    最近在学习VUE.js 中间涉及到JS全局变量,与其说是VUE的全局变量,不如说是模块化JS开发的全局变量. 1.全局变量专用模块 就是以一个特定模块来组织管理这些全局量,需要引用的地方导入该模块便好 ...

  9. PyQt5信号、定时器及多线程

    信号 信号是用于界面自动变化的一个工具,原理是信号绑定了一个函数,当信号被触发时函数即被调用 举个例子 from PyQt5 import QtWidgets,QtCore from untitled ...

  10. xampp lampp 改变网页root目录的方法

    This is an old question but I haven't seen it properly answered yet. Here is what you need to do: In ...