Skip to content

Commit

Permalink
No commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
gzshawnliang committed Feb 14, 2019
1 parent d7e956b commit f432116
Show file tree
Hide file tree
Showing 5 changed files with 247 additions and 1 deletion.
2 changes: 1 addition & 1 deletion myCpps/!-OJcreater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
using namespace std;

//***************************************
const string CPPfile = "WiFi_UVA11516"; //*
const string CPPfile = "liftHopping_UVA10801"; //*
//***************************************

ifstream fin(CPPfile + ".cpp");
Expand Down
111 changes: 111 additions & 0 deletions myCpps/liftHopping_UVA10801.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#include <bits/stdc++.h>

using namespace std;

ifstream fin("liftHopping_UVA10801.in");
ofstream fout("liftHopping_UVA10801.out");

int _abs(int x)
{
if (x > 0) return x;
else return -x;
}

int main()
{
while (true)
{
int n = 0, k = 0; fin >> n >> k;
if (n + k == 0) break;

vector<int> t(n + 1, 0);
for (int i = 1; i <= n; ++i)
{
fin >> t[i];
}

string in; getline(fin, in);
vector<vector<bool>> g(n + 1, vector<bool>(100, false));
vector<vector<int>> a(n + 1);

for (int i = 1; i <= n; ++i)
{
getline(fin, in);

int size = in.size();
string temp = "";

for (int j = 0; j <= size; ++j)
{
if (in[j] == ' ' || j == size)
{
if (temp == "") continue;

int num = stoi(temp);
a[i].push_back(num);
g[i][num] = true;

temp = "";
}
else
{
temp += in[j];
}
}
}

vector<int> dp(100, INT_MAX / 2);

for (int i = 1; i <= n; ++i)
{
if (g[i][0] == false) continue;

int sizeI = a[i].size();
for (int q = 0; q <= sizeI - 1; ++q)
{
int f = a[i][q];

dp[f] = min(dp[f], f * t[i]);
}
}

for (int c = 1; c <= n; ++c)
{
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
int sizeI = a[i].size();
for (int p = 0; p <= sizeI - 1; ++p)
{
int fl = a[i][p];
if (g[j][fl] == false) continue;

for (int q = 0; q <= sizeI - 1; ++q)
{
int f = a[i][q];

if (fl == 25 && f == 30)
{
for (int __s = 0; __s == 0; ++__s);
}

dp[f] = min(dp[f], dp[fl] + _abs(f - fl) * t[i] + 60);
}
}
}
}
}

if (dp[k] == INT_MAX / 2)
{
fout << "IMPOSSIBLE\n";
}
else
{
fout << dp[k] << '\n';
}
}

return 0;
}
18 changes: 18 additions & 0 deletions myCpps/liftHopping_UVA10801.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
2 30
10 5
0 1 3 5 7 9 11 13 15 20 99
4 13 15 19 20 25 30

2 30
10 1
0 5 10 12 14 20 25 30
2 4 6 8 10 12 14 22 25 28 29

3 50
10 50 100
0 10 30 40
0 20 30
0 20 50
1 1
2
0 2 4 6 8 10
4 changes: 4 additions & 0 deletions myCpps/liftHopping_UVA10801.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
275
285
3920
IMPOSSIBLE
113 changes: 113 additions & 0 deletions myCpps/liftHopping_UVA10801OJ.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#include <bits/stdc++.h>

using namespace std;


int _abs(int x)
{
if (x > 0) return x;
else return -x;
}

int main()
{
ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
while (true)
{
int n = 0, k = 0; cin >> n >> k;
if (n + k == 0) break;

vector<int> t(n + 1, 0);
for (int i = 1; i <= n; ++i)
{
cin >> t[i];
}

string in; getline(cin, in);
vector<vector<bool>> g(n + 1, vector<bool>(100, false));
vector<vector<int>> a(n + 1);

for (int i = 1; i <= n; ++i)
{
getline(cin, in);

int size = in.size();
string temp = "";

for (int j = 0; j <= size; ++j)
{
if (in[j] == ' ' || j == size)
{
if (temp == "") continue;

int num = stoi(temp);
a[i].push_back(num);
g[i][num] = true;

temp = "";
}
else
{
temp += in[j];
}
}
}

vector<int> dp(100, INT_MAX / 2);

for (int i = 1; i <= n; ++i)
{
if (g[i][0] == false) continue;

int sizeI = a[i].size();
for (int q = 0; q <= sizeI - 1; ++q)
{
int f = a[i][q];

dp[f] = min(dp[f], f * t[i]);
}
}

for (int c = 1; c <= n; ++c)
{
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
{
int sizeI = a[i].size();
for (int p = 0; p <= sizeI - 1; ++p)
{
int fl = a[i][p];
if (g[j][fl] == false) continue;

for (int q = 0; q <= sizeI - 1; ++q)
{
int f = a[i][q];

if (fl == 25 && f == 30)
{
for (int __s = 0; __s == 0; ++__s);
}

dp[f] = min(dp[f], dp[fl] + _abs(f - fl) * t[i] + 60);
}
}
}
}
}

if (dp[k] == INT_MAX / 2)
{
cout << "IMPOSSIBLE\n";
}
else
{
cout << dp[k] << '\n';
}
}

cout.flush();
return 0;
}

0 comments on commit f432116

Please sign in to comment.