HDU 2609 How many(字符串同构,最小表示法)

基于STM32F407标准库与SimpleFOC实现无刷电机2804位置闭环控制的实战解析 本文详细解析了基于STM32F407标准库与SimpleFOC算法实现2804无刷电机位置闭环控制的实战过程。通过硬件选型、速度闭环调试到位置环PID参数整定,提供了完整的工程实现方案和抗饱和策略,帮助开发者掌握高精度电机控制技术。 阅读详情

How many

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2696    Accepted Submission(s): 1162


Problem Description
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me
How many kinds of necklaces total have.(if two necklaces can equal by rotating ,we say the two necklaces are some).
For example 0110 express a necklace, you can rotate it. 0110 -> 1100 -> 1001 -> 0011->0110.
 

Input
The input contains multiple test cases.
Each test case include: first one integers n. (2<=n<=10000)
Next n lines follow. Each line has a equal length character string. (string only include '0','1').
 

Output
For each test case output a integer , how many different necklaces.
 

Sample Input
  
4 0110 1100 1001 0011 4 1010 0101 1000 0001
 

Sample Output
  
1 2
 

Author
yifenfei
 

Source
 

Recommend
yifenfei


题意:问有多少个不同构的字符串 (同构字符串:多次将字符串的第一个元素移到最后所得的多个字符串称同构字符串 Eg:"abcd" , "bcda" , "cdab" , "dabc" 为同构字符串,而最小表示法表示的字符串则为上述字符串中字典序排序最小的一个,即 "abcd" 。

#include<bits/stdc++.h>
using namespace std;

const int N = 10000 + 10;
char a[N][101], b[N][202], c[N][101];
int n;
struct A{
    char str[101];
};

int getminsub(char *a)
{
    int i = 0,j = 1,len = strlen(a),k = 0; 
    while(i < len && j < len && k < len) 
    {
        if(k == len) break; 
        if(i == j) j++;
        int ni = i + k, nj = j + k;
        if(ni >= len) ni -= len; 
        if(nj >= len) nj -= len;
        if(a[ni] > a[nj])
        {
            i += k + 1;
            k = 0;
        }
        else if(a[ni] < a[nj])
        {
            j += k + 1;
            k = 0;
        }
        else k++;
    }
    return  i; 
}

int cmp(const void *a,const void *b)
{
    A *c, *d;
    c = (A *)a;
    d = (A *)b;
    return strcmp(c -> str, d -> str);
}

int main()
{
    while(scanf("%d", &n) == 1)
    {
        int l;
        for(int i = 0; i < n; i++)
        {
            scanf("%s", a[i]);
            if(!i) l = strlen(a[i]);
            sprintf(b[i], "%s%s", a[i], a[i]);
            int x = getminsub(a[i]);
            b[i][x + l] = '\0';
            sprintf(c[i], "%s", b[i] + x);
        }
        qsort(c, n, sizeof(c[0]), cmp);  ///这里将字符串按字典序排序
        int sum = 1;
        for(int i = 1; i < n; i++)
        {
            if(strcmp(c[i], c[i - 1]))
                sum++;
        }
        printf("%d\n", sum);
    }
}






多智能体记忆架构设计:从分层模型到一致性实践 多智能体记忆架构本质上是一个有状态、分布式、支持遗忘的知识系统。从分层模型入手,结合RBAC隔离、版本向量一致性以及混合存储,可以构建出既灵活又健壮的生产级方案。可微分记忆:让记忆的读写操作嵌入端到端训练。基于大模型的记忆压缩:用LLM自动生成情景摘要,取代规则式遗忘。联邦记忆:不同组织之间的多智能体系统在不共享原始数据的情况下协同记忆。希望本文能为你的多智能体项目提供一块坚实的基石。欢迎在评论区分享你在实践中遇到的记忆架构难题。 阅读详情

相关推荐

【液晶专题】从外挂到In-Cell/ On-Cell/ OGS再也不会傻傻分不清楚了

触控技术经历了从外挂式到内嵌式的革新,主要方案包括外挂式(Out-Cell)、OGS、On-Cell和In-Cell。

一点硬件 1252

HDU - 2609——How many (最多不重复循环串)

Give you n ( n &lt; 10000) necklaces ,the length of necklace will not large than 100,tell me How many kinds of necklaces total have.(if two necklaces can equal by rotating ,we say the two necklaces a...

creator平 610

GD32模拟IIC读写DVC1124

GD32模拟IIC读写集澈AFE芯片DVC1124

ponyma_的博客 1226

HDU 2609 How many(最小表示法)

题目链接:HDU 2609 How many 题目大意: 有n个有01组成的字符串,每个字符串都代表一个项链,那么该字符串就是一个环状的结构,求可以经过循环旋转,最后不同的串有多少个。 算法思想: 将每个字符串转换成最小串,然后放在set里面去重。 最小表示法: 循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。

Winjourn的专栏 881

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析,RDA的实现路径也有很多,今天介绍一下CANOCO软件的实现方法。1.不同样点和环境因子之间夹角是锐角 是正相关,是钝角是负相关。2.夹角越大 说明相关性较小,夹角越小,相关性越大。得有不同的物种或者样点数值,再加上环境因子数据。3.箭头越长 相关性越大。时间调整到2010年。

Along6的博客 1万+

学术版GPT安装教程——保姆版(附带原生GPT注册教程)

学术版GPT图文安装教程

DBenD的博客 2万+

HDU 2609 How many(最小表示法)

有 n 个字符串,可以对他们进行任意次旋转,问最少出现多少相同的字符串 由于可以任意旋转,所以每个字符串的最小表示法相同,加 set/map 去重即可 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <sstream> #include <set> #define rush() ...

C_Dreamy的博客 386

STM32H7 Flash擦除后数据读取异常的缓存问题解析

本文深入分析了STM32H7系列芯片在Flash擦除后数据读取异常的缓存问题,揭示了由于数据缓存(D-Cache)和指令缓存(I-Cache)导致的数据一致性问题。通过详细的解决方案,包括手动维护缓存一致性和操作期间禁用缓存,帮助开发者有效解决这一常见但棘手的嵌入式开发难题。

weixin_29158413的博客 392

HDU - 2609 How many 最小表示法应用

HDU - 2609 How many 题意: 给你n串项链(字符串可以左移),判断有多少种不同的项链 思路: 最小表示法+set 如果这些长度相同的字符串通过旋转后相同,则他们的最小表示法一定相同,最后set的大小即为不同的串数。 substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字...

没有梦想何以远行 279

保姆级教程:在mmdetection中手动计算并可视化P、R、F1值(附完整代码)

本文提供了一份详细的mmdetection教程,指导开发者如何手动计算并可视化精确率(P)、召回率(R)和F1值。通过完整的代码示例和清晰的步骤说明,帮助用户深入理解目标检测模型的性能评估方法,特别适合需要精细分析模型表现的计算机视觉研究人员和工程师。

weixin_29038303的博客 399

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 88

HDU2609 How many —— 最小表示法

题目链接:https://vjudge.net/problem/HDU-2609 How many Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3272Accepted Submission(s): 1457...

alince20008的博客 151

Open3D 进阶(22)间接平差法拟合空间曲线

空间曲线拟合在电力线三维重建中有着广泛的应用,本文利用python使用间接平差法对三维空间曲线的拟合进行代码实现。

点云侠的博客 1057

HDU 2609 How many【最小表示法】

How many 传送门。 题意: 多组输入 每组一个n,串串个数 通过首尾相连可以相同的串算一类,求一共有几类串。 For example 011001100110 express a necklace, you can rotate it. 0110−&gt;1100−&gt;1001−&gt;0011−&gt;0110.0110 -&gt; 110...

zhmeng 254

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

HDU2609How many(最小表示法+set去重)

题目链接:hdu2609 题目大意:给n段01串,问这些串中共有几组同构串。同构串定义:两个字符串存在 分别从x,y下标开始直到x-1,y-1(循环表示)字符都相等的表示,则这两个串同构。 解题思路:用暴力O(n^2)搜索的话显然会超时,这里引进O(n)的 字符串最小表示法,并且将串利用set去重。 最小/大表示法: 同kmp的next数组类似,都是利用减少重复状态搜索的思路进行优化。 最小表示法...

小胡同的诗 354

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最小表示法+hash hdu2609 How many

传送门:点击打开链接 题意:有n个串,每个串是一个环,如果通过移动环之后能一样,认为是同一种串。问有多少种串。 思路:很明显我们首先要把认为是一样的串变成一样的,比如找到这个串的最小表示法,所以这道题的目的就是为了求最小表示法,然后用hash搞一搞排序然后去重,或者是直接插入到set里面取size都是可以的 KMP(复杂度O(n))来搞最小表示法暂时还不会,先挖个坑,我这里还有一种通过二分+

qwb的博客 1460

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【题解】How many HDU - 2609 ⭐⭐⭐ 【最小表示法】

How many HDU - 2609 The input contains multiple test cases. Each test case include: first one integers n. (2<=n<=10000) Next n lines follow. Each line has a equal length character string. (strin...

Suprit's blog 699

HDU-2609 How many

题目链接:https://vjudge.net/problem/HDU-2609 这道题一看就很容易想到用最小表示法,把每个串都字典序最小化,再判重 判重的方法一开始没有想到,后来知道了可以先排序再去重,也可以直接用set去重 这里用set明显更方便,时间上也没问题 #include #include #include #include #include #include using na

wl16wzl的博客 268

HDU 2609 How many [最小表示法]

Description给n个字符串,如果循环同构,就算一组,问总共有几组Algorithm将每个字符串转成最小表示,然后sort一下Code#include <cstdio> #include <algorithm> #include <iostream> using namespace std; const int maxn = 100010; int main() { int n; wh

more time 576

hdu 2609 How many(最小表示法 + Trie树)

题意:给你m个字符串,让你判断一下这是多少种字符串(同构的算一种)。 思路:通过最小表示法把这个字符串 “唯一” 表示。然后通过插入到Trie树中统计有多少种字符串。 AC Code: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e6+7; const in...

一身清贫怎敢入繁华 334

字符串——字符串的最大最小表示法

字符串的最大最小表示法 感谢这篇博客:字符串的最小表示法 引言:一个长度为n的字符串可以将最后一位放在第一位,这样就有n种变形。如"bcaxe" 可以变成 :ebcax xebca axebc caxeb 这几种。 字符串的最大最小表示法,就是求着n种变形中的最大最小字典序的字符串,返回的值是第一个最大最小的字符串的起始字符位置,时间复杂度为O(n)。 思想:(最小表示法) 就是定义三个下标初始 ...

wxy2635618879的博客 1469

HDU2609 How many【字符串最小表示】

How many Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5769 Accepted Submission(s): 2706 Problem Description Give you n ( n < 10000) ne...

海岛Blog 486

hdu2609How many 最小表示法

//n(n<=10000)个字符串,字符串的长度l<=100 //问这n个字符串中有多少不同得字符串 //两个字符串相同只要其循环同构 //先求出每个字符串的最小表示法 //用map存下就行 #include #include #include #include using namespace std ; const int maxn = 1e4+10 ; map ma ; string str

ijbuhv的专栏 578

hdu 2609 How many(最小表示法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 题意:给你n个字符串每个字符串可以左右移动但还是同一串比如0110 可以表示为 0110 -> 1100 -> 1001 -> 0011->0110 这些都属于同一个字符串,最后问这n个字符串里一共有多少不同的字符串 可以将这些字符串都以其最小表示...

awow80285的博客 124

HDU 2609 How Many

最大最小表示法与去重 可以发现,题目中是求不同构环的数目,我们可以采用最大最小表示法,将它们都最大/最小表示出来,再判断有几个不同的, 可以使用string类,操作较为简单,也可以使用自定义struct 二维字符数组, 去重可以使用 sort+unique 可以使用 set 也可以字符串哈希 #include <iostream> #include <cstdio&gt...

87

HDU-2609 How many(最小表示法)

题目链接 题意: 找出所给字符串中,不同的有几个(循环同构也不能相同) 思路: 求出每个字符串的最小表示,然后用map 去重即可 不会戳这里 AC: //#include<bits/stdc++.h> #include<iostream> #include<cstring> #include<map> #include<stri...

Harington的博客 313
上一篇: HDU 1978 How many ways(记忆化搜索)
下一篇: 个人模板 字符串按字典序排序
信鸦
博客等级 码龄10年 10粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值