Code Submission Evaluation System Login

BOI 2016, day 1

Start:2016-05-12 09:00:00
End:2016-05-12 14:00:00
 

Tasks | Scoreboard | Statistics


CSES - BOI 2016, day 1 - Results
History
2016-05-12 16:07:27100
2016-05-12 12:15:1743
2016-05-12 11:00:0112
Task:Spiral
Sender:geniucos
Submission time:2016-05-12 12:15:17
Language:C++
Status:READY
Score:43

Feedback

groupverdictscore
#1ACCEPTED12
#2WRONG ANSWER0
#3WRONG ANSWER0
#4ACCEPTED31
#5WRONG ANSWER0

Test results

testverdicttime (s)group
#1ACCEPTED0.09 / 1.501details
#2WRONG ANSWER0.05 / 1.502details
#3WRONG ANSWER0.05 / 1.503details
#4ACCEPTED0.05 / 1.504details
#5WRONG ANSWER0.04 / 1.505details

Compiler report

input/code.cpp: In function 'void Task1()':
input/code.cpp:143:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d", &Q);
                     ^
input/code.cpp:147:50: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d %d %d %d", &a1, &b1, &a2, &b2);
                                                  ^
input/code.cpp: In function 'int main()':
input/code.cpp:159:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%d", &N), mod = 1e9 + 7;
                                ^
input/code.cpp:165:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%d", &Q);
                 ^
input/code.cpp:169:46: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d %d %d %d", &a1, &b1, &a2, &b2);
                                              ^

Code

#include<bits/stdc++.h>

using namespace std;

int mod, N, Q, nr, a[2016][2016], s[2016][2016];

void Move (int steps, int dx, int dy, int &i, int &j)
{
    while (steps --) i += dx, j += dy, a[i][j] = ++nr;
}

void Print ()
{
    for (int i=1; i<=2 * N + 1; i++, printf ("\n"))
        for (int j=1; j<=2 * N + 1; j++)
            printf ("%2d ", a[i][j]);
    printf ("\n");
}

int sum (int a1, int b1, int a2, int b2)
{
    int ans = (s[a2][b2] - s[a1 - 1][b2] - s[a2][b1 - 1] + s[a1 - 1][b1 - 1]) % mod;
    if (ans < 0) ans += mod;
    return ans;
}

int pow (int a, int b, int mod)
{
    int p = 1;
    for (int i=0; (1<<i) <= b; i++)
    {
        if (b & (1 << i)) p = (1LL * p * a) % mod;
        a = (1LL * a * a) % mod;
    }
    return p;
}

int Gs1 (int i)
{
    return (1LL * i * (i + 1) / 2) % mod;
}

int Gs2 (int x)
{
    int v[3];
    v[0] = x, v[1] = x + 1, v[2] = 2 * x + 1;
    for (int j=2; j<=3; j++)
        for (int i=0; i<3; i++)
            if (v[i] % j == 0)
            {
                v[i] /= j;
                break;
            }
    return (1LL * ((1LL * v[0] * v[1]) % mod) * v[2]) % mod;
}

int Gs3 (int x)
{
    x = Gs1 (x);
    return (1LL * x * x) % mod;
}

int gs1 (int st, int dr)
{
    int ans = Gs1 (dr) - Gs1 (st - 1);
    if (ans < 0) ans += mod;
    return ans;
}

int gs2 (int st, int dr)
{
    int ans = Gs2 (dr) - Gs2 (st - 1);
    if (ans < 0) ans += mod;
    return ans;
}

int gs3 (int st, int dr)
{
    int ans = Gs3 (dr) - Gs3 (st - 1);
    if (ans < 0) ans += mod;
    return ans;
}

int s1 (int i)
{
    int ans = (2LL * i * i) % mod;
    ans = (1LL * ans * (i + 1)) % mod;
    ans = (1LL * ans * (i + 1) + i + 1) % mod;
    return ans;
}

int sum_pol (int st, int dr, int A, int B, int C)
{
    ///sum for k = st, dr Ak ^ 2 + Bk + C
    int ans = (1LL * A * gs2 (st, dr) + 1LL * B * gs1 (st, dr) + 1LL * C * (dr - st + 1)) % mod;
    if (ans < 0) ans += mod;
    return ans;
}

