Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma optimize ("O3")
- #include <fstream>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int quanti_fatt=0;
- const int MAXN=200;
- int L, N, K, cont=0;
- int pozzi[MAXN];
- int pozzii[MAXN];
- int somme[MAXN];
- int fattoriali[MAXN];
- void pozzo(int k, int i_attuale, int l_attuale, bool taken){
- if (i_attuale+k > N-1 || k <0) return;
- if (taken){
- l_attuale+=pozzii[i_attuale];
- k--;
- }
- if (l_attuale+somme[k+i_attuale]-somme[i_attuale]< L)
- return;
- if (k==0){
- // cout<<l_attuale<<" ";
- if (l_attuale>=L){
- quanti_fatt=(quanti_fatt%10007+(fattoriali[K]%10007*fattoriali[N-K-1]%10007)%10007)%10007;
- //quanti_fatt=(quanti_fatt+(fattoriali[K]*fattoriali[N-K-1]));
- //cout<<quanti_fatt<<endl;
- }
- return;
- }
- if (i_attuale==N-2) return;
- pozzo(k, i_attuale+1, l_attuale, true);
- pozzo(k, i_attuale+1, l_attuale, false);
- }
- int main(){
- fattoriali[0]=1;
- for (int i=1;i<=MAXN;i++){
- fattoriali[i]=1;
- fattoriali[i]=(fattoriali[i-1]%10007*i%10007)%10007;
- }
- ifstream in ("input.txt");
- ofstream out ("output.txt");
- in>>L>>N>>K;
- int n=N-1;
- for (int i=0;i<n;i++){
- in>>pozzi[n-i-1];
- }
- sort(pozzi, pozzi+n);
- for (int i=0;i<n;i++){
- pozzii[i]=pozzi[n-1-i];
- //cout<<pozzii[i]<<" ";
- }
- somme[0]=pozzii[0];
- for (int i=1;i<n;i++)
- somme [i]=somme[i-1]+pozzii[i];
- //cout<<endl;
- pozzo(K, 0, 0, true);
- pozzo(K, 0, 0, false);
- out<<quanti_fatt;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement