結果
問題 |
No.389 ロジックパズルの組み合わせ
|
ユーザー |
![]() |
提出日時 | 2016-10-22 02:23:12 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,524 bytes |
コンパイル時間 | 761 ms |
コンパイル使用メモリ | 63,616 KB |
実行使用メモリ | 10,496 KB |
最終ジャッジ日時 | 2024-11-23 16:59:08 |
合計ジャッジ時間 | 100,267 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 70 WA * 5 TLE * 24 |
ソースコード
#include <iostream> #include <math.h> #include <string> #include <algorithm> using namespace std; int kaijo(long a){ long n=1; if (a > 0){ for (long i = a; i > 0; i--){ n *= i; n = n % 1000000007; } } else{ n = 1; } return n; } int permtation(long a,long b){ long n = 1; if (b != 0){ for (long i = 0; i < b; i++){ n *= (a-i); n = n % 1000000007; } } else{ n = 1; } return n; } int main(){ long m; long a = 0; string s; string s1; long h; long cnt = 0; long ans; long p, k; cin >> m; cin.ignore(); getline(cin, s); while (1){ s1 = s; //cout << s1 << endl; a = s1.find(" ", 0); if (a == -1){ h = stoi(s1); m -= h; cnt++; break; } else{ s1.erase(a,s1.length()); h = stoi(s1); m -= h; cnt++; s.erase(0, a + 1); //cout << s << endl; } } long judge = m - cnt + 1; //cout << m << endl; //cout << cnt << endl; //cout << judge << endl; if (judge <0){ cout << "NA" << endl; } else{ if (judge>cnt){ p = permtation(m + 1, cnt); k = kaijo(cnt); while (1){ ans = p / k; if (ans*k == p){ cout << ans << endl; break; } else{ p += 1000000007; } } } else{ p = permtation(m + 1, judge); k = kaijo(judge); while (1){ ans = p / k; if (ans*k == p){ cout << ans << endl; break; } else{ p += 1000000007; } } } //ans = kaijo(m + 1) / (kaijo(m - cnt + 1)*kaijo(cnt)); //cout << ans << endl; //cout << m << endl; } return 0; }