HDU
来源:互联网 发布:睡眠水 知乎 编辑:程序博客网 时间:2024/06/05 14:47
题目链接:HDU - 2609
大致题意:
这题就是给你n个字符串,然后如果是同构的字符串(如 :1100和0110和0011就是同样的字符串)
所以这题的话,就是用最小表示法求出所有字符串的最小表示法,再暴力一下,求出不同的最小表示法的个数。
#include<bits/stdc++.h>using namespace std;const int MAX_N =1e4+9;string vec[MAX_N];int res[MAX_N];string cmp[MAX_N];vector<string> que;int getMin(string str){ int len = str.length(); int i=0,j=1; int k=0; while(i<len && j<len) { int t = str[(i+k)%len] - str[(j+k)%len]; if(!t) k++; else { if(t < 0) { if(j+k+1 > i) j = j+k+1; else j = i+1; } else if(i+k+1 > j) i = i+k+1; else i = j+1; k=0; } if(k>=len) break; } return i>j?j:i;}int main(){ //freopen("in.txt","r",stdin); int N,M,T; while(cin>>N) { que.clear(); int num = 0; for(int i =0;i<N;i++) cin>>vec[i]; for(int i =0;i<N;i++) res[i] = getMin(vec[i]); for(int i =0;i<N;i++) { cmp[i] = vec[i].substr(res[i],vec[i].length()-res[i]) + vec[i].substr(0,res[i]); } for(int i=0;i<N;i++) { int flag = false; for(int j =0 ;j<num;j++) { if(cmp[i] == que[j]) flag = true; } if(!flag) { num ++ ; que.push_back(cmp[i]); } } cout<<num<<endl; } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 哈哈
- requireJS模块化编程的使用
- CS231N学习笔记1 Image Classification
- sftp JSCH连接sftp出现如下报错解决办法
- 5.读书笔记收获不止Oracle之 插入表性能示例
- HDU
- MongoDB数据插入insert和save的区别
- at91sam9260的u-boot移植
- SSM uploadify 图片上传
- 6.读书笔记收获不止Oracle之 逻辑体系
- PHP命名空间和自动加载类
- 时间配置
- C的时间函数
- handler线程,判断是否联网,Get获取网页 json解析,输入流转换字符串