int sum1 (int i, int j)
{
    if (i < 0 || j < 0) return 0;
    if (i >= j)
    {
        int curr1 = s1 (j), curr2 = 1LL * j * (i - j) % mod, curr3 = (2LL * sum_pol (j + 1, i, 4, -3, 1)) % mod;
        curr2 += curr3;
        if (curr2 >= mod) curr2 -= mod;
        curr2 = (1LL * curr2 * (j + 1)) % mod;
        if (curr2 % 2 == 0) curr2 /= 2;
        else curr2 = (curr2 + mod) / 2;
        curr1 += curr2;
        if (curr1 >= mod) curr1 -= mod;
        return curr1;
    }
    int curr1 = s1 (i), curr2 = mod - 1LL * i * (j - i) % mod, curr3 = (2LL * sum_pol (i + 1, j, 4, -1, 1)) % mod;
    curr2 += curr3;
    if (curr2 >= mod) curr2 -= mod;
    curr2 = (1LL * curr2 * (i + 1)) % mod;
    if (curr2 % 2 == 0) curr2 /= 2;
    else curr2 = (curr2 + mod) / 2;
    curr1 += curr2;
    if (curr1 >= mod) curr1 -= mod;
    return curr1;
}

void Task1 ()
{
    a[N + 1][N + 1] = nr = 1;
    for (int l = 1; l <= N; l++)
    {
        int i = N + l + 1, j = i;
        Move (2 * l, -1, 0, i, j);
        Move (2 * l, 0, -1, i, j);
        Move (2 * l, 1, 0, i, j);
        Move (2 * l, 0, 1, i, j);
    }
    for (int i=1; i<=2 * N + 1; i++)
        for (int j=1; j<=2 * N + 1; j++)
        {
            s[i][j] = (s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]) % mod;
            if (s[i][j] < 0) s[i][j] += mod;
        }
    scanf ("%d", &Q);
    while (Q --)
    {
        int a1, b1, a2, b2;
        scanf ("%d %d %d %d", &a1, &b1, &a2, &b2);
        a1 += N + 1, b1 += N + 1, a2 += N + 1, b2 += N + 1;
        swap (a1, b1), swap (a2, b2); a1 = 2 * N + 1 - a1 + 1, a2 = 2 * N + 1 - a2 + 1, swap (a1, a2);
        printf ("%d\n", sum (a1, b1, a2, b2));
    }
}

int main ()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%d", &N), mod = 1e9 + 7;
if (N <= 2000)
{
    Task1 ();
    return 0;
}
scanf ("%d", &Q);
while (Q --)
{
    int a1, b1, a2, b2, ans;
    scanf ("%d %d %d %d", &a1, &b1, &a2, &b2);
    ans = (sum1 (a2, b2) - sum1 (a1 - 1, b2) - sum1 (a2, b1 - 1) + sum1 (a1 - 1, b1 - 1)) % mod;
    if (ans < 0) ans += mod;
    printf ("%d\n", ans);
}
//Print ();
/*int curr = 0, curr2;
for (int i=0; i<=N; i++)
{
    curr += (4 * i * i - 2 * i + 1) * (2 * i + 1);
    curr2 = 2 * i * i * (i + 1) * (i + 1) + i + 1;
    printf ("%d %d %d\n", sum (N + 1 - i, N + 1, N + 1, N + i + 1), curr, curr2);
}*/
/*for (int i=0; i<=N; i++)
    for (int j=0; j<=N; j++)
        printf ("%d %d -> %d %d\n", i, j, sum1 (i, j), sum (N + 1 - j, N + 1, N + 1, N + 1 + i));
return 0;*/
return 0;
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
1000 100
-709 0 1000 123
-621 -1000 -102 -435
-602 -560 276 -356
-945 -590 0 -468
-106 -809 235 -277
-654 -317 975 1
42 -250 271 80
-537 -341 307 685
-939 -1000 67 429
-737 -743 -206 -656
-244 -816 210 -265
-948 -306 -693 149
1000 -230 1000 266
-1 146 497 780
1 -653 295 536
-629 413 235 505
-1000 -163 -1000 -127
-33 -773 128 29
-895 0 324 648
...
view   save

correct output
788057008
633127082
507903329
53165899
558016315
302089138
566211035
559423498
252507519
337514610
408751067
11314517
986518436
749615506
770971645
659417332
148042402
377036107
695769426
139996789
...
view   save

user output
788057008
633127082
507903329
53165899
558016315
302089138
566211035
559423498
252507519
337514610
408751067
11314517
986518436
749615506
770971645
659417332
148042402
377036107
695769426
139996789
...
view   save

Test 2

Group: 2

Verdict: WRONG ANSWER

