Pagini recente » Cod sursa (job #43389) | Cod sursa (job #3255800) | Cod sursa (job #51489) | Cod sursa (job #176711) | Cod sursa (job #3295247)
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
// #include <bits/stdc++.h>
#define in fin
#define out fout
using namespace std;
using ll = long long;
const ll MOD = 3210121;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int f[10001], inv[10001];
ll exp_rpd(ll b, ll e){
ll p = 1;
while(e){
if(e % 2) p = (p * b) % MOD;
b = (b * b) % MOD;
e /= 2;
}
return p;
}
ll C(ll n, ll k){
return f[n] * exp_rpd(f[k] * f[n - k] % MOD, MOD - 2) % MOD;
}
signed main(){
ios_base::sync_with_stdio(false);
in.tie(NULL);
f[0] = 1;
for(int i = 1; i <= 10000; i++) f[i] = f[i - 1] * i % MOD;
inv[10000] = exp_rpd(f[10000], MOD - 2);
for(int i = 9999; i >= 0; i--) inv[i] = (inv[i + 1] * (i + 1)) % MOD;
int n, k, s; in >> k >> s >> n;
int v[n][k];
for(int i = 0; i < n; i++){
for(int j = 0; j < k; j++) in >> v[i][j];
}
ll spp[s + 1]; // osa fie gen spp[i] = C(0 + k - 1, k - 1) + ... + C(i + k - 1, k - 1)
ll tot = 0;
spp[0] = 0;
for(int i = 1; i <= s; i++){
spp[i] = spp[i - 1] + C(i + k - 1, k - 1);
cout << "i = " << i << " C( " << i + k - 1 << " , " << k - 1 << " ) = " << C(i + k - 1, k - 1) << '\n';
}
for(int i = 2; i <= s; i++){
tot = tot + C(i + k - 1, k - 1) - k;
}
cout << "tot = " << tot << '\n';
for(int p = 1; p < (1 << n); p++){
int maxi[k];
int cnt = 0;
for(int i = 0; i < n; i++){
if( (p & (1 << i)) == 0 ) continue; // nu incl sirul asta
cnt++;
for(int j = 0; j < k; j++){
if(cnt == 1) maxi[i] = v[i][j];
else maxi[i] = max(maxi[i], v[i][j]);
}
int extra = s;
for(int j = 0; j < k; j++) extra -= maxi[j];
if(extra <= 0) continue;
tot -= spp[extra];
}
}
out << "dscjdsbcidsbcidbvsidb\n";
out << tot << '\n';
return 0;
}