結果
| 問題 |
No.916 Encounter On A Tree
|
| コンテスト | |
| ユーザー |
bin101
|
| 提出日時 | 2019-10-25 23:01:25 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,588 bytes |
| コンパイル時間 | 902 ms |
| コンパイル使用メモリ | 69,868 KB |
| 実行使用メモリ | 19,072 KB |
| 最終ジャッジ日時 | 2024-09-13 06:54:50 |
| 合計ジャッジ時間 | 4,128 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 RE * 1 |
| other | AC * 32 RE * 24 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:53:33: warning: ‘rd’ may be used uninitialized in this function [-Wmaybe-uninitialized]
53 | ans*=2*(t[rd]-s[rd]+1)/2;
| ~~~~^
main.cpp:47:18: warning: ‘ld’ may be used uninitialized in this function [-Wmaybe-uninitialized]
47 | for(int i=0;i<ld;i++){
| ~^~~
ソースコード
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include <bitset>
#include <cmath>
#include <limits>
#include <iostream>
using namespace std;
#define INF 100000
#define MAX 100000
#define MOD 1000000007
typedef long long ll;
typedef pair<int,int> P;
typedef pair< pair<int,int>, int> p;
#define bit(n,k) ((n>>k)&1) /*nのk bit目*/
int myplus[30];
int main(){
ll fact[2000000];
fact[0]=1;
for(ll i=1;i<2000000;i++){
fact[i]=i*fact[i-1];
fact[i]%=MOD;
}
int d,ld,rd;
ll l,r,k,s[30],t[30];
cin>>d>>l>>r>>k;
s[1]=1LL; t[1]=1LL;
for(int i=2;i<=d;i++){
s[i]=s[i-1]*2;
t[i]=t[i-1]*2+1;
}
for(int i=1;i<=d;i++){
if(s[i]<=l && l<=t[i]) ld=i;
if(s[i]<=r && r<=t[i]) rd=i;
}
bool flag=false;
int temp=rd-ld;
ll ans=1;
int unko=1;
for(int i=0;i<ld;i++){
if(i>1) unko*=2;
if(temp+i*2==k){
flag=true;
if(rd==ld){ //正しく機能
if(i==1){
ans*=2*(t[rd]-s[rd]+1)/2;
}else{
ans*=(t[rd]-s[rd]+1)*unko;
}
}else{
return 1;
unko/=2;
if(unko<1) unko=1;
ans*=unko*(t[rd]-s[rd]+1);
}
}
}
if(!flag){
cout<<0<<endl;
return 0;
}
myplus[ld]--; myplus[rd]--;
for(int i=1;i<=d;i++){
ans*=fact[t[i]-s[i]+1+myplus[i]];
ans%=MOD;
}
cout<<ans<<endl;
}
bin101