#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int ret = 101;
void perm(vector<int> p,vector<int> x,int k)
{
int i,a,n;
vector<int> t;
vector<int>::reverse_iterator it,it2;
if (k == 1)
{
t = p;
n = 1;
it2 = t.rbegin();
it = x.rbegin();
while (it2 != t.rend() && it != x.rend())
{
// printf("%d %d\n",*it,*it2);
if (*it2 < *it) {
++it2;
n++;
}
else {
*it2 -= *it;
++it;
}
}
if (it == x.rend() && n < ret) ret = n;
// for (it = x.rbegin(); it != x.rend(); ++it) printf("%d ",*it);
// printf("\n");
}
else
{
for (i = 0; i < k; i++)
{
a = x[k-1];
x[k-1] = x[i];
x[i] = a;
perm(p,x,k-1);
a = x[k-1];
x[k-1] = x[i];
x[i] = a;
}
}
}
bool cmp(int i,int j)
{
return i > j;
}
int main()
{
int N,M,n,m,t;
vector<int> a,c;
vector<int>::reverse_iterator it;
scanf("%d %d",&N,&M);
for (n = 0; n < N; n++)
{
scanf("%d",&t);
a.push_back(t);
}
for (m = 0; m < M; m++)
{
scanf("%d",&t);
c.push_back(t);
}
sort(c.begin(),c.end());
sort(a.begin(),a.end(),cmp);
/*
for (it = c.rbegin(); it != c.rend(); ++it) printf("%d ",*it);
printf("\n");
for (it = a.rbegin(); it != a.rend(); ++it) printf("%d ",*it);
printf("\n");
*/
perm(c,a,a.size());
if (ret < 101) printf("%d\n",ret); else printf("NIE\n");
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <cstdio> #include <vector> #include <algorithm> using namespace std; int ret = 101; void perm(vector<int> p,vector<int> x,int k) { int i,a,n; vector<int> t; vector<int>::reverse_iterator it,it2; if (k == 1) { t = p; n = 1; it2 = t.rbegin(); it = x.rbegin(); while (it2 != t.rend() && it != x.rend()) { // printf("%d %d\n",*it,*it2); if (*it2 < *it) { ++it2; n++; } else { *it2 -= *it; ++it; } } if (it == x.rend() && n < ret) ret = n; // for (it = x.rbegin(); it != x.rend(); ++it) printf("%d ",*it); // printf("\n"); } else { for (i = 0; i < k; i++) { a = x[k-1]; x[k-1] = x[i]; x[i] = a; perm(p,x,k-1); a = x[k-1]; x[k-1] = x[i]; x[i] = a; } } } bool cmp(int i,int j) { return i > j; } int main() { int N,M,n,m,t; vector<int> a,c; vector<int>::reverse_iterator it; scanf("%d %d",&N,&M); for (n = 0; n < N; n++) { scanf("%d",&t); a.push_back(t); } for (m = 0; m < M; m++) { scanf("%d",&t); c.push_back(t); } sort(c.begin(),c.end()); sort(a.begin(),a.end(),cmp); /* for (it = c.rbegin(); it != c.rend(); ++it) printf("%d ",*it); printf("\n"); for (it = a.rbegin(); it != a.rend(); ++it) printf("%d ",*it); printf("\n"); */ perm(c,a,a.size()); if (ret < 101) printf("%d\n",ret); else printf("NIE\n"); return 0; } |
English