Submission #1188615

#TimeUsernameProblemLanguageResultExecution timeMemory
1188615petezaMultiply (CEOI17_mul)C++20
100 / 100
70 ms8688 KiB
#include <bits/stdc++.h> using namespace std; using cd = complex<double>; double pi = acos(-1); int n, m; vector<cd> va, vb; string s; void fft(vector<cd>&arr, bool mode) { int cn = arr.size(); if(cn == 1) return; vector<cd> a0, a1; for(int i=0;i<cn;i+=2) { a0.push_back(arr[i]); a1.push_back(arr[i+1]); } fft(a0, mode); fft(a1, mode); double ang = (mode ? -1 : 1) * 2*pi/cn; cd croot(1), w(cos(ang), sin(ang)); for(int i=0;i<cn/2;i++) { arr[i] = a0[i] + croot * a1[i]; arr[i+cn/2] = a0[i] - croot * a1[i]; croot *= w; } if(mode) for(auto &e:arr) e /= 2; } int main() { cin.tie(0) -> sync_with_stdio(0); cin >> n >> m; va.resize(n); vb.resize(m); cin >> s; reverse(s.begin(), s.end()); for(int i=0;i<n;i++) va[i] = s[i] - '0'; cin >> s; reverse(s.begin(), s.end()); for(int i=0;i<m;i++) vb[i] = s[i] - '0'; if(n < m) {swap(n, m); swap(va, vb);} va.push_back(0); while(vb.size() < va.size()) vb.push_back(0); while(__builtin_popcount(va.size()) > 1) {va.push_back(0); vb.push_back(0);} va.push_back(0); vb.push_back(0); while(__builtin_popcount(va.size()) > 1) {va.push_back(0); vb.push_back(0);} fft(va, 0); fft(vb, 0); for(int i=0;i<va.size();i++) va[i] *= vb[i]; fft(va, 1); vector<int> ans; int curcar = 0; for(auto &e:va) { curcar += round(e.real()); ans.push_back(curcar%10); curcar /= 10; } while(!ans.empty() && ans.back() == 0) ans.pop_back(); reverse(ans.begin(), ans.end()); for(auto &e:ans) cout << e; if(ans.empty()) cout << 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...