Submission #00279
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #define _CRT_SECURE_NO_WARNINGS #include "bits/stdc++.h" //#include "libs.h" #include <random> #include <unordered_map> #include <unordered_set> //#include <opencv2/core.hpp> //#include <opencv2/highgui.hpp> //#include <opencv2/imgproc.hpp> using namespace std; //呪文 #define DUMPOUT cerr #define dump(...) DUMPOUT<<" ";DUMPOUT<<#__VA_ARGS__<<" :["<<__LINE__<<":"<<__FUNCTION__<<"]"<<endl;DUMPOUT<<" ";dump_func(__VA_ARGS__) typedef unsigned uint; typedef long long ll; typedef unsigned long long ull; typedef pair< int , int > pii; typedef pair<ll, ll> pll; typedef pair< double , double > pdd; typedef pair<string, string> pss; template < typename _KTy, typename _Ty> ostream& operator << (ostream& o, const pair<_KTy, _Ty>& m) { o << "{" << m.first << ", " << m.second << "}" ; return o; } template < typename _KTy, typename _Ty> ostream& operator << (ostream& o, const map<_KTy, _Ty>& m) { if (m.empty()) { o << "{ }" ; return o; } o << "{" << *m.begin(); for (auto itr = ++m.begin(); itr != m.end(); itr++) { o << ", " << *itr; } o << "}" ; return o; } template < typename _KTy, typename _Ty> ostream& operator << (ostream& o, const unordered_map<_KTy, _Ty>& m) { if (m.empty()) { o << "{ }" ; return o; } o << "{" << *m.begin(); for (auto itr = ++m.begin(); itr != m.end(); itr++) { o << ", " << *itr; } o << "}" ; return o; } template < typename _Ty> ostream& operator << (ostream& o, const vector<_Ty>& v) { if (v.empty()) { o << "{ }" ; return o; } o << "{" << v.front(); for (auto itr = ++v.begin(); itr != v.end(); itr++) { o << ", " << *itr; } o << "}" ; return o; } template < typename _Ty> ostream& operator << (ostream& o, const set<_Ty>& s) { if (s.empty()) { o << "{ }" ; return o; } o << "{" << *(s.begin()); for (auto itr = ++s.begin(); itr != s.end(); itr++) { o << ", " << *itr; } o << "}" ; return o; } template < typename _Ty> ostream& operator << (ostream& o, const unordered_set<_Ty>& s) { if (s.empty()) { o << "{ }" ; return o; } o << "{" << *(s.begin()); for (auto itr = ++s.begin(); itr != s.end(); itr++) { o << ", " << *itr; } o << "}" ; return o; } template < typename _Ty> ostream& operator << (ostream& o, const stack<_Ty>& s) { if (s.empty()) { o << "{ }" ; return o; } stack<_Ty> t(s); o << "{" << t.top(); t.pop(); while (!t.empty()) { o << ", " << t.top(); t.pop(); } o << "}" ; return o; } template < typename _Ty> ostream& operator << (ostream& o, const list<_Ty>& l) { if (l.empty()) { o << "{ }" ; return o; } o << "{" << l.front(); for (auto itr = ++l.begin(); itr != l.end(); ++itr) { o << ", " << *itr; } o << "}" ; return o; } template < typename _KTy, typename _Ty> istream& operator >> (istream& is, pair<_KTy, _Ty>& m) { is >> m.first >> m.second; return is; } template < typename _Ty> istream& operator >> (istream& is, vector<_Ty>& v) { for ( size_t i = 0; i < v.size(); i++) is >> v[i]; return is; } namespace aux { // print tuple template < typename Ty, unsigned N, unsigned L> struct tp { static void print(ostream& os, const Ty& v) { os << get<N>(v) << ", " ; tp<Ty, N + 1, L>::print(os, v); } }; template < typename Ty, unsigned N> struct tp<Ty, N, N> { static void print(ostream& os, const Ty& v) { os << get<N>(v); } }; } template < typename ... Tys> ostream& operator<<(ostream& os, const tuple<Tys...>& t) { os << "{" ; aux::tp<tuple<Tys...>, 0, sizeof ...(Tys) - 1>::print(os, t); os << "}" ; return os; } template < typename A, size_t N, typename T> inline void Fill(A(&array)[N], const T &val) { std::fill((T*)array, (T*)(array + N), val); } void dump_func() { DUMPOUT << endl; } template < class Head, class ... Tail> void dump_func(Head&& head, Tail&&... tail) { DUMPOUT << head; if ( sizeof ...(Tail) == 0) { DUMPOUT << " " ; } else { DUMPOUT << ", " ; } dump_func(std::move(tail)...); } #define PI 3.14159265358979323846 #define EPS 1e-10 #define FOR(i,a,n) for(int i=(a);i<(n);++i) #define REP(i,n) FOR(i,0,n) #define all(j) (j).begin(), (j).end() #define SZ(j) ((int)(j).size()) #define fake false constexpr ll MAX = 1000000; constexpr ll MOD = 1000000007; // 拡張ユークリッド互除法 (入力 : 整数 a, n, 出力 : GCD(a, n) と xa + yb = GCD(a, n) を満たす整数 x, y) template < typename Ty> void ExEuclid(Ty a, Ty b, Ty& gcd, Ty& x, Ty& y) { Ty r1, r2, r3, x1, x2, x3, y1, y2, y3, q; r1 = a; x1 = 1; y1 = 0; r2 = b; x2 = 0; y2 = 1; while (r2 != 0) { r3 = r1 % r2; q = r1 / r2; x3 = x1 - q * x2; y3 = y1 - q * y2; r1 = r2; r2 = r3; x1 = x2; x2 = x3; y1 = y2; y2 = y3; } gcd = r1; x = x1; y = y1; if (gcd < 0) { gcd *= -1; x *= -1; y *= -1; }; } // a と m は互いに素が前提 template < typename Ty> Ty invmod(Ty a, Ty m) { Ty gcd, x, q; ExEuclid(a, -m, gcd, x, q); if (gcd != 1) return -1; return x; } // nCk mod p template < typename Ty> Ty nCkModp(Ty n, Ty r, Ty p) { r = min(r, n - r); Ty i, ret = 1; for (i = 1; i <= r; i++) { ret = ret * (n - i + 1) % p; ret = ret * invmod(i, p) % p; } return (ret + p) % p; } int main() { cin.tie(0); ios::sync_with_stdio( false ); ll W, H, N; cin >> W >> H >> N; vector<ll> xs, ys; xs.push_back(0); ys.push_back(0); REP(_i, N) { ll x, y; cin >> x >> y; xs.push_back(x); ys.push_back(y); } xs.push_back(W - 1); ys.push_back(H - 1); ll ans = 1; for ( int i = 0; i < xs.size() - 1; i++) { ll dx = xs[i + 1] - xs[i]; ll dy = ys[i + 1] - ys[i]; ans = ans * nCkModp(dx + dy, dx, MOD) % MOD; } cout << ans << endl; return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 0006 - 寄り道 |
ユーザー名 | my316g |
投稿日時 | 2018-11-24 16:45:28 |
言語 | C++14 |
状態 | Accepted |
得点 | 400 |
ソースコード長 | 5526 Byte |
最大実行時間 | 120 ms |
最大メモリ使用量 | 724 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 400 / 400 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
input01.in | AC | 22 ms | 604 KB |
1
|
input02.in | AC | 28 ms | 684 KB |
1
|
input03.in | AC | 18 ms | 508 KB |
1
|
input04.in | AC | 22 ms | 588 KB |
1
|
input05.in | AC | 20 ms | 664 KB |
1
|
input06.in | AC | 30 ms | 616 KB |
1
|
input07.in | AC | 27 ms | 440 KB |
1
|
input08.in | AC | 22 ms | 392 KB |
1
|
input09.in | AC | 27 ms | 468 KB |
1
|
input10.in | AC | 24 ms | 548 KB |
1
|
input11.in | AC | 65 ms | 624 KB |
1
|
input12.in | AC | 66 ms | 576 KB |
1
|
input13.in | AC | 33 ms | 524 KB |
1
|
input14.in | AC | 31 ms | 724 KB |
1
|
input15.in | AC | 120 ms | 544 KB |
1
|
input16.in | AC | 104 ms | 624 KB |
1
|
input17.in | AC | 105 ms | 568 KB |
1
|
input18.in | AC | 113 ms | 644 KB |
1
|
input19.in | AC | 114 ms | 588 KB |
1
|
input20.in | AC | 117 ms | 660 KB |
1
|
sample.in | AC | 23 ms | 484 KB |
1
|