109952024-05-04 20:12:28TaxiradioBástyák törött sakktábláncpp17Hibás válasz 0/10064ms31992 KiB
#include <bits/stdc++.h> 
using namespace std; 
using ll=long long; 
  
#define all(a) a.begin(), a.end() 
  
int solve(); 
  
int main(){ 
    ios_base::sync_with_stdio(0);cin.tie(0); 
    int t=1; 
    //cin>>t; 
    while (t--) solve(); 
} 
const ll mod=1e9+7; 
const ll maxn=2001; 
  
//x^mod-2=1/x 
ll binpow(ll a,ll b){ 
    if (b==0) return 1; 
    ll res=binpow(a,b/2); 
    if (b%2) return res*res%mod*a%mod; 
    return res*res%mod; 
} 
vector<ll> a(maxn, 0); 
vector<ll> fact(maxn*maxn, 1); 
  
ll ncr(ll n, ll k){ 
    return fact[n]*binpow(fact[n-k]*fact[k]%mod, mod-2)%mod; 
} 
  
ll q(ll height, ll base , ll amount){
	if (height>=base) swap(height , base); //-- 
	ll res=ncr(base, amount)*fact[height]%mod*binpow(fact[height-amount], mod-2)%mod; 
    return res; 
}

ll spec(ll height, ll base){ 
    if (height>base) return 0LL; //-- 
    if (height<=0) return 1LL; 
    ll res=ncr(base, height)*fact[height]%mod; 
    return res; 
} 
  
  
int solve(){ 
    ll n; 
    cin>>n; 
    ll div=0; 
    for (ll i=1;i<=n;i++){ 
        cin>>a[i]; 
        if (a[i]!=a[i-1]) div=i; 
    } 
    for (ll i=2;i<fact.size();i++) fact[i]=fact[i-1]*i%mod; 
//cerr<<div<<"\n";  
    ll ans=0; 
    if (n==1){ 
        cout<<n; 
        return 0; 
    } 
    if (div==1){ 
        ans=spec(a[1],n); 
        cout<<ans; 
        return 0; 
    } 
    pair<ll,ll> top={div-1, a[div-1]}; 
    pair<ll,ll> right={n-div+1,a[div]-a[div-1]}; 
    pair<ll,ll> left={n-div+1,a[div-1]}; 
    bool kill=false; 
    int x=max(left.first,right.first)-max(min(top.first,top.second), min(right.first,right.second));
    for (ll i=0;i<=min(left.first, left.second);i++){ 
        ll res=q(left.first,left.second , i); 
        res*=spec(top.second,top.first); 
        res=res%mod; 
        res*=spec(right.first,right.second); 
        res=res%mod; 
        top.second--; 
        right.first--; 
        if(x<=i) {
            ans+=res; 
            ans=ans%mod; 
        }
    } 
    cout<<ans<<"\n"; 
    return 0; 
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Hibás válasz57ms31716 KiB
2Hibás válasz57ms31848 KiB
subtask20/12
3Elfogadva63ms31760 KiB
4Elfogadva57ms31716 KiB
5Elfogadva63ms31808 KiB
6Elfogadva57ms31656 KiB
7Elfogadva57ms31864 KiB
8Elfogadva57ms31864 KiB
9Elfogadva56ms31844 KiB
10Elfogadva63ms31684 KiB
11Hibás válasz57ms31716 KiB
12Elfogadva63ms31716 KiB
13Elfogadva63ms31736 KiB
14Hibás válasz63ms31736 KiB
15Hibás válasz57ms31852 KiB
16Hibás válasz63ms31844 KiB
17Hibás válasz63ms31760 KiB
18Hibás válasz57ms31644 KiB
19Hibás válasz57ms31716 KiB
20Hibás válasz57ms31736 KiB
21Hibás válasz57ms31716 KiB
subtask30/17
22Elfogadva63ms31800 KiB
23Elfogadva57ms31684 KiB
24Elfogadva64ms31732 KiB
25Elfogadva64ms31992 KiB
26Elfogadva64ms31860 KiB
27Elfogadva57ms31716 KiB
28Elfogadva57ms31700 KiB
29Elfogadva64ms31760 KiB
30Elfogadva64ms31892 KiB
31Hibás válasz61ms31716 KiB
32Hibás válasz57ms31856 KiB
33Elfogadva61ms31752 KiB
34Elfogadva64ms31784 KiB
subtask40/20
35Elfogadva64ms31672 KiB
36Elfogadva63ms31716 KiB
37Elfogadva64ms31844 KiB
38Elfogadva64ms31736 KiB
39Elfogadva57ms31864 KiB
40Elfogadva64ms31872 KiB
41Elfogadva63ms31624 KiB
42Elfogadva57ms31716 KiB
43Hibás válasz63ms31972 KiB
44Elfogadva57ms31644 KiB
45Elfogadva57ms31984 KiB
46Hibás válasz57ms31852 KiB
47Hibás válasz57ms31864 KiB
48Hibás válasz64ms31716 KiB
49Hibás válasz57ms31760 KiB
50Hibás válasz57ms31864 KiB
51Hibás válasz64ms31716 KiB
52Hibás válasz64ms31728 KiB
53Hibás válasz64ms31720 KiB
54Elfogadva64ms31716 KiB
55Elfogadva57ms31864 KiB
56Elfogadva64ms31716 KiB
57Elfogadva57ms31716 KiB
58Elfogadva56ms31860 KiB
59Elfogadva64ms31860 KiB
60Elfogadva57ms31716 KiB
61Elfogadva57ms31716 KiB
62Elfogadva61ms31652 KiB
63Hibás válasz57ms31864 KiB
64Hibás válasz64ms31904 KiB
65Elfogadva64ms31716 KiB
66Elfogadva64ms31716 KiB
67Hibás válasz63ms31864 KiB
68Hibás válasz57ms31716 KiB
69Hibás válasz57ms31748 KiB
70Hibás válasz64ms31852 KiB
71Hibás válasz63ms31736 KiB
72Hibás válasz64ms31660 KiB
73Hibás válasz64ms31744 KiB
subtask50/10
74Elfogadva59ms31864 KiB
75Elfogadva57ms31864 KiB
76Elfogadva57ms31868 KiB
77Elfogadva63ms31716 KiB
78Elfogadva57ms31720 KiB
79Elfogadva63ms31716 KiB
80Elfogadva57ms31716 KiB
81Elfogadva57ms31716 KiB
82Elfogadva64ms31716 KiB
83Hibás válasz63ms31716 KiB
84Hibás válasz63ms31880 KiB
85Elfogadva57ms31760 KiB
86Elfogadva57ms31740 KiB
87Elfogadva57ms31712 KiB
88Elfogadva59ms31988 KiB
89Elfogadva64ms31888 KiB
90Hibás válasz64ms31892 KiB
91Hibás válasz64ms31712 KiB
92Elfogadva57ms31680 KiB
93Elfogadva64ms31848 KiB
subtask60/41
94Hibás válasz64ms31716 KiB
95Hibás válasz61ms31736 KiB
96Elfogadva57ms31780 KiB
97Elfogadva57ms31696 KiB
98Elfogadva64ms31832 KiB
99Elfogadva61ms31716 KiB
100Elfogadva61ms31864 KiB
101Elfogadva63ms31740 KiB
102Elfogadva57ms31720 KiB
103Elfogadva61ms31864 KiB
104Hibás válasz63ms31804 KiB
105Elfogadva64ms31716 KiB
106Elfogadva57ms31716 KiB
107Hibás válasz64ms31716 KiB
108Hibás válasz64ms31716 KiB
109Hibás válasz61ms31760 KiB
110Hibás válasz61ms31844 KiB
111Hibás válasz63ms31720 KiB
112Hibás válasz57ms31868 KiB
113Hibás válasz61ms31736 KiB
114Hibás válasz63ms31588 KiB
115Elfogadva61ms31700 KiB
116Elfogadva63ms31588 KiB
117Elfogadva61ms31868 KiB
118Elfogadva57ms31720 KiB
119Elfogadva57ms31728 KiB
120Elfogadva61ms31760 KiB
121Elfogadva63ms31868 KiB
122Elfogadva63ms31588 KiB
123Elfogadva63ms31796 KiB
124Hibás válasz61ms31760 KiB
125Hibás válasz57ms31556 KiB
126Elfogadva57ms31716 KiB
127Elfogadva57ms31864 KiB
128Hibás válasz57ms31716 KiB
129Hibás válasz57ms31864 KiB
130Hibás válasz57ms31716 KiB
131Hibás válasz56ms31864 KiB
132Hibás válasz63ms31844 KiB
133Hibás válasz57ms31720 KiB
134Hibás válasz57ms31656 KiB
135Elfogadva63ms31844 KiB
136Elfogadva59ms31764 KiB
137Elfogadva64ms31736 KiB
138Hibás válasz57ms31844 KiB
139Hibás válasz57ms31792 KiB
140Elfogadva57ms31716 KiB
141Elfogadva57ms31736 KiB
142Hibás válasz56ms31716 KiB
143Hibás válasz56ms31716 KiB
144Hibás válasz56ms31760 KiB
145Hibás válasz63ms31992 KiB
146Hibás válasz57ms31864 KiB
147Hibás válasz63ms31844 KiB
148Hibás válasz56ms31864 KiB
149Hibás válasz56ms31864 KiB
150Hibás válasz56ms31716 KiB
151Hibás válasz57ms31720 KiB
152Hibás válasz61ms31588 KiB