PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
1140 Look-and-say Sequence(20 分)
题意:观察序列D, D1, D111, D113, D11231, D112213111, ...,显然后一个串是对前一个串每一小段连续相同的字母及其个数的描述。例如,D112213111是对D11231的描述,原因是在D11231中,依次出现了1个D(即D1),2个1(即12),1个2(即21),1个3(即31),1个1(即11), 连起来即为D112213111。给定D,问符合该规律的序列中第N个数是多少?
分析:
1、C++写法:按题意模拟即可。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int D, N;
while(scanf("%d%d", &D, &N) == 2){
char tmp[1010];
sprintf(tmp, "%d", D);
string s = string(tmp);
string ans;
N--;
while(N--){
int len = s.size();
int cnt = 0;
ans = "";
for(int i = 0; i < len - 1; ++i){
if(s[i] == s[i + 1]){
++cnt;
}
else{
ans += s[i];
sprintf(tmp, "%d", cnt + 1);
ans += string(tmp);
cnt = 0;
}
}
if(s[len - 2] == s[len - 1]){
ans += s[len - 2];
sprintf(tmp, "%d", cnt + 1);
ans += string(tmp);
}
else{
ans += s[len - 1];
ans += "1";
}
s = ans;
}
printf("%s\n", s.c_str());
}
return 0;
}
2、python写法:itertools.groupby函数可以将字符串中连续相同的字母分组。
import itertools
D, N = map(int, input().split())
s = str(D)
for _ in range(N - 1):
ans = ''
for char, lst in itertools.groupby(s):
ans += char
ans += str(len(tuple(lst)))
s = ans
print(s)
1141 PAT Ranking of Institutions(25 分)
题意:根据给定的信息计算学校的排名,并按规定的顺序输出即可。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
#include<map>
#include<iostream>
using namespace std;
const int MAXN = 100000 + 10;
map<string, int> mp;
int cnt;
struct Node{
int B, A, T, tot, sum, _rank;
string school;
bool operator < (const Node&rhs)const{
return sum > rhs.sum || sum == rhs.sum && tot < rhs.tot || sum == rhs.sum && tot == rhs.tot && school < rhs.school;
}
}num[MAXN];
int getId(string s){
if(mp.count(s)) return mp[s];
return mp[s] = ++cnt;
}
int main(){
int N;
while(scanf("%d", &N) == 1){
cnt = 0;
mp.clear();
string Rank, School;
int Score;
for(int i = 0; i < N; ++i){
cin >> Rank >> Score >> School;
int len = School.size();
for(int j = 0; j < len; ++j){
if(School[j] >= 'A' && School[j] <= 'Z') School[j] += 32;
}
int id = getId(School);
if(Rank[0] == 'B') num[id].B += Score;
else if(Rank[0] == 'A') num[id].A += Score;
else if(Rank[0] == 'T') num[id].T += Score;
++num[id].tot;
num[id].school = School;
}
for(int i = 1; i <= cnt; ++i){
double tmp = num[i].B / 1.5 + num[i].A + num[i].T * 1.5;
num[i].sum = (int)tmp;
}
sort(num + 1, num + cnt + 1);
printf("%d\n", cnt);
printf("1 %s %d %d\n", num[1].school.c_str(), num[1].sum, num[1].tot);
num[1]._rank = 1;
int kase = 1;
for(int i = 2; i <= cnt; ++i){
if(num[i].sum != num[i - 1].sum){
num[i]._rank = i;
printf("%d %s %d %d\n", num[i]._rank, num[i].school.c_str(), num[i].sum, num[i].tot);
}
else{
num[i]._rank = num[i - 1]._rank;
printf("%d %s %d %d\n", num[i]._rank, num[i].school.c_str(), num[i].sum, num[i].tot);
}
}
}
return 0;
}
1142 Maximal Clique(25 分)
题意:如果一个无向子图中任意两个不同的点都直接相邻,则称其为clique;若该clique不能通过增加其他任何点来使其仍是clique,则称其为maximal clique。给定一个无向图,判断给定的点集是否满足maximal clique。
分析:
1、最多200个点,记录边的信息,暴力即可。
2、对于判断是否为maximal clique,则暴力枚举每个可能增加的点,判断其是否与给定点集中的所有点都直接相邻即可。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
#include<map>
#include<iostream>
#include<vector>
using namespace std;
const int MAXN = 200 + 10;
int Edge[MAXN][MAXN];
vector<int> v;
bool vis[MAXN];
int Nv, Ne;
bool judge(){
int len = v.size();
for(int i = 0; i < len; ++i){
for(int j = i + 1; j < len; ++j){
int tmpx = v[i];
int tmpy = v[j];
if(!Edge[tmpx][tmpy] && !Edge[tmpy][tmpx]){
return false;
}
}
}
return true;
}
string solve(){
int len = v.size();
for(int i = 1; i <= Nv; ++i){
if(!vis[i]){
bool ok = true;
for(int j = 0; j < len; ++j){
int tmpx = v[j];
if(!Edge[i][tmpx] && !Edge[tmpx][i]){
ok = false;
break;
}
}
if(ok) return "Not Maximal";
}
}
return "Yes";
}
int main(){
while(scanf("%d%d", &Nv, &Ne) == 2){
memset(Edge, 0, sizeof Edge);
int a, b;
for(int i = 0; i < Ne; ++i){
scanf("%d%d", &a, &b);
Edge[a][b] = Edge[b][a] = 1;
}
int M;
scanf("%d", &M);
while(M--){
memset(vis, false, sizeof vis);
v.clear();
int K, x;
scanf("%d", &K);
while(K--){
scanf("%d", &x);
v.push_back(x);
vis[x] = true;
}
bool ok = judge();
if(!ok){
printf("Not a Clique\n");
}
else{
printf("%s\n", solve().c_str());
}
}
}
return 0;
}
1143 Lowest Common Ancestor(30 分)
题意:给定一个二叉搜索树,求给定的一对点的最近公共祖先。树的键值在int范围内。
分析:
1、常规思路:离散化树的键值,建BST,在树上求LCA,结果超时。
2、假设待求lca的一对点分别为u和v,遍历给定BST的前序遍历数组,若当前遍历的点值在u和v之间或者值等于u或v,则其必为u和v的最近公共祖先。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
#include<map>
#include<iostream>
#include<vector>
#include<set>
using namespace std;
const int MAXN = 10000 + 10;
int a[MAXN];
map<int, int> mp;
bool judge(int tmp, int x, int y){
return tmp == x || tmp == y || (tmp > x && tmp < y) || (tmp > y && tmp < x);
}
int main(){
int M, N;
while(scanf("%d%d", &M, &N) == 2){
mp.clear();
for(int i = 0; i < N; ++i){
scanf("%d", &a[i]);
mp[a[i]] = 1;
}
int x, y;
while(M--){
scanf("%d%d", &x, &y);
if(!mp.count(x) && !mp.count(y)){
printf("ERROR: %d and %d are not found.\n", x, y);
}
else if(!mp.count(x)){
printf("ERROR: %d is not found.\n", x);
}
else if(!mp.count(y)){
printf("ERROR: %d is not found.\n", y);
}
else{
for(int i = 0; i < N; ++i){
if(judge(a[i], x, y)){
if(a[i] == x){
printf("%d is an ancestor of %d.\n", a[i], y);
}
else if(a[i] == y){
printf("%d is an ancestor of %d.\n", a[i], x);
}
else{
printf("LCA of %d and %d is %d.\n", x, y, a[i]);
}
break;
}
}
}
}
}
return 0;
}
PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA的更多相关文章
- PAT (Advanced Level) Practice(更新中)
Source: PAT (Advanced Level) Practice Reference: [1]胡凡,曾磊.算法笔记[M].机械工业出版社.2016.7 Outline: 基础数据结构: 线性 ...
- PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...
- PAT (Advanced Level) Practice 1001-1005
PAT (Advanced Level) Practice 1001-1005 PAT 计算机程序设计能力考试 甲级 练习题 题库:PTA拼题A官网 背景 这是浙大背景的一个计算机考试 刷刷题练练手 ...
- PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642
PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...
- PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642
PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...
- PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642
PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...
- PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642
PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642
PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...
- PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642
PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642 题目描述: A number that will ...
随机推荐
- 20 个新的且值得关注的 Vue 开源项目
译者:前端小智作者:Nastassia Ovchinnikova来源:flatlogic.com 个人专栏 ES6 深入浅出已上线,深入ES6 ,通过案例学习掌握 ES6 中新特性一些使用技巧及原理, ...
- win10 免安装版本的MySQL的下载安装和配置
一.概述 网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址htt ...
- OA:办公自动化———笔记一
oa:办公自动化 1.对公司结构的管理 基础数据管理 部门进行管理 角色进行管理 权限进行管理 员工进行管理 2.流程管理 利用工作流技术对比较 ...
- Servlet 学习(五)
重定向redirect 1.使用方法 response.sendRedirect("/应用名/ 访问资源名"); response.sendRedirect(request.get ...
- js缓慢运动,Math.ceil向上取整,floor向下取整
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- CSS概述(最详细!!!)
一.先综述 二.分述: 1.简介: 2.基本用法 3.引入方式: 4.盒模型 5.选择器: 6.常见文本样式及复合样式 7.改变行.块元素的属性: 8.标签显示与隐藏: ...
- 02-05Android学习进度报告五
今天主要学习了关于Android 开发的关于进度条和拖动条的知识. 主要学习了一些关于进度条的基本属性: android:max:进度条的最大值 android:progress:进度条已完成进度值 ...
- Linux Kernel 5.5 最终删除 SYSCTL 系统调用
导读 Linux Kernel 5.5 最终消除了支持sysctl系统调用的代码,该代码已被弃用了大约十年,目前对任何体系结构的现代系统都没有影响. 长期以来,Linux sysctl系统调用都不建议 ...
- FF获6亿美元投资九城或许比贾跃亭更着急
互联网企业第九城市(以下简称"九城")确认,已透过旗下子公司与总部位于美国加州的法拉第未来公司签定协议,双方共同建立合资公司,在中国制造.营销及运营电动汽车.根据合资公司协议条款, ...
- Linux centosVMware php-fpm的pool、php-fpm慢执行日志、open_basedir
一.php-fpm的pool vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加 include = etc/php-fpm.d/*.conf mkd ...