PLease explain why 2 same codes are not giving the same ans
code forces round 728 div2 Problem B :https://codeforces.net/contest/1541/problem/B
AC Submission : https://ide.codingblocks.com/s/579800
Wrong output Submission :https://ide.codingblocks.com/s/579801
Difference is using of macro (node) instead of pair<int,int>
Please help
If i am using #define node pair<int,int> it is getting accepted but when i am using typedef pair<int,int> node; it is giving wrong answer
Why this is happening ?? Is it a bug??
First of all, you should better share your codes using numbers of submissions like that 120678373. It is more convenient for CF users; I examined your codes this way due to "compare" button. Also, it seems that you mixed up the submissions: the one you suggest as WA (https://ide.codingblocks.com/s/579801) is actually AC (my AC submission 120693832).
The actual reason of WA is that
int * int == int
, soa[i].first * a[j].first
behaves not as you think it does. Why do you have AC and WA submissions both?The compilation process in C++ consists of many stages. One of the earliest just scans the code and once it finds a
#define
, it will replace all the occurrences of the defined word below.typedef
creates a synonym for the type; it behaves in more clever way.So this code would get compilation error
because preprocessor would replace
node
withpair<int, int>
and there are many symbols that aren't allowed in variable names. On the other side, this code would work fineThe compiler understands that
node
is a variable name and doesn't replace it with something else.So, in your AC submission the actual type of array
a
is array ofpair<long long, long long>
. You have these two defines in your code:and they do combine to the following (the first one changes the second one)
And your WA submission contains
pair<int, int> a[n]
, so that may cause WA or even TLE (in the caseif (a[i].first * a[j].first > 2 * n)
works too rare).