博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 484C Strange Sorting
阅读量:5143 次
发布时间:2019-06-13

本文共 1982 字,大约阅读时间需要 6 分钟。

http://codeforces.com/problemset/problem/484/C

题目意思比较难描述。。所以自己看吧。。。

 

假设前面的一段操作对于的置换是 P。再定义把字符串左移一个位置对应置换 L,右移对应 R。

那么这个操作可以看做是:$$(L^0 P R^0) (L^1 P R^1) (L^2 P R^2) ... (L^{n-l}PR^{n-l})$$

也就是:$$P(LP)^{n-l}R^{n-l}$$

 

模拟置换的乘法复杂度是 $O(n)$。于是可以利用快速幂来求最终置换。

 

$P.S.$ memset 太多 TLE 了一回 0.0

#include 
typedef std::vector
Replace;typedef const Replace& CR;typedef Replace& Rf;void multiply(CR a, CR b, Rf result){ int n = (int) a.size(); for (int i = 0; i < n; i++) result[i] = b[a[i]];}Replace mulTmp;void multiply(Rf a, CR b){ multiply(a, b, mulTmp); for (int i = 0; i < (int) a.size(); i++) a[i] = mulTmp[i];}void power(Rf a, int p, Rf result){ for (int i = 0; i < (int) result.size(); i++) result[i] = i; for (; p; p >>= 1) { if (p & 1) multiply(result, a); multiply(a, a); }}Replace powTmp;void power(Rf a, int p){ power(a, p, powTmp); for (int i = 0; i < (int) a.size(); i++) a[i] = powTmp[i];}const int MAXN = 1000000 + 5;char str[MAXN];char res[MAXN];Replace P, L, LP, R, T;int main(){ scanf("%s", str); int n = strlen(str); L.resize(n); R.resize(n); P.resize(n); LP.resize(n); T.resize(n); mulTmp.resize(n); powTmp.resize(n); for (int i = 0; i < n; i++) T[i] = i; int m; scanf("%d", &m); for (int l, d; m--; ) { scanf("%d %d", &l, &d); for (int i = 0; i < n; i++) { L[i] = i - 1; R[i] = i + 1; } L[0] = n - 1; R[n - 1] = 0; for (int i = 0; i < n; i++) P[i] = i; int now = 0; for (int i = 0; i < d; i++) { for (int j = i; j < l; j += d) P[j] = now++; } multiply(L, P, LP); power(LP, n - l); power(R, n - l); multiply(T, P); multiply(T, LP); multiply(T, R); memset(res, 0, sizeof(char) * (n + 1)); // sizeof(res) will TLE. for (int i = 0; i < n; i++) res[T[i]] = str[i]; puts(res); // strcpy(str, res); } return 0;}// 0 1 2 3 4 5// 0 1 0 1 4 5// 0 2 1 3 4 5

  

转载于:https://www.cnblogs.com/gu-castle/p/4999253.html

你可能感兴趣的文章
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
【题解】青蛙的约会
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
安装 Express
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
Postman-----如何导入和导出
查看>>
【Linux】ping命令详解
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
【模板】最小生成树
查看>>
java面试题
查看>>
pair的例子
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
Oracle中包的创建
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>