首页 > 代码库 > HDU 5063 Operation the Sequence(暴力)
HDU 5063 Operation the Sequence(暴力)
HDU 5063 Operation the Sequence
题目链接
把操作存下来。因为仅仅有50个操作,所以每次把操作逆回去执行一遍,就能求出在原来的数列中的位置。输出就可以
代码:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int N = 100005; const ll MOD = 1000000007; int t, n, m, c; ll a[N]; int op[N], on; char str[3]; ll pow_mod(ll x, ll k) { ll ans = 1; while (k) { if (k&1) ans = ans * x % MOD; x = x * x % MOD; k >>= 1; } return ans; } ll solve(int c) { ll mul = 1; for (int i = on - 1; i >= 0; i--) { if (op[i] == 1) { if (c > (n + 1) / 2) c = (c - (n + 1) / 2) * 2; else c = (c - 1) * 2 + 1; } else if (op[i] == 2) c = n - c + 1; else mul = mul * 2 % (MOD - 1); } return pow_mod(a[c], mul); } int main() { scanf("%d", &t); while (t--) { on = 0; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) a[i] = i; while (m--) { scanf("%s%d", str, &c); if (str[0] == ‘O‘) op[on++] = c; else printf("%lld\n", solve(c)); } } return 0; }
HDU 5063 Operation the Sequence(暴力)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。