22行代码AC,三种解法——例题3-6_环状序列(UVa-1584)
励志用尽量少的代码做高效表达
题目(提交)链接——>Uva-1584
因为是水题,因此做题重心由解题转向优化
核心思路:
本题共有三种解法:
解法一、string字符串中assign()+erase()截取字符串模拟循环
大概思路是利用assign()赋值序列的前半部分,用一中间变量保存,同时用erase()删除前半部分,将后半部分与中间变量连接,就是一条新链,循环取字典序最小者
解法二、取余模拟循环(书中解法)
大概思路就是利用取余将序列从逻辑上连接起来,每次从头逐个比较序列,保存较小的,最后输出。
解法三、循环链表求解
物理上将序列首尾相连,效率低,编写较麻烦,不推荐。
解法一源码:
#include<bits/stdc++.h>
using namespace std;
int main() {int n; cin >> n; while(n--) {string sTruely; //存放输入串 string sMin; //存放最小的字典序表示 string sTemporary; //等于输入串,做临时变量 cin >> sTruely; //输入 sMin = sTruely; //最小字典序串设初始值 int len = sTruely.length(); for(int i = 1; i < len; i++) {sTemporary = sTruely; //临时变量代替输入串 string t; t.assign(sTemporary,0,i); //串t赋给前i位 sTemporary.erase(0,i); //临时变量删除前i位 t = sTemporary+t; //串t=临时变量+串t if(sMin > t) sMin = t; //判断 }cout << sMin << '\n';} return 0;
}
解法二注意事项:
这里我用C++写法将书中源码敲了一遍,可奇怪的是,总是弹出错误:
但反复检查,除了我使用了C++的写法,其他与书中代码并无出入,真是人间迷惑?(⊙_⊙)?
最后发现问题出在函数名less中, 命名空间using namespace std;
中包含less关键字,导致C++无法编译成功。 将less改为Less方通过编译。
解法二代码:
#include<bits/stdc++.h>
#define maxn 105
using namespace std;
char s[maxn];
bool Less(const char* s, int p, int q) { //p为i,q为ans int n = strlen(s);for(int i = 0; i < n; i++) if(s[(p+i)%n] != s[(q+i)%n]) return s[(p+i)%n] < s[(q+i)%n];return 0; //相等
}
int main() {int T; cin >> T; while(T--) {cin >> s;int ans = 0, n = strlen(s);for(int i = 1; i < n; i++) if(Less(s, i, ans)) ans = i; //比较首字母,若后者首字母较小,ans记录后者位置。 for(int i = 0; i < n; i++) putchar(s[(i+ans)%n]);putchar('\n'); }return 0;
}
拨云见日,未来可期
22行代码AC,三种解法——例题3-6_环状序列(UVa-1584)相关推荐
- 22行代码AC——例题7-1除法(Division UVa 725)——解题报告
励志用尽量少的代码做高效的表达 题目(提交)链接→UVa-725 题目大意: 0-9不重复的组成两个5位数,如果数A/数B=n,则为可行解. 思路分析: 本题实质是通过巧妙分析的暴力求解法. 下等解法 ...
- 希望PAT耗子尾汁:1014 福尔摩斯的约会 (20分)——22行代码AC
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEd ...
- 22行代码AC——L1-023 输出GPLT(~解题报告~)
立志用更少的代码做更高效的表达 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT-这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数 ...
- 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告
励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...
- 17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告
励志用少的代码做高效的表达 题目(提交)链接→UVa-10935 本题为水题,因此侧重点由解题转向优化. 解题思路: 解法一思路:用vector动态数组存储,可以方便的实现插入.删除等操作. 解法二思 ...
- 【三种解法】Not so Mobile UVA - 839_19行代码AC
立志用最少的代码做最高效的表达 Before being an ubiquous communications gadget, a mobile was just a structure made o ...
- 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】
立志用最少的代码做最高效的表达 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表 ...
- [简单题]自定义取余(三种解法)C++实现
题目链接: 点击打开原题链接 题目意思,就是标题意思. 第一种解法:(加法迭代)用加法来模拟这个(17行代码) int mod256WithoutMod(int number) {if (number ...
- 12行代码AC——L1-058 6翻了(15分)
立志用更少的代码做更高效的表达 "666"是一种网络用语,大概是表示某人很厉害.我们很佩服的意思.最近又衍生出另一个数字"9",意思是"6翻了&quo ...
最新文章
- kvm--virsh命令行下管理虚拟机
- Android中文输入的新选择——搜狗拼音输入法
- Go 语言编程 — 程序结构
- 【thymeleaf】data-*
- CodeForces - 1373D Maximum Sum on Even Positions(最大连续子段和)
- ANSI C标准预定义宏
- Java基础—集合2Set接口和Map接口
- Vue.js 服务器端渲染指南
- android绑定服务空指针,android aidl问题空指针的问题
- 通力法评 | 简评中国证监会关于MOM产品的征求意见稿
- 使用pkg打包node应用
- TIA PORTAL博途中进行网络组态时,拓扑视图要不要组态,有什么作用?
- directX学习系列8 颜色融合(转)
- NFS服务器搭建与autofs自动挂载
- nachos安装 Ubuntu18.04为例
- 2022年计算机视觉产业链全景图谱,一文读懂计算机视觉产业链全局
- 计算两个日期的相隔天数
- Tensorboard高维向量可视化
- H.266 JEM7.0 帧内预测之四(Planar模式的基于位置的帧内预测组合 (PDPC))
- 日志审计系统及ELK日志系统
热门文章
- MySQL(一)SQL执行流程与MySQL架构
- 低学历程序员的红利来了,这个政策来的太惊喜!
- 你知道这 8 种 SQL 错误用法吗?
- Java8 中用法优雅的 Stream,性能也优雅吗?
- PPIO创始人王闻宇:从PPTV到PPIO,创业路上的挑战与思考
- 用FFmpeg搭建基于CNN的视频分析方案
- LiveVideoStackCon深圳-透过业务看QoE
- LiveVideoStack Meet成都 生活与技术的“矛盾体”(内附资料下载)
- 业界首创,腾讯网络平台部实现大规模光网络实时管控系统TOOP
- Go netpoller 网络模型之源码全面解析