結果
問題 | No.9005 実行時間/使用メモリテスト(テスト用) |
ユーザー | btk |
提出日時 | 2015-06-09 04:07:59 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 226 ms / 3,000 ms |
コード長 | 1,474 bytes |
コンパイル時間 | 494 ms |
コンパイル使用メモリ | 55,716 KB |
実行使用メモリ | 81,556 KB |
最終ジャッジ日時 | 2024-07-06 14:59:39 |
合計ジャッジ時間 | 2,173 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 226 ms
81,408 KB |
testcase_01 | AC | 222 ms
81,408 KB |
testcase_02 | AC | 222 ms
81,280 KB |
testcase_03 | AC | 222 ms
81,556 KB |
testcase_04 | AC | 222 ms
81,524 KB |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:66:55: warning: ‘x.modset::n’ is used uninitialized [-Wuninitialized] 66 | k = (T + (((T&x.mask)*x.ndash)&x.mask)*x.n) >> x.shift; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
ソースコード
#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]; #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); } }; using namespace std; const int M= (1 << 30) - 1; int main(){ int ss; cin >> ss; srand(ss); for (int i = 0; i < N; i++){ a[i] = rand() &M; b[i] = rand() &M; } //// clock_t st = clock(); // for (int i = 0; i < N; i++){ // a[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; a[i] = (k < x.n) ? k : k - x.n; } //cout << "mong:" << clock() - st << endl; cout << 0 << endl; }