hdu 2609 How many
来源:互联网 发布:丽贝卡百年孤独知乎 编辑:程序博客网 时间:2024/05/13 15:17
点击打开链接hdu 2609
思路:字符串的最小表示
分析:
1 题目要求的是给定n个字符串,找出不同的字符串的个数。由于题目说了,字符串可以进行变换,也就是如果两个字符串相同那么它们的最小表示是相同的。
2 只要求出所有字符串的最小表示,然后利用set存储,最后set的元素个数就是最后的ans
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;#define MAXN 210int n , len;char String[MAXN];set<string>s;/*求最小表示的下标*/int getMin(){ int i = 0 , j = 1 , k = 0; while(i+k < len && j+k < len){ if(String[i+k] == String[j+k]) k++; else{ if(String[i+k] > String[j+k]) i = i+k+1; else j = j+k+1; k = 0; if(i == j) j++; } } return min(i , j);}/*求出最小表示*/void getMinString(char *str){ str[len/2] = '\0'; s.insert(str);}int main(){ while(scanf("%d" , &n) != EOF){ s.clear(); for(int i = 0 ; i < n ; i++){ scanf("%s" , String); char tmp[MAXN]; memcpy(tmp , String , sizeof(String)); strcat(String , tmp); len = strlen(String);/*求出长度*/ int num = getMin(); getMinString(String+num); } printf("%d\n" , s.size()); } return 0;}
- hdu 2609 How Many
- hdu 2609 How many
- hdu 2609 How many
- HDU 2609 How Many
- HDU 2609 How many
- hdu 2609 how many
- HDU 2609 How many
- HDU 2609How many
- hdu 2609 How many
- hdu 2609 How many(最小表示法)
- [最小表示法] hdu 2609 How many
- HDU——2609 How many
- [最小表示法] HDU 2609 How many
- HDU - 2609 How many(最小表示法)
- HDU 2609 How many(最小表示法)
- HDU-2609 How many (最小表示法)
- HDU 2609 How many [最小表示法]
- hdu How Many Tables
- 图像噪声的抑制——均值滤波、中值滤波、对称均值滤波
- Java回调函数的理解
- OGRE基础教程 一 SceneManager、SceneNode、Entity
- Javascript继承机制的设计思想
- GPS定位转百度坐标
- hdu 2609 How many
- 我们拿这10年做什么——满足成为年轻富翁的条件
- OGRE基础教程 二 Cameras, Lights, and Shadows
- hdu 2830 Matrix Swapping II
- 15个Google面试题以及答案
- Android通过基站获取地理位置
- 我的安卓学习之路--String StringBuffer StringBuilder的区别
- xirang
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” Java语言版