input
1000000000 100
181053719 1000000000 181053719...
852751643 863389570 852751643 ...
-161213342 -447073611 -1612133...
813819781 -140986437 813819781...
-268931454 1 -268931454 1
-535129439 664254541 -53512943...
-37958808 536286414 -37958808 ...
570795830 -434946577 570795830...
405557765 652154349 405557765 ...
217542840 879737653 217542840 ...
-8797270 0 -8797270 0
263406926 -103702080 263406926...
417673370 -1 417673370 -1
-618520914 -724183720 -6185209...
-845795672 376533093 -84579567...
325062284 1 325062284 1
598762221 -430223124 598762221...
240779920 -225435228 240779920...
540964704 -76817080 540964704 ...
...
view   save

correct output
818946492
750635163
193830026
660632411
46072376
472803047
812702745
911600992
712194929
656239841
844441902
822425230
890978307
121806251
534620131
983366131
922448146
929751481
1520635
549597234
...
view   save

user output
818946492
750635163
0
0
0
0
0
0
712194929
656239841
0
0
0
0
0
983366131
0
0
0
0
...
view   save

Test 3

Group: 3

Verdict: WRONG ANSWER

input
100000 100
-88233 -87279 -49871 52277
-86645 -7997 48948 30702
-79916 -36210 -21257 -16821
0 57331 93163 100000
44248 -92086 82069 33876
-94630 25007 -25590 98962
16155 -5755 96544 62759
-81488 -26648 23 100000
-14958 56727 93378 89262
8115 -61830 100000 14245
81406 -71848 89340 -27273
-21732 -3446 0 90611
-29732 -31333 -17581 88824
-49910 -100000 75765 60308
-99934 99821 -2437 100000
-30488 3497 27202 85753
-96429 -60310 94121 -52638
-91077 -72776 -55352 0
-60349 -93167 -22305 -70442
...
view   save

correct output
986592951
708386765
85336595
18263594
32233727
191927838
917012013
68207304
680109056
161693316
718423685
402706528
445400315
482305558
902547162
575661103
458292319
248089294
568361776
369103934
...
view   save

user output
0
826975265
0
18263594
915389070
0
513550403
751404235
262068425
929511489
0
408384269
0
286789100
0
814232101
0
0
0
985393167
...
view   save

Test 4

Group: 4

Verdict: ACCEPTED

input
1000000000 100
1 1 21134200 719983102
1 1 929463279 1000000000
1 1 68450838 1
1 1 84417340 297177199
1 1 1 343367274
1 1 124752051 466376574
1 1 881274458 333485384
1 1 1 639843287
1 1 218885316 41069224
1 1 389032543 1
1 1 559995242 339166021
1 1 1000000000 1
1 1 576960949 906365100
1 1 1 665174609
1 1 479125748 1
1 1 863672278 963679556
1 1 167501216 1000000000
1 1 601316864 722654796
1 1 739729791 880627974
...
view   save

correct output
695961158
957360176
137575768
522232140
58884045
406010456
146562569
456690551
167395515
484286023
395206507
999999566
822116832
848601421
771498811
187752764
103974960
284245539
174771858
698363351
...
view   save

user output
695961158
957360176
137575768
522232140
58884045
406010456
146562569
456690551
167395515
484286023
395206507
999999566
822116832
848601421
771498811
187752764
103974960
284245539
174771858
698363351
...
view   save

Test 5

Group: 5

Verdict: WRONG ANSWER

input
1000000000 100
-857489445 -1000000000 -432836...
81977033 -740250254 605214029 ...
681633641 -1 786755036 1367416...
613219620 -629478605 763915005...
2964572 244317647 601041223 99...
-196156852 -128320437 69180975...
-542221994 -159095881 -2993968...
-297670401 305316465 207760864...
-647927334 -75065196 -1 301899...
-740735184 -979789736 1 -81317...
-893563915 -937860292 -7315639...
-150493935 -53307647 408566258...
4971883 120690836 643069370 70...
-899606935 -162385187 44595688...
74629300 517384780 458554953 6...
-1 417955698 802239354 7895247...
-860356476 -1000000000 -317982...
-807742787 -100142044 91420967...
-641658816 1142760 -29777797 7...
...
view   save

correct output
902627632
581519884
819269364
857298983
278402948
138389570
382251480
497385669
179802934
291456937
561433345
100042259
624201364
527261545
383179762
427359341
385615799
741162504
982984746
422953981
...
view   save

user output
0
0
239483569
113507818
278402948
827590501
0
427144364
0
0
0
419654825
624201364
343703295
383179762
499472688
0
200813064
0
0
...
view   save