Submission #337787

# Submission time Handle Problem Language Result Execution time Memory
337787 2020-12-21T15:49:49 Z talant117408 Energetic turtle (IZhO11_turtle) C++17
5 / 100
93 ms 9836 KB
/*
    Code written by Talant I.D.
*/
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
 
//using namespace __gnu_pbds;
using namespace std;
 
//typedef tree <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
  
#define precision(n) fixed << setprecision(n)
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define mp make_pair
#define eps (double)1e-9
#define PI 2*acos(0.0)
#define endl "\n"
#define sz(v) int((v).size())
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define do_not_disturb ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define OK cout << "OK" << endl;
  
inline bool isvowel(char ch){
    ch = tolower(ch);
    return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u');
}
  
inline bool isprime(int n){
    if(n < 2 || (n%2 == 0 && n != 2)) return false;
    for(int i = 3; i*i <= n; i++)
        if(n%i == 0) return false;
    return true;
}
 
class Union{
    private:
        vector <int> saizu, link;
    public:
        Union(int n){
            saizu.assign(n, 1); link.resize(n); 
            iota(all(link), 0);
        }
        int find(int n){
            if(link[n] == n) return n;
            return link[n] = find(link[n]);
        }
        int same(int a, int b){
            return find(a) == find(b);
        }
        void unite(int a, int b){
            if(same(a, b)) return;
             
            a = find(a); b = find(b);
            if(saizu[a] < saizu[b]) swap(a, b);
             
            saizu[a] += saizu[b];
            link[b] = a;
        }
        int getsize(int a){
            return saizu[find(a)];
        }
};
 
const int mod = 1e9+7;
 
ll mode(ll a){
    a %= mod;
    if(a < 0) a += mod;
    return a;
}
 
ll subt(ll a, ll b){
    return mode(mode(a)-mode(b));
}
 
ll add(ll a, ll b){
    return mode(mode(a)+mode(b));
}
 
ll mult(ll a, ll b){
    return mode(mode(a)*mode(b));
}
 
ll binpow(ll a, ll b){
    ll res = 1;
    while(b){
        if(b&1) res = mult(res, a);
        a = mult(a, a);
        b >>= 1;
    }
    return res;
}

ll n, m, N, t, z;
ll dp[23][23];

bool cmp(pll a, pll b){
    return a.first+a.second < b.first+b.second;
}

ll fact[600007], rever[600007];

ll C(ll n, ll k){
    return mult(fact[n], mult(rever[k], rever[n-k]));
}

int main(){
    do_not_disturb
    
    fact[0] = rever[0] = 1;
    for(ll i = 1; i < 600007; i++){
        fact[i] = mult(fact[i-1], i);
        rever[i] = binpow(fact[i], mod-2);
    }
    
    cin >> n >> m >> N >> t >> z;
    vector <pll> v(N);
    for(auto &to : v) cin >> to.first >> to.second;
    v.pb(mp(n, m));
    sort(all(v), cmp);
    
    for(int times = 0; times <= t; times++){
        for(int i = 0; i <= N; i++){
            dp[i][times] = C(v[i].first+v[i].second, v[i].first);
            for(int j = 0; j < i; j++){
                if(v[j].first <= v[i].first && v[j].second <= v[i].second){
                    if(i == N)
                        dp[i][times] = subt(dp[i][times], dp[j][times]);
                    else
                    dp[i][times] = subt(dp[i][times], dp[j][times-1]);
                }
            }
        }
    }
    ll ans = 0;
    for(int times = 0; times <= t; times++){
        ans =  add(ans, dp[N][times]);
    }
    cout << ans;
    
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 91 ms 9708 KB Output is correct
2 Incorrect 92 ms 9708 KB Output isn't correct
3 Incorrect 92 ms 9708 KB Output isn't correct
4 Incorrect 91 ms 9708 KB Output isn't correct
5 Incorrect 92 ms 9708 KB Output isn't correct
6 Incorrect 91 ms 9708 KB Output isn't correct
7 Incorrect 92 ms 9836 KB Output isn't correct
8 Incorrect 92 ms 9836 KB Output isn't correct
9 Incorrect 93 ms 9708 KB Output isn't correct
10 Incorrect 91 ms 9708 KB Output isn't correct
11 Incorrect 91 ms 9708 KB Output isn't correct
12 Incorrect 92 ms 9708 KB Output isn't correct
13 Incorrect 93 ms 9708 KB Output isn't correct
14 Incorrect 92 ms 9836 KB Output isn't correct
15 Incorrect 92 ms 9708 KB Output isn't correct
16 Incorrect 92 ms 9708 KB Output isn't correct
17 Incorrect 91 ms 9708 KB Output isn't correct
18 Incorrect 92 ms 9708 KB Output isn't correct
19 Incorrect 93 ms 9836 KB Output isn't correct
20 Incorrect 92 ms 9708 KB Output isn't correct