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 += charans += 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;
}

  

转载于:https://www.cnblogs.com/tyty-Somnuspoppy/p/9493757.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AngularJS:表达式

ylbtech-AngularJS&#xff1a;表达式1.返回顶部 1、AngularJS 表达式 AngularJS 使用 表达式 把数据绑定到 HTML。 AngularJS 表达式 AngularJS 表达式写在双大括号内&#xff1a;{{ expression }}。 AngularJS 表达式把数据绑定到 HTML&#xff0c;这与 ng-bind 指令有异曲同…

23 Refs的应用场景与选用思考

Refs含义 允许访问真实DOMReact数据流&#xff1a;通过props来实现父子组件的交互Refs允许强制修改子组件 // 1. 构造器离添加实例属性 this.ref React.createRef() // 2. 组件上绑定ref ref{this.ref} // 3. 使用&#xff1a;this.ref.currentinput class MyInput extends…

flutter --- Windows下环境配置

https://flutter.liulongbin.top/ https://www.cnblogs.com/zxsh/archive/2018/04/16/8859048.html

省选模拟赛记录(越往下越新哦~~~)

LOG 模拟赛第一次见尼玛这么给数据范围的……开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会……思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大力打了一波表……转身T3,码出25分的O(n^2)算法,然后不会了……去了T2,码出35分的O(n…

MFC-CString与int互相转化

1. CString转int int n 0; CString str _T("123");n _ttoi(str); 2. int转CString int n 0; CString str; str.Format(_T(%d) , n); 参考&#xff1a;MFC中 CString与int的转化 vs2010 中 MFC::CString 如何和int相互转化 转载于:https://www.cnblogs.com/Tang-…

flutter --- 使用dio包

打开pubspec.yaml找到dependencies在最下面添加 dio: ^1.0.9ctrl s 之后,会自动下载依赖 使用: // get请求 import package:dio/dio.dart; Dio dio new Dio(); var response await dio.get("/test", data:{"id":12, "name":"marron&qu…

24 React.createRef()用法细节分析

通过React.createRef → ref对象通过元素的ref属性可以附加到React元素上一般通过构造器中给this的属性赋值一个ref&#xff0c;方便整个组件使用ref只要传递到react元素中&#xff0c;就可以利用ref的current属性访问到该真实DOM节点ref在componentDidMount和componentDidUpda…

对于下一代互联网的畅想

去中心化 每台客户机都将成为服务器, 争取对资源的充分利用 显示屏化 运算功能交给云服务器, 每台客户机的主要任务是显示 交互 联网而不是进行运算, 争取对资源的尽可能节省 优点 可以大大降低客户机的成本, 减少资源的浪费, 而且使客户机之间的区别变得更小(因为都主要负责显…

npm install mysql --save-dev

npm install X: 会把X包安装到node_modules目录中不会修改package.json之后运行npm install命令时&#xff0c;不会自动安装Xnpm install X –save: 会把X包安装到node_modules目录中 会在package.json的dependencies属性下添加X 之后运行npm install命令时&#xff0c;会自动…

dart --- 环境配置

1.进入官网下载SDK http://www.gekorm.com/dart-windows/ 2.运行下载的EXE文件.下一步下一步… 3.打开小黑框,输入: dart --version VSCode关于Dart的插件: DartCode Runner 插件安装好后,需重启VSCode. 新建 index.dart,输入以下代码 main () {print("Hello Dart…

Shiro 登录、退出、校验是否登录涉及到的Session和Cookie

前提 我们的使用的是DefaultWebSessionManager而不是ServletContainerSessionManager。这就意味着前者的session为Shiro的&#xff0c;后者的session为Tomcat的。 登录 DefaultWebSessionManager调用start()方法(在AbstractNativeSessionManager中)创建Session&#xff08;Simp…

25 Refs转发机制与在高阶组件中的使用

将子节点的ref暴露给父节点 16.3以上 Refs转发&#xff0c;将ref自动通过组件传递给子组件 1. 在父组件创建ref对象 2. 给子组件赋值ref 3. 通过React.forward向子组件转发ref属性 4. 父组件的ref对象指向子组件dom 5. ref参数只有在 React.forwardRef 组件内定义时可接受con…

26 JSX深度剖析与使用技巧

React对JSX的处理 React.createElement有三个参数&#xff1a;标签类型&#xff0c;属性集合&#xff0c;子元素 JSX其实是React.createElement函数调用的语法糖 JSX → 编译 → React.createElement调用形式 class App extends React.Component {render() {return (<div cl…

javascript --- 数组实用小技巧

一个数组:[a,b,c,d,e],希望满足以下2个条件: 1.当索引在第0个位置的时候,数组为[b,c,d,e],在第1个位置的时候,数组为[a,c,d,e] … 2.若索引i 和 索引 j 的值相等,则只执行1次. 效果如下: nums [1,2,3,4] nums [1,1,1,2,2,3,4] 实现如下: let nums [1,1,1,2,2,3,4]; let le…

Http的持久连接和管线化

【要点】 1. 什么是持久连接&#xff1f; 2. 什么是管线化&#xff1f; 【总结】 1.什么是持久连接&#xff1f; (keep alive模式) HTTP1.1规定了默认保持长连接&#xff08;HTTP persistent connection &#xff0c;也有翻译为持久连接&#xff09;;数据传输完成了保持TCP连接…

Hexo 版本

Mac hexo s 启动Hexo服务报错如下&#xff1a; Error: The module /usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0dtrace-provider/build/Release/DTraceProviderBindings.node was compiled against a different Node.js version using NODE_MODULE_VERSION 48. T…

dart --- 简单的闭包

首先得明白下面2点: 全局变量的特点:常驻内存,污染全局变量局部变量的特点:会被垃圾回收机制回收,不会污染作用域… // 闭包.dart void main(){myClosure(){var a 0; // a是一个局部变量.函数执行完毕后将被清理return (){a;print(a);};}var fn myClosure();fn();fn();fn()…

27 JSX函数子元素的应用与思考

JSX的props.children和props本身有部分一致的特性 props.children可以传递任何类型的子元素 // 调用子元素回调 num 次&#xff0c;来重复生成组件 function Repeat(props) {// 返回一组JSXlet items [];for (let i 0; i < props.num; i) {items.push(props.children(i));…

Python学习day12(生成器,列表/生成器推导式)

Python学习day12(生成器&#xff0c;列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种&#xff1a;一种是调用方法直接返回的&#xff0c;一种是可迭代对象通过执行iter方法得到的&#xff0c;迭代器有的好处是可以节省内存。 如果在某些情况下&#xff0c;我们也…

Cascader 级联选择器

当一个数据集合有清晰的层级结构时&#xff0c;可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。 通过expand-trigger可以定义展开子级菜单的触发方式。 本例还展示了change事件&#…