Problem link : https://codeforces.com/contest/1620/problem/C
Submission link : https://codeforces.com/contest/1620/submission/162394549
# | User | Rating |
---|---|---|
1 | tourist | 3851 |
2 | jiangly | 3634 |
3 | Um_nik | 3539 |
4 | slime | 3498 |
5 | ksun48 | 3493 |
6 | djq_cpp | 3486 |
7 | maroonrk | 3471 |
8 | MiracleFaFa | 3466 |
9 | Radewoosh | 3442 |
10 | Petr | 3426 |
# | User | Contrib. |
---|---|---|
1 | -is-this-fft- | 183 |
2 | awoo | 181 |
3 | YouKn0wWho | 177 |
4 | Um_nik | 175 |
5 | dario2994 | 172 |
6 | Monogon | 170 |
6 | adamant | 170 |
8 | maroonrk | 169 |
9 | errorgorn | 166 |
10 | antontrygubO_o | 165 |
Problem link : https://codeforces.com/contest/1620/problem/C
Submission link : https://codeforces.com/contest/1620/submission/162394549
Name |
---|
a[i+1] out of bounds.
This won't happen because before that there is an or statement i+1 == n, when this will be true the a[i+1] statement will never run.
Have you noticed $$$x \le 10^{18}$$$?
Yeah, I noticed. This won't make any problem.
Your code seems to have a lot of issues, I just fixed it for runtime errors.
Shadowed declaration
string a;
andauto mul = [&] (int a, int b)
.Can be divide by 0
int t = x/prod[i];
.What if prod is empty
prod.back() = 1;
Can be accessed out of bound
forn(_, take[i])
Can be overflow
int ans = A * b;
Thanks for replying. This prod[i] cannot be zero. I fixed the prod.back.
forn(_, take[i])
canot overflowI have handled overflow using the gfg method. Is not this corrrect?
I am not reviewing your logic, I just pointing out some code that has a potential runtime error.
I see you create vector here with size of vector "cnt"
vi prod(sz(cnt));
. If cnt is an empty vector, prod is also an empty vector.In problem constraint, k can be zero, cur always 0 so
cnt
will have no elementprod
is empty at this point andprod.back()
will give an errorIn this code
forn(_, take[i])
, I see that you increasei
in the outter loop and try to access the elementtake[i]
without checking the size which can be out of bound. A counter-example would bek = 0
-> vectortake
is empty ->take[i]
will give an error.This is a submission link that I try to fix your runtime error Submission. The overflow still exists, I don't know what method you use to handled overflow but it seems not working
https://godbolt.org/z/7PvxGxKxK
Notice that compiler generate just
imul
instruction.In c++ integer overflow (
int ans = a * b
) is UB. And because it is UB, compiler think "whyb == 0 || ans / b == a
would not be true?" and just not generate such instructions.Now its MLE:) 162639237
Thank you so much bro. I copied the code to handle overflow from GFG. What do u use to handle overflow during multiplication?