Submission #1156642

#TimeUsernameProblemLanguageResultExecution timeMemory
1156642keremMagneti (COCI21_magneti)C++20
0 / 110
1 ms580 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
#define pb push_back
#define endl "\n"
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define inf 1e18+1
#define N 20000
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed<<setprecision(0)
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef tuple<int,int,int> tiii;
typedef pair<int,int> pii;

const int mod=1000000007;
int fac[N+5];
int fp(int x,int y){
	int ans=1;
	while(y){
		if(y&1) ans=ans*x%mod;
		x=x*x%mod;
		y>>=1;
	}
	return ans;
}
void solve(){
	fac[0]=1;
	for(int i=1;i<N+5;i++)
		fac[i]=fac[i-1]*i%mod;
	int n,l;
	cin >> n >> l;
	int a[n],sum=0;
	for(int i=0;i<n;i++){
		cin >> a[i];
		sum+=2*a[i]-1;
	}
	int ans=0;
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			int t=sum-2*(a[i]+a[j])+2;
			for(int k=a[i]+a[j];k<=2*(a[i]+a[j])-2;k++){
				if(k>l-t) break;		
				ans=(ans + fac[n-2+l-t-k]*fp(fac[l-t-k],mod-2)%mod*(min(2*a[i]-1,k-a[j])-max(a[i],k-2*a[j]+1)+1)*2)%mod;
			}
		}
	}
	if(n==1) ans=l;
	cout << ans << endl;
}     
int32_t main(){
	fast;
	int test=1;
	//~ cin >> test;
	while(test--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...