結果
| 問題 |
No.398 ハーフパイプ(2)
|
| コンテスト | |
| ユーザー |
tossy
|
| 提出日時 | 2016-07-15 23:54:09 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 10 ms / 2,000 ms |
| コード長 | 1,401 bytes |
| コンパイル時間 | 781 ms |
| コンパイル使用メモリ | 89,396 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-27 14:34:46 |
| 合計ジャッジ時間 | 1,496 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <bitset>
using namespace std;
#define repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define rep(i,n) repl(i,0,n)
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define all(x) (x).begin(),(x).end()
#define dbg(x) cout<<#x"="<<x<<endl
#define INF 1<<30
int a[4];
// a[0]>=a[1]>=a[2]>=a[3]
long calc(){
long res=0;
long tmp=6*5*4*3*2*1;
rep(i,4){
int cnt=1;
rep(j,3-i) if(a[i]==a[i+j+1]) cnt++;
tmp /= cnt;
}
res += (100-a[0])*(a[3])*tmp;
int cnt1=2;
rep(i,3) if(a[i]==a[3]) cnt1++;
res += (100-a[0])*tmp/cnt1; // max==a[3]
int cnt2=2;
rep(i,3) if(a[i+1]==a[0]) cnt2++;
res += (a[3])*tmp/cnt2; //min==a[0]
if(a[0]==a[3]) res+=1;
else res += tmp/cnt1/cnt2;
return res;
}
long dfs(int n, int idx){
if(idx==4){
if(n==0)return calc();
else return 0;
}
long res=0;
for(int i=min(n,100); i>=n/4; i--){
if(idx>0 && i>a[idx-1]) i=a[idx-1];
a[idx]=i;
res += dfs(n-i, idx+1);
}
return res;
}
int main(){
double x;
cin>>x;
int n = (int)(x*4.);
long res = dfs(n, 0);
cout<<res<<endl;
return 0;
}
tossy