#include <vector>
#include <iostream>
struct fight
{
bool visited;
int a;
int d;
fight(int a_i, int d_i, bool v)
{
a = a_i;
d = d_i;
visited = 0;
}
};
bool search_path(std::vector<fight> fights, int z, std::vector<int> & path)
{
std::vector<fight> new_fihgts;
std::vector<int> new_path;
int zdrowie;
for(int i=0; i<fights.size(); ++i)
{
if(not fights.at(i).visited and z > fights.at(i).d)
{
new_fihgts = fights;
new_fihgts.at(i).visited = true;
zdrowie = z - fights.at(i).d + fights.at(i).a;
new_path = std::vector<int>(path);
new_path.push_back(i+1);
if (search_path(new_fihgts, zdrowie, new_path))
{
path = new_path;
return true;
}
}
}
if( new_path.size() == fights.size())
{
path = new_path;
return true;
}
else return false;
}
void print_path(std::vector<int> p){
for(int i = 0; i<p.size(); i++)
printf("%d ", p.at(i));
}
int main()
{
int z, c, a, d, n;
std::vector<fight> f;
std::vector<int> p;
scanf("%d %d", &n, &z);
for ( c = 0 ; c < n ; c++ )
{
scanf("%d %d", &d, &a);
f.push_back(fight(a, d, false));
}
if (search_path(f, z, p))
{
printf("TAK\n");
print_path(p);
}
else
printf("NIE\n");
}
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 | #include <vector> #include <iostream> struct fight { bool visited; int a; int d; fight(int a_i, int d_i, bool v) { a = a_i; d = d_i; visited = 0; } }; bool search_path(std::vector<fight> fights, int z, std::vector<int> & path) { std::vector<fight> new_fihgts; std::vector<int> new_path; int zdrowie; for(int i=0; i<fights.size(); ++i) { if(not fights.at(i).visited and z > fights.at(i).d) { new_fihgts = fights; new_fihgts.at(i).visited = true; zdrowie = z - fights.at(i).d + fights.at(i).a; new_path = std::vector<int>(path); new_path.push_back(i+1); if (search_path(new_fihgts, zdrowie, new_path)) { path = new_path; return true; } } } if( new_path.size() == fights.size()) { path = new_path; return true; } else return false; } void print_path(std::vector<int> p){ for(int i = 0; i<p.size(); i++) printf("%d ", p.at(i)); } int main() { int z, c, a, d, n; std::vector<fight> f; std::vector<int> p; scanf("%d %d", &n, &z); for ( c = 0 ; c < n ; c++ ) { scanf("%d %d", &d, &a); f.push_back(fight(a, d, false)); } if (search_path(f, z, p)) { printf("TAK\n"); print_path(p); } else printf("NIE\n"); } |
English