QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#615695 | #9353. Interesting Permutation | sanbi52 | AC ✓ | 91ms | 4176kb | C++17 | 4.1kb | 2024-10-05 19:48:23 | 2024-10-05 19:48:24 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int MOD = 1e9 + 7;
struct mint{
int val;
mint(ll x = 0){
while(x < 0) x += MOD;
val = x % MOD;
}
mint pow(long long b) const{
mint res = 1;
mint a = mint(val);
for ( ; b; b >>= 1, a *= a){
if(b & 1)res *= a;
}
return mint(res);
}
mint operator - () const{
return mint((MOD - val) % MOD);
}
mint inv() const{
return this -> pow(MOD - 2);
}
mint &operator += (const mint &rhs){
val = (0ll + val + rhs.val) % MOD;
return *this;
}
mint &operator ++ (int null){
return *this += 1;
}
mint &operator -= (const mint &rhs){
val = (MOD + val - rhs.val) % MOD;
return *this;
}
mint &operator *= (const mint &rhs){
val = 1ll * val * rhs.val % MOD;
return *this;
}
mint &operator /= (const mint &rhs){
return *this *= rhs.inv();
}
bool operator == (const mint &rhs){
return this -> val == rhs.val;
}
bool operator != (const mint &rhs){
return !(*this == rhs);
}
friend mint operator + (const mint &lhs, const mint &rhs){
mint res = lhs;
return res += rhs;
}
friend mint operator - (const mint &lhs, const mint &rhs){
mint res = lhs;
return res -= rhs;
}
friend mint operator * (const mint &lhs, const mint &rhs){
mint res = lhs;
return res *= rhs;
}
friend mint operator / (const mint &lhs, const mint &rhs){
mint res = lhs;
return res /= rhs;
}
friend mint operator + (const mint &lhs, const ll &rhs){
mint res = lhs;
return res += mint(rhs);
}
friend mint operator - (const mint &lhs, const ll &rhs){
mint res = lhs;
return res -= mint(rhs);
}
friend mint operator * (const mint &lhs, const ll &rhs){
mint res = lhs;
return res *= mint(rhs);
}
friend mint operator / (const mint &lhs, const ll &rhs){
mint res = lhs;
return res /= mint(rhs);
}
friend istream &operator >> (istream &is, mint &a){
ll v;
is >> v;
a = mint(v);
return is;
}
friend ostream &operator << (ostream &os, const mint &a){
return os << a.val;
}
mint sqrt(){
mint a = 1;
while((a * a - *this).pow((MOD - 1) / 2) != mint(-1))a++;
mint real = 1, imagin = 0;
mint l = a, r = 1;
for(int n = (MOD + 1) >> 1; n; n >>= 1){
if(n & 1){
mint tmpl = real * l + imagin * r * (a * a - *this);
mint tmpr = real * r + l * imagin;
real = tmpl, imagin = tmpr;
}
mint tmpl = l * l + r * r * (a * a - *this);
mint tmpr = l * r * 2;
l = tmpl, r = tmpr;
}
assert(imagin.val == 0);
return real;
}
};
vector<mint> fac(1, 1), invfac(1, 1);
mint C(int n, int m){
if(n < 0 || m < 0 || n < m)return 0;
while(fac.size() < n + 1){
fac.push_back(fac.back() * int(fac.size()));
invfac.push_back(1 / fac.back());
}
return fac[n] * invfac[m] * invfac[n - m];
}
mint A(int n, int m){
if(n < 0 || m < 0 || n < m)return 0;
while(fac.size() < n + 1){
fac.push_back(fac.back() * int(fac.size()));
invfac.push_back(1 / fac.back());
}
return fac[n] * invfac[n - m];
}
void solve(){
int n;
cin >> n;
vector<int> a(n);
for(int i = 0; i < n; i++){
cin >> a[i];
}
if(a[0] != 0 || a[n - 1] != n - 1){
cout << 0 << "\n";
return;
}
mint ans = 1;
for(int i = 1; i < n; i++){
if(a[i] < a[i - 1])ans *= 0;
else if(a[i] != a[i - 1])ans *= 2;
else ans *= a[i] + 1 - i;
}
cout << ans << "\n";
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)solve();
return 0;
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3592kb
input:
3 3 0 2 2 3 0 1 2 3 0 2 3
output:
2 4 0
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 62ms
memory: 3888kb
input:
10039 14 5 6 7 8 9 10 11 12 13 13 13 13 13 13 14 0 5 6 7 8 9 10 11 12 13 14 14 14 14 1 1 14 0 5 4 8 9 10 11 12 13 13 13 13 13 13 45 0 1 1 2 2 3 5 5 6 6 8 9 11 13 15 17 18 18 20 22 22 24 26 26 26 26 27 27 27 28 30 32 32 33 34 34 34 36 36 38 38 38 39 39 44 24 0 2 3 5 7 9 9 10 11 12 13 14 14 14 14 15 1...
output:
0 0 0 0 0 0 24576 0 0 0 0 0 658159182 0 805306368 8 572589350 12288 2 0 981283070 0 0 2 0 0 0 0 4423680 0 0 14155776 16 0 768 0 0 0 855189487 0 2 0 0 0 0 2 0 2 797370259 0 0 0 0 4 0 0 0 301989888 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 192 0 0 12288 0 0 2 8 0 0 495514526 0 0 955131071 768 0 0 147456 0 0...
result:
ok 10039 lines
Test #3:
score: 0
Accepted
time: 91ms
memory: 4176kb
input:
20 100000 0 1 2 3 5 6 7 9 10 10 12 12 12 13 14 15 17 17 18 19 21 22 24 26 28 28 28 28 29 31 32 34 35 36 38 39 39 39 41 41 42 44 45 47 48 49 51 53 54 56 58 58 58 60 62 62 64 64 64 66 66 66 66 68 70 70 71 72 72 74 74 75 76 77 77 78 80 80 82 82 84 85 86 86 88 88 89 90 91 91 93 93 95 97 98 100 101 103 1...
output:
202795881 940225306 406525679 536765675 729062616 366047380 66289678 199278830 570456350 993317415 17778389 674797620 787821942 841428534 632185280 579006079 822641126 664256526 482813708 821188194
result:
ok 20 lines
Test #4:
score: 0
Accepted
time: 0ms
memory: 3592kb
input:
1 14 5 6 7 8 9 10 11 12 13 13 13 13 13 13
output:
0
result:
ok single line: '0'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3532kb
input:
1 14 0 5 6 7 8 9 10 11 12 13 14 14 14 14
output:
0
result:
ok single line: '0'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3620kb
input:
1 1 1
output:
0
result:
ok single line: '0'
Test #7:
score: 0
Accepted
time: 0ms
memory: 3548kb
input:
1 14 0 5 4 8 9 10 11 12 13 13 13 13 13 13
output:
0
result:
ok single line: '0'
Extra Test:
score: 0
Extra Test Passed