QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#828421#4283. Power of XORRong7TL 2148ms69456kbC++172.7kb2024-12-23 16:33:112024-12-23 16:33:11

Judging History

This is the latest submission verdict.

  • [2024-12-23 16:33:11]
  • Judged
  • Verdict: TL
  • Time: 2148ms
  • Memory: 69456kb
  • [2024-12-23 16:33:11]
  • Submitted

answer

// Go in my style.
// Not afraid to dark.

#include <bits/stdc++.h>
using namespace std;

clock_t sttime;
#define STCLOCK sttime = clock ();
#define TIMENOW fprintf (stderr, "\nNOW TIME COSSEMED: %0.4lf\n", 1.0 * (clock () - sttime) / CLOCKS_PER_SEC);
#define inline __inline__ __attribute__ ((always_inline))

#define int long long

namespace io {
    int read_pos, read_dt; char read_char;
    inline int read (int &p = read_pos){
        p = 0, read_dt = 1; read_char = getchar ();
        while (! isdigit (read_char)){
            if (read_char == '-')
                read_dt = - 1;
            read_char = getchar ();
        }
        while (isdigit (read_char)){
            p = (p << 1) + (p << 3) + read_char - 48;
            read_char = getchar ();
        }
        return p = p * read_dt;
    }
    int write_sta[65], write_top;
    inline void write (int x){
        if (x < 0)
            putchar ('-'), x = - x;
        write_top = 0;
        do
            write_sta[write_top ++] = x % 10, x /= 10;
        while (x);
        while (write_top)
            putchar (write_sta[-- write_top] + 48);
    }
}

#define ful(t) ((1ll << (t)) - 1)
const int N = 44, mod = 1e9 + 7;
int n, m, ts[N + 5], cnt;

struct LINE {
    int b[N + 5];
    inline bool insert (int x){
        for (int i = N;i >= 0;-- i)
            if (x >> i & 1){
                if (b[i]) x ^= b[i];
                else {
                    b[i] = x;
                    return true;
                }
            }
        return false;
    }
    inline void sol (){
        map < pair < int , int > , int > f, g;
        f[make_pair (0, 0)] = 1;
        auto upd = [&] (int i, pair < int , int > t, int w){
            auto r = t;
            t.first ^= w;
            g[make_pair (t.first & ful (i), t.second + (t.first >> i & 1))] += f[r];
        };
        for (int i = N;i >= 0;-- i){
            if (b[i])
                for (auto x : f) upd (i, x.first, 0), upd (i, x.first, b[i]);
            else for (auto x : f) upd (i, x.first, 0);
            f.clear (); swap (f, g);
        }
        for (auto x : f) ts[x.first.second] += x.second;
    }
} l;

inline int power (int a, int p){
    static int res; res = 1;
    while (p > 0){
        if (p & 1) res = res * a % mod;
        a = a * a % mod;
        p >>= 1;
    }
    return res;
}

