当前位置: 首页 > article >正文

题海拾贝——环状序列(ACM/ICPC Seoul 2004,UVa1584)

        Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

a89f0e8669a54363a09e6dd8ec8a9af3.gif

我的博客:<但凡.

我的专栏:编程之路、 题海拾贝

欢迎点赞关注!

目录

1、题目 

2、分析

3、题解(附详细解析)


1、题目 

       长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。例如,abc可以表示为bca,cab,共有三种表示方法。在这些表示法中,字典序最小的成为“最小表示”。

       输入一个长度为n(n<=100)的环状DNA串(只包含ACGT这四种字符的一种表示法,你的任务是输出该环状串的最小表示。例如,CTCC的最小表示是CCCT。


2、分析

       字典序,就是在字典中出现在位置,所以我们只要保证这个表示的第一个位置为ASCII最小的字符就可以了。我们可以通过遍历每一种表示法,比较出最小的那一种。


3、题解(附详细解析)

#include<stdio.h>
#include<string.h>
int less(const char*s,int now,int ans)
{
	int n = strlen(s);
	int i = 0;
	for (i = 0;i < n;i++)
	{
		if (s[(i + now) % n] != s[(i + ans) % n])//注意这里是不等于
		{
			return s[(i + now) % n] - s[(i + ans) % n];//返回值大于0,则说明当下的表示方法更大
			//返回值小于0则当下的表示方法更小
		}
	}
	return 0;//相等
}
int main()
{
	char s[100] = "";
	scanf("%s",s);
	int i = 0;
	int n = strlen(s);
	int ans = 0;//存放当下最小坐标
	for (i = 1;i < n;i++)//比较n次
	{
		if (less(s,i,ans)<0)//i为当下起始坐标,ans为当下最小坐标
		{
			ans = i;//如果当下表示方法更小,则让当下表示方法成为ans
		}
	}
	for (i = 0;i < n;i++)
	{
		putchar(s[(ans + i) % n]);
	}
	return 0;
}

       好了,今天的内容就分享到这,期待我们的下次见面!


http://www.kler.cn/a/419866.html

相关文章:

  • Rust循环引用与多线程并发
  • 5G CPE介绍(一)
  • 红日靶场vulnstark 2靶机的测试报告
  • 详解Rust异步编程
  • Shire 1.1 发布:更强大的交互支持,升级 AI 智能体与 IDE 的整合体验
  • 思维导图+实现一个登录窗口界面
  • 代码设计:设计模式:应对变化
  • Vue:使用 KeepAlive 缓存切换掉的 component
  • 【机器学习】机器学习学习笔记 - 无监督学习 - k-means/均值漂移聚类/凝聚层次聚类/近邻传播聚类 - 05
  • 【JavaScript】下拉框的实现
  • leetcode530:二叉搜索树的最小绝对值差
  • GitHub Copilot革命性更新:整合顶尖AI模型,如何重塑开发体验?
  • 用 React 编写一个笔记应用程序
  • SQL优化与性能——C++与SQL性能优化
  • 重学设计模式-建造者模式
  • 题海拾贝——生成元(Digit Generator,ACM/ICPC SEOUL 2005,UVa1583)
  • 15.三数之和 python
  • 深度学习模型:门控循环单元(GRU)详解
  • Web基础
  • java中的运算符
  • Elasticsearch面试内容整理-面试注意事项
  • Python 深度学习框架之Keras库详解
  • AI在线免费视频工具4:AI视频编辑ai-video-composer
  • 2024.12.2工作复盘
  • Ubuntu20.04安装NVIDIA显卡驱动
  • parallelStream并行流使用踩坑,集合安全