http://www.codechef.com/IOPC2014/problems/IOPC14A
What is the way to solve this problem? Most of solutions seems to check (n!mod (2*b))>=b or not ,whats the reason for this?
№ | Пользователь | Рейтинг |
---|---|---|
1 | jiangly | 3976 |
2 | tourist | 3815 |
3 | jqdai0815 | 3682 |
4 | ksun48 | 3614 |
5 | orzdevinwang | 3526 |
6 | ecnerwala | 3514 |
7 | Benq | 3482 |
8 | hos.lyric | 3382 |
9 | gamegame | 3374 |
10 | heuristica | 3357 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 169 |
2 | -is-this-fft- | 165 |
3 | Um_nik | 161 |
3 | atcoder_official | 161 |
5 | djm03178 | 157 |
6 | Dominater069 | 156 |
7 | adamant | 154 |
8 | luogu_official | 152 |
9 | awoo | 151 |
10 | TheScrasse | 148 |
http://www.codechef.com/IOPC2014/problems/IOPC14A
What is the way to solve this problem? Most of solutions seems to check (n!mod (2*b))>=b or not ,whats the reason for this?
Название |
---|
You can calc the power of 2 in n!(it's n/2+n/4+n/8+...) and power of 2 in b(just divide it by 2 while n%2=0) and compare this values
vintage_Vlad_Makeev your idea is wrong probably because it's integer division. For eg:
a) 12 = 22 * 3 , 8 = 23, (12 / 8 = 1) % 2 = 1
b) 20 = 22 * 5 , 8 = 23, (20 / 8 = 2) % 2 = 0
But powers of 2 in (12, 8) and (20, 8) are same. You could find a similar case for factorials as well.
Each student gets n! / b (integer division) oranges. If n!%(2b) is less than b, then it can be written as 2*k*b + r for some integer k and r < b. Then n!/b is equal to 2*k, so each student gets an even number of oranges. If n!%(2b) is >= b, then it can be written as 2*k*b + r where b <= r < 2*b, or 2*k*b + b + r', where r' = r — b, so 0 <= r' < b. Then, (2*k*b + b + r')/b = 2*k + 1, which is odd.
one more doubt
The above code seems to be finding (a*b)%m ,but we can do directly right .then why coders do so?
Doing it directly could result in overflow.
but can (a%m)*(b%m)%m cause overflow?
Yes because they can both be up to m-1, and m can be up to 10^18
u r so fast in helping ,ty
one more doubt if i dont write long double it gives wa ~~~~~ (long long)((long double)a * (long double)b / (long double)m); ~~~~~
and
whats difference
Long doubles are more precise than doubles, and long longs have a higher range of values than longs.