Submission #469028

#TimeUsernameProblemLanguageResultExecution timeMemory
469028MilladParty (INOI20_party)C++14
7 / 100
495 ms412 KiB
// In the name of god
#include <bits/stdc++.h>
     
#define F first
#define S second
#define pb push_back
#define debug(x) cerr << #x << " : " << x << '\n'
     
using namespace std;
 typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pll;
     
const ll maxn = 205;
const ll mod = 1e9 + 7;
const ll inf = 1e18;

ll ans[maxn], PW[maxn], PW2[maxn], dis[maxn], pw2[maxn], cnt[maxn];
vector <ll> adj[maxn];
ll pw(ll A, ll B){
	ll RES = 1;
	while(B){
		if(B % 2ll)RES = (RES * A) % mod;
		B /= 2ll; A = (A * A) % mod;
	}
	return RES;
}
bool mrk[maxn];
void find_dis(ll v, ll n){
	for(ll i = 1; i <= n; i ++){
		dis[i] = inf;
		cnt[i] = 0; mrk[i] = 0;
	}
	dis[v] = 0; cnt[0] = 0;
	queue<ll> q; q.push(v);
	while(q.size()){
		ll u = q.front(); q.pop();
		if(mrk[u])continue;
		mrk[u] = 1; cnt[dis[u]] ++;
		for(ll j : adj[u]){
			if(dis[j] > dis[u] + 1ll){
				dis[j] = dis[u] + 1ll;
				q.push(j);
			}
		}
	}
}
ll solve(ll n){
       	for(ll i = 1; i <= n; i ++)adj[i].clear();
	for(ll i = 1; i <= n; i ++){
		if(i / 2ll)adj[i].pb(i / 2ll);
		if(i + i <= n)adj[i].pb(i + i);
		if(i + i + 1 <= n)adj[i].pb(i + i + 1);
	}
	ll sum = 0;
	for(ll i = 1; i <= n; i ++){
		find_dis(i, n);
		ll CNT = 0;
		for(ll j = 0; j < n; j ++){
			sum = (sum + (((pw2[n - CNT] - 1ll + mod) % mod) - ((pw2[n - CNT - cnt[j]] - 1ll + mod) % mod) + mod) * pw((pw2[n] - 1ll + mod) % mod, mod - 2) % mod * j % mod) % mod;
			CNT += cnt[j];
		}
	}
	return sum;
}	
int main(){
	pw2[0] = 1;
	for(ll i = 1; i < maxn; i ++)pw2[i] = (pw2[i - 1] * 2ll) % mod;
	for(ll i = 2; i < 201; i ++)ans[i] = solve(i);
	ll q; cin >> q;
	while(q --){
		ll n; cin >> n;
		cout << ans[n] << endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...