您的位置:首页 > 运维架构

Topcoder SRM 668 DIV 2

2015-09-16 12:22 309 查看

VerySecureEncryption 模拟

题意:

给你个串message,然后一个置换key,输出置换K次后的结果。

题解:

直接模拟就好。

代码:

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;

typedef long long ll;

int ma[1000006];

ll gcd(ll a,ll b) {
return b == 0 ? a : gcd(b, a % b);
}

class AnArray {
public:
int solveProblem(vector<int> A, int K) {
for (auto a:A) {
for (int i = 1; i * i <= a; i++) {
if (a % i == 0) {
ma[i]++;
int t = a / i;
if (i * i != a && t <= 1000000)ma[t]++;
}
}
}
ll res = 0;
for (int i = 0; i < A.size(); i++)
for (int j = 0; j < A.size(); j++) {
if (i == j)continue;
ll tmp = 1;
tmp = tmp * A[i] * A[j];
int g = gcd(tmp, K);
int t = K / g;
res = res + ma[K / g];
if (A[i] % t == 0)res--;
if (A[j] % t == 0)res--;
}
return res / 6;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: