結果
問題 | No.9005 実行時間/使用メモリテスト(テスト用) |
ユーザー | btk |
提出日時 | 2015-06-09 04:01:04 |
言語 | C++11 (gcc 11.4.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,701 bytes |
コンパイル時間 | 483 ms |
コンパイル使用メモリ | 56,440 KB |
実行使用メモリ | 122,640 KB |
最終ジャッジ日時 | 2024-07-06 14:59:22 |
合計ジャッジ時間 | 2,220 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | MLE | - |
testcase_01 | MLE | - |
testcase_02 | MLE | - |
testcase_03 | MLE | - |
testcase_04 | MLE | - |
ソースコード
#include<time.h> #include<stdio.h> #include<iostream> #define N 5000000 #define LL long long const LL mod = (LL)1e9 + 7; LL a[N],b[N]; LL res1[N], res2[N]; #define Int LL Int gcd(Int a, Int b) { return b != 0 ? gcd(b, a % b) : a; } Int lcm(Int a, Int b) { return a * b / gcd(a, b); } // a x + b y = gcd(a, b) Int extgcd(Int a, Int b, Int &x, Int &y) { Int g = a; x = 1; y = 0; if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x; return g; } Int invMod(Int a, Int m) { Int x, y; if (extgcd(a, m, x, y) == 1) return (x + m) % m; else return 0; // unsolvable } struct modset{ LL n; LL ndash; LL s; LL mask; int shift; modset(LL n){ n = mod; LL r = 1; shift = 0; while (r < n)r <<= 1, shift++; mask = r - 1; s = ((r%n)*(r%n)) % n; ndash = r - invMod(n, r); } }; inline LL mulmod(LL a, LL b,modset& x){ LL T, k; T = a * x.s; k = (T + (((T&x.mask)*x.ndash)&x.mask)*x.n) >> x.shift; k = (k < x.n) ? k : k - x.n; k *= b; k = (k + (((k&x.mask)*x.ndash)&x.mask)*x.n) >> x.shift; return (k < x.n) ? k : k - x.n; } using namespace std; int main(){ int ss; cin >> ss; srand(ss); for (int i = 0; i < N; i++){ a[i] = rand()%mod; b[i] = rand()%mod; } // clock_t st = clock(); for (int i = 0; i < N; i++){ res1[i] = (a[i] * b[i]) % mod; } //cout << "normal:" << clock() - st << endl; /* modset x(mod); //st = clock(); for (int i = 0; i < N; i++){ LL T, k; T = a[i] * x.s; k = (T + (((T&x.mask)*x.ndash)&x.mask)*x.n) >> x.shift; k = (k < x.n) ? k : k - x.n; k *= b[i]; k = (k + (((k&x.mask)*x.ndash)&x.mask)*x.n) >> x.shift; res2[i] = (k < x.n) ? k : k - x.n; } //cout << "mong:" << clock() - st << endl; */ }