QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#107282 | #2205. Convolution | zhoukangyang | AC ✓ | 742ms | 363632kb | C++17 | 3.5kb | 2023-05-20 20:35:46 | 2023-05-20 20:35:50 |
Judging History
answer
#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define vi vector < int >
#define sz(a) ((int) (a).size())
#define ll long long
#define ull unsigned long long
#define me(a, x) memset(a, x, sizeof(a))
#define eb emplace_back
#define uint unsigned int
using namespace std;
const int N = 1 << 20;
namespace MTT {
const double pi = acos(-1);
struct CP {
double x, y;
CP (double X = 0, double Y = 0) {
x = X;
y = Y;
}
inline CP rev() {
return CP(x, -y);
}
};
CP operator + (CP a, CP b) {
return CP(a.x + b.x, a.y + b.y);
}
CP operator - (CP a, CP b) {
return CP(a.x - b.x, a.y - b.y);
}
CP operator * (CP a, CP b) {
return CP(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}
CP Pow[N], iPow[N];
int Lim, rev[N], lim;
void revlim() {
L(i, 0, lim - 1) rev[i] = (rev[i >> 1] >> 1) + ((i & 1) * (lim >> 1));
}
void up(int x) {
for(lim = 1; lim <= x; lim <<= 1);
}
void FFT(CP *f, int op) {
L(i, 0, lim - 1) if(rev[i] < i) swap(f[i], f[rev[i]]) ;
for(int i = 2; i <= lim; i <<= 1) {
for(int j = 0, l = i >> 1, ch = Lim / i; j < lim; j += i) {
for(int k = j, now = 0; k < j + l; ++k) {
CP pa = f[k], pb = f[k + l] * (op == 1 ? Pow[now] : iPow[now]);
f[k] = pa + pb;
f[k + l] = pa - pb;
now += ch;
}
}
}
if(op == -1)
L(i, 0, lim - 1)
f[i].x /= lim, f[i].y /= lim;
}
const int K = 5;
CP _f[K][N], _g[K][N], _h[K * 2 - 1][N];
vector < ull > Mul(vector < ull > f, vector < ull > g) {
const int size = 12, cnt = 5;
const int L1 = cnt - 1, L2 = L1 * 2;
int n = sz(f);
int m = sz(g);
up(n + m - 1);
revlim();
L(p, 0, L1)
L(i, 0, lim - 1)
_f[p][i] = _g[p][i] = CP(0);
L(p, 0, L2)
L(i, 0, lim - 1)
_h[p][i] = CP(0);
L(i, 0, n - 1) L(p, 0, L1) _f[p][i] = CP(f[i] & ((1LL << size) - 1), 0), f[i] >>= size;
L(i, 0, m - 1) L(p, 0, L1) _g[p][i] = CP(g[i] & ((1LL << size) - 1), 0), g[i] >>= size;
L(p, 0, L1)
FFT(_f[p], 1);
L(p, 0, L1)
FFT(_g[p], 1);
L(x, 0, L1)
L(y, 0, L1)
L(i, 0, lim - 1)
_h[x + y][i] = _h[x + y][i] + _f[x][i] * _g[y][i];
L(p, 0, L2)
FFT(_h[p], -1);
vector < ull > ans(n + m - 1);
L(p, 0, L2) {
L(i, 0, n + m - 2) {
ull w = round(_h[p][i].x);
int tab = p * size;
if(tab < 64) ans[i] += w << tab;
}
}
return ans;
}
void Pinit(int x) {
up(x), Lim = lim;
L(i, 0, Lim - 1)
Pow[i] = CP(cos(pi * 2 / Lim * i), sin(pi * 2 / Lim * i)),
iPow[i] = Pow[i].rev();
}
}
int n;
uint a[N], b[N], c[N], p[N], Fac[N], iFac[N];
inline uint Inv(uint x) {
uint ans = 1;
L(i, 1, 31) if((ans * x) >> i & 1) ans += 1LL << i;
return ans;
}
int pop[N];
int main() {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
MTT :: Pinit(n * 2 + 1);
Fac[0] = iFac[0] = 1;
L(i, 1, n)
p[i] = (i & 1) ? i : p[i / 2],
Fac[i] = Fac[i - 1] * p[i], iFac[i] = iFac[i - 1] * Inv(p[i]);
L(i, 1, n)
pop[i] = pop[i >> 1] + (i & 1);
L(i, 0, n) {
cin >> a[i];
}
L(i, 0, n) {
cin >> b[i];
}
L(i, 0, n) a[i] *= iFac[i], b[i] *= iFac[i];
vector < ull > A(n + 1), B(n + 1);
L(i, 0, n)
A[i] = (ull) a[i] << pop[i], B[i] = (ull) b[i] << pop[i];
auto C = MTT :: Mul(A, B);
L(i, 0, n) c[i] = C[i] >> pop[i], c[i] *= Fac[i];
L(i, 0, n) {
cout << c[i] << ' ';
}
cout << '\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 36ms
memory: 347752kb
input:
5 0 1 2 3 4 5 6 7 8 9 10 1
output:
0 6 26 84 240 640
result:
ok single line: '0 6 26 84 240 640 '
Test #2:
score: 0
Accepted
time: 40ms
memory: 347784kb
input:
20 2784725418 1229226343 1420840013 626455248 801960332 2967246149 908748189 2675792005 137867722 152797212 2630617197 1469423914 3168786404 1285990906 1889351564 3743581796 2677401494 2426896925 350439997 1705508844 1014073297 1108495735 3569667145 2161758796 3877107925 2480053372 3565608613 166872...
output:
1380524038 1167579995 2685069313 2675489981 3082309536 3107953375 1867828339 1237100641 1130898632 1450741147 323888426 1495943720 2494347976 480913597 823302955 849645886 775286334 2784164823 2842942371 1930875357 3763680815
result:
ok single line: '1380524038 1167579995 26850693...42942371 1930875357 3763680815 '
Test #3:
score: 0
Accepted
time: 39ms
memory: 347680kb
input:
20 548128412 2507470954 608400082 2098772175 3662898232 877333786 280194505 4084779968 1807264529 468181807 3376156609 1595646133 2993592054 2810267099 225252559 28721026 97587247 2822016074 3522484899 1976705432 2349320967 3610791168 2747262608 3215448504 1456487744 3587742617 3879510281 3194951237...
output:
551349248 3277570496 3425703264 3600289520 2743296156 3080190094 3927360646 4022276689 35508256 125713736 1889883242 153308574 2541862915 3171414656 3909149206 2998790004 1819189856 3937717648 765149572 2847280132 1551145559
result:
ok single line: '551349248 3277570496 342570326...65149572 2847280132 1551145559 '
Test #4:
score: 0
Accepted
time: 36ms
memory: 347684kb
input:
20 3753891182 2394608167 3693735199 4199793613 869025371 850265154 3674403554 2514058621 1329163538 3941729210 2581967653 3748251421 1330590722 3793768812 3353720221 365336338 2684706135 2346584047 2994312290 1764229881 3304594256 4007681693 1740872309 2788569280 4056138702 3287931812 3088163915 169...
output:
2906933366 3283610417 2651161641 1625078398 3761818643 1052402311 2876729108 1565018044 4009990586 565317560 1422404673 2131042614 3496493520 1800114035 1086677760 64100090 3166379481 3289858561 3935323119 191339142 2062942331
result:
ok single line: '2906933366 3283610417 26511616...935323119 191339142 2062942331 '
Test #5:
score: 0
Accepted
time: 44ms
memory: 347752kb
input:
20 3785630724 1429485022 3351277719 1708130733 4116343958 753642450 886084022 1191824464 3126303146 2562467759 37208462 4286086374 3024407677 1905855906 4067158359 4443721 1394224708 1287458782 2445493545 3600206294 2551296420 3136331363 2576327958 1135250867 4148976156 508816169 2122523089 12668401...
output:
1014261132 2854061362 3911814489 2510132467 686274236 2239541122 456100889 3959199826 2220709758 3880204369 92294992 2249327058 4231014725 1287568367 2302734524 805559199 4686016 3054864762 210883947 521881180 1508909592
result:
ok single line: '1014261132 2854061362 39118144...210883947 521881180 1508909592 '
Test #6:
score: 0
Accepted
time: 56ms
memory: 347848kb
input:
1000 3279153469 3671606325 27108852 435849217 2016029675 2075796720 26016265 79131195 3749267589 33129780 833321370 2078215030 765350350 3822193933 2819556599 2307070099 2486880928 999406229 1489448996 2111611091 1638485884 3473345045 443120741 2701840615 1458136509 3362546282 538153143 458460424 48...
output:
2788302893 3492965973 1651090281 2451221375 1023539369 1283301338 810912000 1898850506 3702550040 2688880336 3289038280 922802268 2338763086 2090222744 805482356 4188335561 2264974067 2664805713 4167687645 2819548839 293577519 1746339203 3562542951 940197249 2626569550 1853781575 1932974559 12030391...
result:
ok single line: '2788302893 3492965973 16510902...067193582 2970245712 302835713 '
Test #7:
score: 0
Accepted
time: 52ms
memory: 347800kb
input:
1000 670210172 3940639335 2792022037 3451498167 1657275864 3234345395 247549472 3021482373 2263173914 707614095 1206472680 665749952 3293271702 21857802 202895246 3853070273 4271699067 1181687711 608901674 3232458352 3112431766 136051107 1275843224 1925797379 1272495547 501208650 4003375185 48248514...
output:
1989335624 1169091498 505572906 3255689328 3896464588 3659543377 2332754591 470065533 3861830780 1818714194 781549720 515674089 2373707702 1560180986 1178518189 762366503 3261380458 3421013608 3900357356 292101460 2420904983 1743921894 865623019 2817536700 1399343964 995536086 2316120173 2634188400 ...
result:
ok single line: '1989335624 1169091498 50557290...47484888 3533641310 3598288406 '
Test #8:
score: 0
Accepted
time: 40ms
memory: 348088kb
input:
5000 3128768948 952635669 2909417558 3626952321 2688868880 1143434872 1027885782 2301317689 3980053091 3378620866 1609996386 2368031951 4017674465 2206797355 3765051869 3340035276 2235503251 2280896289 3597417288 2193849177 440119717 2012103276 2683468609 3030748197 2494579278 2556018197 3641379765 ...
output:
925270936 2045891514 85540570 4090058319 707239844 1946213228 176566686 3681002109 463902318 3621235806 4106731113 1428931215 1279047748 4136921362 376284600 2640359304 2594954876 4196314262 2674854519 4290036539 2301294014 1874006328 1996000780 257560823 3559551052 4162912130 4042049843 3366690513 ...
result:
ok single line: '925270936 2045891514 85540570 ...26905134 3946062985 3044137728 '
Test #9:
score: 0
Accepted
time: 28ms
memory: 348068kb
input:
5000 1603436826 307376850 2033101621 991523842 2055917421 705620706 3454773204 1514132575 2214928137 3794275785 4051942352 3967039670 617158669 2557484469 1388591186 3387492775 758460650 2716045350 4115782568 4226714998 3048883800 474389568 1560103696 2252761540 3012449042 3733187216 3627172490 3925...
output:
3931110540 2737319856 1520999586 1110648850 2353309012 3649474532 3508532221 1620489046 855234444 1144654060 3922672312 3504546210 664213239 2517722801 1953828465 3892229353 2458551842 4047849296 1791799243 3642380245 2566307023 3434062007 102945400 3012484618 1326963433 865458018 1203443467 4156879...
result:
ok single line: '3931110540 2737319856 15209995...01955573 1514311803 1870801968 '
Test #10:
score: 0
Accepted
time: 106ms
memory: 349064kb
input:
20000 1874701782 473284468 2270403349 681034868 2609804285 2175864109 3427247416 1696602159 2887991290 356997698 205442850 2686682425 708041602 3663028235 1668426584 1097153226 2649193790 4282871156 3698463368 2703144715 1939486202 1257337909 1184729506 3047264760 894614467 167546800 1410686365 1647...
output:
1329745884 207866280 158018810 199724844 3344887002 1861635968 2889102688 2151649795 3132435102 35857786 790735995 1299147152 1500441785 2243628659 2527104200 4204483478 3683340394 3463278846 2588886353 3359641477 2818196349 4235924358 2654900641 3260488736 2631167948 2679284464 596130943 887054023 ...
result:
ok single line: '1329745884 207866280 158018810...482026824 3432278581 275798176 '
Test #11:
score: 0
Accepted
time: 179ms
memory: 350624kb
input:
40000 4184156107 1462794423 3418182447 3635968766 222732375 2712532524 143762125 1850236837 3918209075 1259552086 345888575 3503033693 1232380548 1423221775 3091237368 542288048 1111894238 296157352 208854146 2917371355 3702478369 1087466767 3008828301 2296555676 2150169479 1275411964 4207542357 373...
output:
718468606 971760481 2754154967 3303358086 3313663647 1072416036 2435305473 3113674360 2908820760 193735946 3758826055 1678734857 2952379854 1717362960 1288371428 3931728604 3364838477 1606120336 3384603221 2064134769 2380730464 2270045681 852630275 1812819148 2104014171 2417012515 3562940369 2146950...
result:
ok single line: '718468606 971760481 2754154967...12859058 3209027909 3999633376 '
Test #12:
score: 0
Accepted
time: 167ms
memory: 350552kb
input:
40000 2186891570 970077841 1287860815 261068444 1364169720 1991359296 3640945879 1310415385 1470296994 2959609213 136655825 2346818796 2858748414 3033126776 3149358404 1226913007 2535623625 4279219112 2712414069 790630447 106140368 475392047 2501671890 2766874886 734729120 1603223866 2577434983 4187...
output:
221285730 1596577277 457079745 1591673683 2087016236 2599843253 1247006122 2961824409 1067056486 4194737881 1217500911 2862515643 1583122916 3366157315 2595510531 2132741193 1984728903 3053410439 2021380679 1322227032 1752862919 3327353743 3269348154 1083455278 3489303112 125647334 342774491 2658518...
result:
ok single line: '221285730 1596577277 457079745...300641791 2656897612 319859767 '
Test #13:
score: 0
Accepted
time: 320ms
memory: 354888kb
input:
90000 744489175 321159723 1802207228 3798483396 2610645438 1679600289 3357265835 857901315 1609506114 1121746896 140548252 2090101123 1675826025 4228858603 857552220 3077770930 1268058354 108439398 1542595223 2929572332 1357499079 3333239857 579569970 2535099656 1574733842 1268444040 1427478580 2673...
output:
3576361460 3517342170 4031842121 3687963292 1907078930 1671317613 3583035302 1839965906 3259864954 1711313225 1089937758 2297204271 4178086064 2147471851 1363725854 1558352589 3257218582 3707042894 2160771091 3403021900 3812520723 1153946732 2096702214 555584000 4140963623 827443188 3167258983 40185...
result:
ok single line: '3576361460 3517342170 40318421...060776291 604415461 3321283253 '
Test #14:
score: 0
Accepted
time: 303ms
memory: 354876kb
input:
90000 1561744195 1394808538 2687925000 2575488233 3890950755 1103251804 1637210574 292978540 1232496010 3596570417 130116143 2420897225 2044815160 2025276754 2050570623 930330943 2272619195 241444305 1224561194 3776473094 646627607 2712107946 3012005270 1192773957 2917516524 1864882609 1473037003 13...
output:
440091075 4041499920 114934899 604111882 3942430140 1515032961 286918653 2192956930 902322067 187033783 2590157954 3965133172 3124507605 2913866881 1216701337 390198658 4240440626 3575186948 2684905413 4037434240 2453679691 1673127406 3193531007 613657149 552686079 2474543501 6733944 1668326567 4276...
result:
ok single line: '440091075 4041499920 114934899...37488393 4285338531 3307221289 '
Test #15:
score: 0
Accepted
time: 742ms
memory: 363524kb
input:
200000 468961257 487037084 510880047 2925532113 303427234 2275188442 747145899 2098120177 1991485852 1211098425 3584539210 3658681677 2103060292 2953005243 2967809512 2426083473 1926410501 2794732498 1347268008 3842809491 1207687930 1709470594 556671034 1192675288 564953072 2518023290 1414343028 414...
output:
1804707999 3502230620 62809875 2483489509 3085342120 1521405885 1412122898 3251950590 2603020375 3663053784 4250236326 1691456871 3740434411 3581127984 1937942863 2282714284 2631732580 4030058120 2892947540 265636973 2375259809 548878830 2990679630 3730252888 4097249477 2766653869 3623379956 9892226...
result:
ok single line: '1804707999 3502230620 62809875...17382779 4023261997 2303906719 '
Test #16:
score: 0
Accepted
time: 711ms
memory: 363632kb
input:
200000 1659179522 25927968 53464530 115500119 2085857018 2629101469 4218640070 2691883741 1407691035 3837469380 1632336308 457158102 2952574198 76682337 3723073205 1698011124 1501553857 912146136 2319935174 1566890666 3001891065 453961916 4082135689 3692571965 1526070967 2193438449 3504353728 368647...
output:
3484620716 2735274002 3968491884 281900580 4282163964 1741314592 227549224 1419654140 3362353716 1303245959 3351670018 1194712467 878182802 2090741989 1791147601 147066202 2853895996 1649211797 2493365990 4149045986 2950235948 4007941121 2597368935 3401003114 1984087973 1436116855 729380621 32293214...
result:
ok single line: '3484620716 2735274002 39684918...8 652007377 93114294 874321987 '
Test #17:
score: 0
Accepted
time: 657ms
memory: 363580kb
input:
200000 1425388347 59123652 3624760048 1333786991 2960314590 3711214754 2374591439 3615587531 3309590856 1474327514 3033823682 3761535340 472733678 4092290231 2909230496 1948689827 3122683948 853889568 251884391 3200891112 3430991238 590839627 2349987184 2835009393 85072827 1746977447 4069047686 2795...
output:
4271822423 1996847875 4158608696 1627692870 1850579659 2288273058 2057023781 1510026774 4237524834 3365141956 2086874462 3380565614 1292974585 2247934146 1292049492 987267280 3940149914 3915306057 771158865 4197523483 726006255 2876962373 3651331542 951903091 1350693966 4097199008 2563254069 3551196...
result:
ok single line: '4271822423 1996847875 41586086...95896143 1594369998 2372452542 '
Test #18:
score: 0
Accepted
time: 703ms
memory: 363420kb
input:
200000 2090690376 3412480517 3680999518 239669512 4084797656 4268690628 1665772993 4093494167 443070164 1448869615 2253023956 3491017578 3799086328 4075607579 1581222455 2017350409 2367185678 3202620361 2538600746 3203905789 677944741 1216587700 2611470636 2118149844 3873267031 504930008 1103144765 ...
output:
795341848 2146289751 774893490 675577412 1423609368 443994253 2035335487 1431637105 600242860 3097077502 2581883904 494248625 1203919248 3325047556 969500026 203464230 3391557194 1545454133 3222756188 1026915956 3709052841 3667304362 26715988 635184669 2177849237 1191615470 2703873847 3678976454 116...
result:
ok single line: '795341848 2146289751 774893490...40911549 1986231461 4070563724 '
Test #19:
score: 0
Accepted
time: 710ms
memory: 363588kb
input:
200000 3316032909 1849158051 3143370657 1684713709 3089333863 3460956704 3615957435 2341892443 4044378171 4240084310 862686810 2593272770 2158333500 693556472 1537403309 2066846812 700688628 1071426967 1162172594 532626387 2168950822 1470275235 3270902105 1628948718 1973620143 2008720976 3255653531 ...
output:
1148089990 1112486925 872589927 2080208305 1894129261 3796196243 1557207584 4043232550 468755243 2123420869 2183292554 2282676004 471348350 38654426 3581818921 3826251193 1013147327 3339111086 4014695690 2191220399 2940563542 1394141148 4074967605 3719082842 787292918 355351435 1911151294 1666338754...
result:
ok single line: '1148089990 1112486925 87258992...1638535407 565365735 415810514 '
Test #20:
score: 0
Accepted
time: 56ms
memory: 347708kb
input:
1 775735979 329040586 1946546624 1679781167
output:
1505360704 1426933221
result:
ok single line: '1505360704 1426933221 '
Test #21:
score: 0
Accepted
time: 36ms
memory: 347692kb
input:
1 2971859324 2799351875 2127759336 2971128269
output:
632847456 2538460676
result:
ok single line: '632847456 2538460676 '