【HDOJ】4162 Shape Number
2015-12-22 11:10
295 查看
循环串的最小表示法。
/* */ #include <iostream> #include <string> #include <map> #include <queue> #include <set> #include <stack> #include <vector> #include <deque> #include <algorithm> #include <cstdio> #include <cmath> #include <ctime> #include <cstring> #include <climits> #include <cctype> #include <cassert> #include <functional> #include <iterator> #include <iomanip> using namespace std; //#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int> #define stpii set<pair<int, int> > #define mpii map<int,int> #define vi vector<int> #define pii pair<int,int> #define vpii vector<pair<int,int> > #define rep(i, a, n) for (int i=a;i<n;++i) #define per(i, a, n) for (int i=n-1;i>=a;--i) #define clr clear #define pb push_back #define mp make_pair #define fir first #define sec second #define all(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 const int maxl = 3e5+5; char M[8][8]; char s[maxl]; char d[maxl]; int len; void init() { rep(i, 0, 8) { rep(j, 0, 8) { M[i][j] = (j-i+8)%8 + '0'; } } } int minStr() { int i, j, k; int tmp; i = 0; j = 1; k = 0; while (i<len && j<len && k<len) { tmp = d[(i+k)%len] - d[(j+k)%len]; if (tmp == 0) { ++k; } else { if (tmp < 0) j += k+1; else i += k+1; if (i == j) ++j; k = 0; } } return i<j ? i:j; } int main() { ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif int k; init(); while (scanf("%s", s) != EOF) { len = strlen(s); s[len] = s[0]; rep(i, 0, len) { d[i] = M[s[i]-'0'][s[i+1]-'0']; } #ifndef ONLINE_JUDGE d[len] = '\0'; puts(d); #endif k = minStr(); rep(i, 0, len) { putchar(d[(k+i)%len]); } putchar('\n'); } #ifndef ONLINE_JUDGE printf("time = %d.\n", (int)clock()); #endif return 0; }
相关文章推荐
- Word Pattern pattern = "abba", str = "dog cat cat dog" should return true
- WinForm窗体键盘事件,支持方向键和回车键
- 用TC、按键、易语言接入百宝云开发注册码系统
- hdoj2012水题
- Foundation框架中的NSArray类和NSMutableArray类
- 类名前自动添加前缀
- ListView分批加载数据
- Android中调用startActivity结果导致:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}
- 打造Android一体式轮播广告条
- mysql数据库批量操作
- 检测ADO.net拼接字符串中非法字符
- 强密码验证的正则表达式
- 开博纪念
- OC-UI-004.纯代码编写按钮的简单方法
- SQL Server2012 创建数据库存储过程和VS2015 C#调用自己的存储过程
- 【Android Studio初级学习】Android Studio如何发布APK
- Google Volley使用之基础
- Oracle限制用户只能从指定IP登录
- java synchronized 多线程 分析
- 我博客中的常用博文及大神的博客地址