QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#619222#8015. 鸡McIron233100 ✓1ms3712kbC++142.4kb2024-10-07 13:33:042024-10-07 13:33:07

Judging History

你现在查看的是最新测评结果

  • [2024-10-07 13:33:07]
  • 评测
  • 测评结果:100
  • 用时:1ms
  • 内存:3712kb
  • [2024-10-07 13:33:04]
  • 提交

answer

#include<bits/stdc++.h>
#define mint integer
#define N 3005
#define int long long
using namespace std;
int P;
struct integer {
    int u;
    explicit operator int() const {
        return u;
    }
    integer() : u(0) {
 
    }
    integer(long x) : u((int) (x % P)) {
        if (u < 0) {
            u = u + P;
        }
    }
    integer& operator += (integer a) {
        u = u + a.u;
        if (u >= P) {
            u = u - P;
        }
        return *this;
    }
    integer& operator -= (integer a) {
        u = u - a.u;
        if (u < 0) {
            u = u + P;
        }
        return *this;
    }
    integer& operator *= (integer a) {
        u = (int) ((long) u * a.u % P);
        return *this;
    }
    integer& operator /= (integer a) {
		assert(a.u != 0);
        return *this *= power(a, P - 2);
    }
    friend integer power(integer a, long p) {
        assert(p >= 0);
        integer b = 1;
        while (p > 0) {
            if (p % 2 == 1) {
                b = b * a;
            }
            a = a * a;
            p = p / 2;
        }
        return b;
    }
    friend bool operator == (integer a, integer b) {
        return a.u == b.u;
    }
    friend bool operator != (integer a, integer b) {
        return a.u != b.u;
    }
    friend integer operator + (integer a, integer b) {
        return a += b;
    }
    friend integer operator - (integer a, integer b) {
        return a -= b;
    }
    friend integer operator * (integer a, integer b) {
        return a *= b;
    }
    friend integer operator / (integer a, integer b) {
        return a /= b;
    }
    friend istream& operator >> (istream& i, integer& a) {
        long x;
        i >> x;
        a = integer(x);
        return i;
    }
    friend ostream& operator << (ostream& o, integer a) {
        o << (int) a;
        return o;
    }
};
int n;
mint m,f[N];
signed main(){
	cin>>n>>m.u>>P;
	f[1]=1ll; f[2]=m*m+2*m+1;
	f[3]=m*m*m/3 + m*m*2 + m*8/3+1;
	f[4]=m*m*m*7/3 + m*m*5 + m*11/3+1;
	f[5]=m*m*m*m*7/12 + m*m*m*17/3 + m*m*89/12 + m*13/3+1;
	f[6]=m*m*m*m*25/6 + m*m*m*38/3 + m*m*71/6 + m*16/3+1;
	f[7]=m*m*m*m*m*5/6 + m*m*m*m*37/3 + m*m*m*133/6 + m*m*47/3 + m*6+1;
	for(int i=8;i<=n;++i)
		f[i]=2*f[i-1] + 2*m*f[i-2] + ((0-m)*2-2)*f[i-3] + ((0-m)*m-m*2+1)*f[i-4] + m*2*f[i-5] + m*m*f[i-6];
	cout<<f[n].u<<'\n'; return 0;
}

详细


Pretests


Final Tests

Test #1:

score: 5
Accepted
time: 0ms
memory: 3704kb

input:

5 5 1004326439

output:

1281

result:

ok 1 number(s): "1281"

Test #2:

score: 5
Accepted
time: 0ms
memory: 3628kb

input:

5 4 1002682123

output:

649

result:

ok 1 number(s): "649"

Test #3:

score: 5
Accepted
time: 0ms
memory: 3704kb

input:

287 1 1003060133

output:

328406329

result:

ok 1 number(s): "328406329"

Test #4:

score: 5
Accepted
time: 0ms
memory: 3588kb

input:

279 1 1004432189

output:

222258837

result:

ok 1 number(s): "222258837"

Test #5:

score: 5
Accepted
time: 1ms
memory: 3628kb

input:

300 1 1005912203

output:

707086810

result:

ok 1 number(s): "707086810"

Test #6:

score: 5
Accepted
time: 0ms
memory: 3580kb

input:

288 5 1003307827

output:

964512417

result:

ok 1 number(s): "964512417"

Test #7:

score: 5
Accepted
time: 0ms
memory: 3640kb

input:

281 5 1008854383

output:

755282155

result:

ok 1 number(s): "755282155"

Test #8:

score: 5
Accepted
time: 0ms
memory: 3648kb

input:

270 5 1007619367

output:

431828317

result:

ok 1 number(s): "431828317"

Test #9:

score: 5
Accepted
time: 0ms
memory: 3628kb

input:

292 5 1002449813

output:

183613546

result:

ok 1 number(s): "183613546"

Test #10:

score: 5
Accepted
time: 0ms
memory: 3712kb

input:

300 5 1005897091

output:

915308166

result:

ok 1 number(s): "915308166"

Test #11:

score: 5
Accepted
time: 0ms
memory: 3588kb

input:

45 50 1009100993

output:

940158800

result:

ok 1 number(s): "940158800"

Test #12:

score: 5
Accepted
time: 0ms
memory: 3704kb

input:

49 50 1001428049

output:

1045902

result:

ok 1 number(s): "1045902"

Test #13:

score: 5
Accepted
time: 0ms
memory: 3624kb

input:

49 50 1007851073

output:

922264698

result:

ok 1 number(s): "922264698"

Test #14:

score: 5
Accepted
time: 0ms
memory: 3644kb

input:

50 50 1005625571

output:

442192770

result:

ok 1 number(s): "442192770"

Test #15:

score: 5
Accepted
time: 0ms
memory: 3640kb

input:

290 300 1005068699

output:

484359497

result:

ok 1 number(s): "484359497"

Test #16:

score: 5
Accepted
time: 0ms
memory: 3704kb

input:

270 300 1003440637

output:

899894137

result:

ok 1 number(s): "899894137"

Test #17:

score: 5
Accepted
time: 0ms
memory: 3644kb

input:

300 300 1008561979

output:

33407754

result:

ok 1 number(s): "33407754"

Test #18:

score: 5
Accepted
time: 0ms
memory: 3708kb

input:

2991 3000 1004658859

output:

167444547

result:

ok 1 number(s): "167444547"

Test #19:

score: 5
Accepted
time: 0ms
memory: 3644kb

input:

2870 3000 1004054173

output:

860666062

result:

ok 1 number(s): "860666062"

Test #20:

score: 5
Accepted
time: 0ms
memory: 3704kb

input:

3000 3000 1009539589

output:

696222334

result:

ok 1 number(s): "696222334"