QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#615650 | #9353. Interesting Permutation | sanbi52 | WA | 76ms | 3848kb | C++17 | 4.1kb | 2024-10-05 19:40:30 | 2024-10-05 19:40:32 |
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 *= 2;
else ans *= i + 1 - a[i];
}
cout << ans << "\n";
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--)solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3524kb
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: -100
Wrong Answer
time: 76ms
memory: 3848kb
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 0 147456 278881908 666552726 794772438 0 0 173604862 0 0 0 0 2 0 0 805306368 183228592 2 9419631 0 0 16 0 374214433 159190872 0 16 0 0 23592960 0 96 0 0 2 0 2048 0 768 2 0 2 0 184159462 0 0 96 4 1179648 0 8 0 0 0 0 16 4 0 0 812218741 7680 958979687 2949120 0 0 2 192 0 0 0 0 0 0 0 0 0 2 8...
result:
wrong answer 7th lines differ - expected: '24576', found: '0'