励志用尽量少的代码做高效表达


题目(提交)链接——>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)相关推荐

  1. 22行代码AC——例题7-1除法(Division UVa 725)——解题报告

    励志用尽量少的代码做高效的表达 题目(提交)链接→UVa-725 题目大意: 0-9不重复的组成两个5位数,如果数A/数B=n,则为可行解. 思路分析: 本题实质是通过巧妙分析的暴力求解法. 下等解法 ...

  2. 希望PAT耗子尾汁:1014 福尔摩斯的约会 (20分)——22行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEd ...

  3. 22行代码AC——L1-023 输出GPLT(~解题报告~)

    立志用更少的代码做更高效的表达 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT-这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数 ...

  4. 22行代码AC——习题5-6 对称轴(Symmetry,UVa1595)——解题报告

    励志用尽量少的代码做高效的表达. 题目(提交)链接→UVa-1595 思路: 此题本质是一道笛卡尔坐标系上的对称性问题. 判定性问题:由于只要能判别图像是否左右对称即可,无需确认关于哪条垂直线对称,那 ...

  5. 17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告

    励志用少的代码做高效的表达 题目(提交)链接→UVa-10935 本题为水题,因此侧重点由解题转向优化. 解题思路: 解法一思路:用vector动态数组存储,可以方便的实现插入.删除等操作. 解法二思 ...

  6. 【三种解法】Not so Mobile UVA - 839_19行代码AC

    立志用最少的代码做最高效的表达 Before being an ubiquous communications gadget, a mobile was just a structure made o ...

  7. 【三种解法】剑指 Offer 06. 从尾到头打印链表【附完整可运行代码】

    立志用最少的代码做最高效的表达 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表 ...

  8. [简单题]自定义取余(三种解法)C++实现

    题目链接: 点击打开原题链接 题目意思,就是标题意思. 第一种解法:(加法迭代)用加法来模拟这个(17行代码) int mod256WithoutMod(int number) {if (number ...

  9. 12行代码AC——L1-058 6翻了(15分)

    立志用更少的代码做更高效的表达 "666"是一种网络用语,大概是表示某人很厉害.我们很佩服的意思.最近又衍生出另一个数字"9",意思是"6翻了&quo ...

最新文章

  1. kvm--virsh命令行下管理虚拟机
  2. Android中文输入的新选择——搜狗拼音输入法
  3. Go 语言编程 — 程序结构
  4. 【thymeleaf】data-*
  5. CodeForces - 1373D Maximum Sum on Even Positions(最大连续子段和)
  6. ANSI C标准预定义宏
  7. Java基础—集合2Set接口和Map接口
  8. Vue.js 服务器端渲染指南
  9. android绑定服务空指针,android aidl问题空指针的问题
  10. 通力法评 | 简评中国证监会关于MOM产品的征求意见稿
  11. 使用pkg打包node应用
  12. TIA PORTAL博途中进行网络组态时,拓扑视图要不要组态,有什么作用?
  13. directX学习系列8 颜色融合(转)
  14. NFS服务器搭建与autofs自动挂载
  15. nachos安装 Ubuntu18.04为例
  16. 2022年计算机视觉产业链全景图谱,一文读懂计算机视觉产业链全局
  17. 计算两个日期的相隔天数
  18. Tensorboard高维向量可视化
  19. H.266 JEM7.0 帧内预测之四(Planar模式的基于位置的帧内预测组合 (PDPC))
  20. 日志审计系统及ELK日志系统

热门文章

  1. MySQL(一)SQL执行流程与MySQL架构
  2. 低学历程序员的红利来了,这个政策来的太惊喜!
  3. 你知道这 8 种 SQL 错误用法吗?
  4. Java8 中用法优雅的 Stream,性能也优雅吗?
  5. PPIO创始人王闻宇:从PPTV到PPIO,创业路上的挑战与思考
  6. 用FFmpeg搭建基于CNN的视频分析方案
  7. LiveVideoStackCon深圳-透过业务看QoE
  8. LiveVideoStack Meet成都 生活与技术的“矛盾体”(内附资料下载)
  9. 业界首创,腾讯网络平台部实现大规模光网络实时管控系统TOOP
  10. Go netpoller 网络模型之源码全面解析