signed main (){
    STCLOCK

    io::read (n), io::read (m);
    for (int i = 1;i <= n;++ i) cnt += ! l.insert (io::read ());
    l.sol ();
    int ans = 0;
    for (int i = 1;i <= N;++ i) ans = (ans + ts[i] % mod * power (i, m)) % mod;
    ans = ans * power (2, cnt) % mod;
    io::write (ans), putchar ('\n');

    TIMENOW
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 4020kb

input:

3 2
1 2 3

output:

12

result:

ok 1 number(s): "12"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3740kb

input:

2 1000000000
1 2

output:

140625003

result:

ok 1 number(s): "140625003"

Test #3:

score: 0
Accepted
time: 1ms
memory: 3956kb

input:

3 4
21 31 15

output:

1076

result:

ok 1 number(s): "1076"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3864kb

input:

4 10
21 16 23 30

output:

3504120

result:

ok 1 number(s): "3504120"

Test #5:

score: 0
Accepted
time: 1ms
memory: 4084kb

input:

5 795325759
23 18 18 15 24

output:

398580583

result:

ok 1 number(s): "398580583"

Test #6:

score: 0
Accepted
time: 1ms
memory: 3872kb

input:

6 425010546
15190825693299 11021868218180 10853490476696 16489831131502 15731786397897 1859285400474

output:

226806798

result:

ok 1 number(s): "226806798"

Test #7:

score: 0
Accepted
time: 0ms
memory: 3936kb

input:

7 376524109
14035202899482 10047025581205 744778190838 10085364176616 17517303536898 10648638998430 4344258259221

output:

909089159

result:

ok 1 number(s): "909089159"

Test #8:

score: 0
Accepted
time: 2ms
memory: 3948kb

input:

8 849112677
12651182249229 2557626671152 16190796268614 7679451552477 1419165382365 16010747922241 1877804892046 6782866140038

output:

60890703

result:

ok 1 number(s): "60890703"

Test #9:

score: 0
Accepted
time: 0ms
memory: 3984kb

input:

9 874735099
10148022499611 4300816040299 6425463859799 11220407430827 16167481816769 5361425691648 9036180330515 1461806017525 5752555300268

output:

371891946

result:

ok 1 number(s): "371891946"

Test #10:

score: 0
Accepted
time: 2ms
memory: 3932kb

input:

10 466547903
14475814446599 10414899512095 8279261110485 15402964537241 12059977291235 14960757658011 15642794803423 176456760404 8544855584093 939455648117

output:

705005476

result:

ok 1 number(s): "705005476"

Test #11:

score: 0
Accepted
time: 9ms
memory: 4276kb

input:

11 587282176
2381973819369 7896756717881 3605049079058 3476202500557 8161539414084 4107261754597 4052905214220 13489145138694 14249896320133 4915388559035 946556082447

output:

221771132

result:

ok 1 number(s): "221771132"

Test #12:

score: 0
Accepted
time: 16ms
memory: 4244kb

input:

12 416671000
12040275816251 17062751464343 7135252213488 464175530141 1680797265108 8088672081270 15974373338891 2807308701611 10474875618229 14385428199760 7217460885705 14772837072591

output:

888526388

result:

ok 1 number(s): "888526388"

Test #13:

score: 0
Accepted
time: 28ms
memory: 4944kb

input:

13 555186260
16812780767710 10577402574202 14435021461484 7629604678144 2685467464476 6345623360274 243420234591 10035113157523 3422776077242 10218637237089 14851966122299 403170012001 9905420122107

output:

990043010

result:

ok 1 number(s): "990043010"

Test #14:

score: 0
Accepted
time: 72ms
memory: 5856kb

input:

14 509328299
8353561750434 10104176798819 6443583453798 16526745760567 11644429218948 7613211796505 14675590153019 16014035780673 8977332980184 8018462423140 10321575146167 3765866187251 951943560884 16567591980900

output:

554786244

result:

ok 1 number(s): "554786244"

Test #15:

score: 0
Accepted
time: 185ms
memory: 7952kb

input:

15 608613602
13478763858236 3740903255952 1077573334827 10777446313857 9164622625061 3532139720401 10581691792868 227725402800 1100326438302 11314744041629 5716533742148 13171916589439 3380813371904 4280184438172 3241608634862

output:

451055479

result:

ok 1 number(s): "451055479"

Test #16:

score: 0
Accepted
time: 329ms
memory: 12176kb

input:

16 940201087
10256426323317 3262426443677 11042930351118 9509672586143 6874576733055 17425354233945 44840572217 271060611230 5160013582892 940549858628 3460145241956 1911512043119 6262508016313 15998335209279 4331486722244 1174379722227

output:

609521624

result:

ok 1 number(s): "609521624"

Test #17:

score: 0
Accepted
time: 636ms
memory: 20300kb

input:

17 224938820
17119676032384 14016470814638 9555327895162 4956367760197 14164877522334 11840938437493 196922732084 1117964651219 15662255500985 6799149377748 2081570899516 8101318468846 6806038800783 8481897921532 14327689591834 3468429675406 707483765694

output:

952629882

result:

ok 1 number(s): "952629882"

Test #18:

score: 0
Accepted
time: 1236ms
memory: 36688kb

input:

18 572144592
1034330548675 7466761131151 5479486866730 5805192559012 2072047969997 14094135393106 3957442001455 9636000453501 6359658906102 13786563194342 12655202300227 17497546480004 15210614567784 5757118085432 3507806179905 4092815624732 2831474245754 8905127237409

output:

711094061

result:

ok 1 number(s): "711094061"

Test #19:

score: 0
Accepted
time: 2148ms
memory: 69456kb

input:

19 655059034
10160251337230 17368680333349 7582672215712 15170782424265 11091464398448 3468569802147 12985801017272 11885768849226 2042891901510 5816113601266 17200614913667 3230577285683 6122037312518 4476865090037 17458280591698 8087876238641 12295868407218 14891985681505 9046310739642

output:

444845559

result:

ok 1 number(s): "444845559"

Test #20:

score: -100
Time Limit Exceeded

input:

20 230956009
5657766305333 6062575310370 15139059764699 15999531683504 8700249448570 8496370986569 11931362029342 16808274736949 6582914043608 3148217142903 623248093777 2603754608083 16741237934194 11551777078922 17177864498497 147568049427 2693939410255 11977553059228 14614351055705 11790115139758

output:


result: