1 /* 2 ***********Good LUCK********** 3 * Author: yeahpeng 4 * Created Time: 2015/6/5 12:32:45 5 * File Name: uestc_482_CExchange.cpp 6 * Charitable Exchange 7 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 8 9 Submit Status 10 Have you ever heard a star charity show called Charitable Exchange? In this show, a famous star starts with a small item which values 1 yuan. Then, through the efforts of repeatedly exchanges which continuously increase the value of item in hand, he (she) finally brings back a valuable item and donates it to the needy. 11 12 In each exchange, one can exchange for an item of Vi yuan if he (she) has an item values more than or equal to Ri yuan, with a time cost of Ti minutes. 13 14 Now, you task is help the star to exchange for an item which values more than or equal to M yuan with the minimum time. 15 16 Input 17 The first line of the input is T (no more than 20), which stands for the number of test cases you need to solve. 18 19 For each case, two integers N, M (1¡ÜN¡Ü105, 1¡ÜM¡Ü109) in the first line indicates the number of available exchanges and the expected value of final item. Then N lines follow, each line describes an exchange with 3 integers Vi, Ri, Ti (1¡ÜRi¡ÜVi¡Ü109, 1¡ÜTi¡Ü109). 20 21 Output 22 For every test case, you should output Case #k: first, where k indicates the case number and counts from 1. Then output the minimum time. Output ?1 if no solution can be found. 23 24 Sample input and output 25 Sample Input Sample Output 26 3 27 3 10 28 5 1 3 29 8 2 5 30 10 9 2 31 4 5 32 2 1 1 33 3 2 1 34 4 3 1 35 8 4 1 36 5 9 37 5 1 1 38 10 4 10 39 8 1 10 40 11 6 1 41 7 3 8 42 Case #1: -1 43 Case #2: 4 44 Case #3: 10 45 */ 46 #include <stdio.h> 47 #include <iostream> 48 #include <algorithm> 49 #include <sstream> 50 #include <stdlib.h> 51 #include <string.h> 52 #include <limits.h> 53 #include <vector> 54 #include <string> 55 #include <time.h> 56 #include <math.h> 57 #include <queue> 58 #include <stack> 59 #include <set> 60 #include <map> 61 #define INF 0x3f3f3f3f 62 #define Zero(x) memset((x),0, sizeof(x)) 63 #define Neg(x) memset((x), -1, sizeof(x)) 64 #define dg(x) cout << #x << " = " << x << endl 65 #define pk(x) push_back(x) 66 #define pok() pop_back() 67 #define eps 1e-8 68 #define pii pair<int, int> 69 #define pi acos(-1.0) 70 using namespace std; 71 typedef long long ll; 72 bool debug = true; 73 int OK = 1; 74 const int maxn = 100050; 75 int n, m, c; 76 struct node{ 77 int v, u, val; 78 node(int vv = 0, int uu = 0, int vval = 0){ 79 v = vv; 80 u = uu; 81 val = vval; 82 } 83 bool operator < (const node& a)const { 84 return u < a.u; 85 } 86 }edge[maxn]; 87 ll ans; 88 struct noo{ 89 int u; 90 ll cost; 91 noo(int uu = 0, ll cc = 0){ 92 u = uu; 93 cost = cc; 94 } 95 bool operator < (const noo& a)const { 96 return cost > a.cost; 97 } 98 }; 99 bool cal(){ 100 priority_queue<noo> pq; 101 pq.push(noo(1, 0)); 102 noo top; 103 int left = 0, i; 104 while(!pq.empty()){ 105 top = pq.top(); 106 pq.pop(); 107 if(top.u >= m) { 108 ans = top.cost; 109 return true; 110 } 111 for(i = left; i < c; ++i){ 112 if(top.u < edge[i].u) break; 113 if(top.u >= edge[i].u && top.u <edge[i].v){ 114 pq.push(noo(edge[i].v, top.cost + edge[i].val)); 115 } 116 } 117 left = i; 118 } 119 return false; 120 } 121 122 int main(){ 123 //freopen("data.in","r",stdin); 124 //freopen("data.out","w",stdout); 125 //cin.sync_with_stdio(false); 126 int T; 127 cin >> T; 128 int u, v, val; 129 for(int cs = 1; cs <= T; ++cs){ 130 scanf("%d%d", &n, &m); 131 c = 0; 132 for(int i = 0; i < n; ++i){ 133 scanf("%d%d%d", &v, &u, &val); 134 if(u >= v) continue; 135 edge[c++] = node(v, u, val); 136 } 137 sort(edge, edge + c); 138 printf("Case #%d: ", cs); 139 if(cal()){ 140 cout << ans << endl; 141 }else cout << -1 << endl; 142 } 143 return 0; 144 }
1 /* 2 ***********Good LUCK********** 3 * Author: yeahpeng 4 * Created Time: 2015/6/4 22:03:06 5 * File Name: poj1724優先.cpp 6 * Description 7 8 N cities named with numbers 1 ... N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the number of coins). 9 Bob and Alice used to live in the city 1. After noticing that Alice was cheating in the card game they liked to play, Bob broke up with her and decided to move away - to the city N. He wants to get there as quickly as possible, but he is short on cash. 10 11 We want to help Bob to find the shortest path from the city 1 to the city N that he can afford with the amount of money he has. 12 Input 13 14 The first line of the input contains the integer K, 0 <= K <= 10000, maximum number of coins that Bob can spend on his way. 15 The second line contains the integer N, 2 <= N <= 100, the total number of cities. 16 17 The third line contains the integer R, 1 <= R <= 10000, the total number of roads. 18 19 Each of the following R lines describes one road by specifying integers S, D, L and T separated by single blank characters : 20 S is the source city, 1 <= S <= N 21 D is the destination city, 1 <= D <= N 22 L is the road length, 1 <= L <= 100 23 T is the toll (expressed in the number of coins), 0 <= T <=100 24 25 Notice that different roads may have the same source and destination cities. 26 Output 27 28 The first and the only line of the output should contain the total length of the shortest path from the city 1 to the city N whose total toll is less than or equal K coins. 29 If such path does not exist, only number -1 should be written to the output. 30 Sample Input 31 32 5 33 6 34 7 35 1 2 2 3 36 2 4 3 3 37 3 4 2 4 38 1 3 4 1 39 4 6 2 1 40 3 5 2 0 41 5 4 3 2 42 Sample Output 43 44 11 45 */ 46 #include <stdio.h> 47 #include <iostream> 48 #include <algorithm> 49 #include <sstream> 50 #include <stdlib.h> 51 #include <string.h> 52 #include <limits.h> 53 #include <vector> 54 #include <string> 55 #include <time.h> 56 #include <math.h> 57 #include <queue> 58 #include <stack> 59 #include <set> 60 #include <map> 61 #define INF 0x3f3f3f3f 62 #define Zero(x) memset((x),0, sizeof(x)) 63 #define Neg(x) memset((x), -1, sizeof(x)) 64 #define dg(x) cout << #x << " = " << x << endl 65 #define pk(x) push_back(x) 66 #define pok() pop_back() 67 #define eps 1e-8 68 #define pii pair<int, int> 69 #define pi acos(-1.0) 70 using namespace std; 71 typedef long long ll; 72 bool debug = true; 73 int OK = 1; 74 const int maxn = 110; 75 const int maxm = 10010; 76 int k, n, r; 77 struct node{ 78 int l, t, v; 79 node(int ll = 0, int tt = 0, int vv = 0){ 80 l = ll; 81 t = tt; 82 v = vv; 83 } 84 bool operator<(const node& a) const { 85 return l > a.l; 86 } 87 }; 88 vector<node> gra[maxn]; 89 int ans; 90 bool cal(){ 91 priority_queue<node> pq; 92 pq.push(node(0, 0, 1)); 93 node top,t; 94 int sz; 95 while(!pq.empty()){ 96 top = pq.top(); 97 pq.pop(); 98 if(top.v == n) { 99 ans = top.l; 100 return true; 101 } 102 sz = gra[top.v].size(); 103 for(int i = 0; i < sz; ++i){ 104 t = gra[top.v][i]; 105 if(t.t + top.t <= k) pq.push(node(t.l + top.l, t.t + top.t, t.v)); 106 } 107 108 } 109 return false; 110 } 111 int main(){ 112 //freopen("data.in","r",stdin); 113 //freopen("data.out","w",stdout); 114 //cin.sync_with_stdio(false); 115 int u, v, l, t; 116 while(scanf("%d", &k) != EOF){ 117 scanf("%d%d", &n, &r); 118 for(int i = 0; i <= n; ++i) gra[i].clear(); 119 for(int i = 0; i < r; ++i){ 120 scanf("%d%d%d%d", &u, &v, &l, &t); 121 gra[u].pk(node(l, t, v)); 122 } 123 if(cal()) cout << ans << endl; 124 else cout << -1 << endl; 125 } 126 return 0; 127 }
1 /* 2 ***********Good LUCK********** 3 * Author: yeahpeng 4 * Created Time: 2015/6/3 23:37:49 5 * File Name: hdu4544_優先.cpp 6 * 題意:Problem Description 7 湫湫減肥 8 越減越肥! 9 10 最近,減肥失敗的湫湫爲發泄心中鬱悶,在玩一個消滅免子的遊戲。 11 遊戲規則很簡單,用箭殺死免子便可。 12 箭是一種消耗品,已知有M種不一樣類型的箭能夠選擇,而且每種箭都會對兔子形成傷害,對應的傷害值分別爲Di(1 <= i <= M),每種箭須要必定的QQ幣購買。 13 假設每種箭只能使用一次,每隻免子也只能被射一次,請計算要消滅地圖上的全部兔子最少須要的QQ幣。 14 15 16 Input 17 輸入數據有多組,每組數據有四行; 18 第一行有兩個整數N,M(1 <= N, M <= 100000),分別表示兔子的個數和箭的種類; 19 第二行有N個正整數,分別表示兔子的血量Bi(1 <= i <= N); 20 第三行有M個正整數,表示每把箭所能形成的傷害值Di(1 <= i <= M); 21 第四行有M個正整數,表示每把箭須要花費的QQ幣Pi(1 <= i <= M)。 22 23 特別說明: 24 一、當箭的傷害值大於等於兔子的血量時,就能將兔子殺死; 25 二、血量Bi,箭的傷害值Di,箭的價格Pi,均小於等於100000。 26 27 28 Output 29 若是不能殺死全部兔子,請輸出」No」,不然,請輸出最少的QQ幣數,每組輸出一行。 30 31 32 Sample Input 33 3 3 34 1 2 3 35 2 3 4 36 1 2 3 37 3 4 38 1 2 3 39 1 2 3 4 40 1 2 3 1 41 42 43 Sample Output 44 6 45 4 46 */ 47 #include <stdio.h> 48 #include <iostream> 49 #include <algorithm> 50 #include <sstream> 51 #include <stdlib.h> 52 #include <string.h> 53 #include <limits.h> 54 #include <vector> 55 #include <string> 56 #include <time.h> 57 #include <math.h> 58 #include <queue> 59 #include <stack> 60 #include <set> 61 #include <map> 62 #define INF 0x3f3f3f3f 63 #define Zero(x) memset((x),0, sizeof(x)) 64 #define Neg(x) memset((x), -1, sizeof(x)) 65 #define dg(x) cout << #x << " = " << x << endl 66 #define pk(x) push_back(x) 67 #define pok() pop_back() 68 #define eps 1e-8 69 #define pii pair<int, int> 70 #define pi acos(-1.0) 71 using namespace std; 72 typedef long long ll; 73 bool debug = false; 74 int OK = 1; 75 const int maxn = 100100; 76 int n, m; 77 ll ans; 78 int b[maxn]; 79 struct node{ 80 int cost, d; 81 node(int dd = 0, int cc = 0){ 82 d = dd; 83 cost = cc; 84 } 85 bool operator < (const node& a)const { 86 return d > a.d ; 87 } 88 }jj[maxn]; 89 90 priority_queue<int, vector<int>, greater<int> > qj; 91 bool cal(){ 92 int st = 0; 93 ans = 0; 94 for(int i = 0; i < n; ++i){ 95 while(st < m && jj[st].d >= b[i]){ 96 qj.push(jj[st].cost); 97 st++; 98 } 99 if(qj.empty()) return false; 100 if(debug){ 101 dg(qj.top()); 102 } 103 ans += qj.top(); 104 qj.pop(); 105 } 106 return true; 107 } 108 int main(){ 109 //freopen("data.in","r",stdin); 110 //freopen("data.out","w",stdout); 111 //cin.sync_with_stdio(false); 112 while(cin >> n >>m){ 113 while(!qj.empty()) qj.pop(); 114 for(int i = 0; i < n; ++i){ 115 scanf("%d", b + i); 116 } 117 sort(b, b + n, greater<int>()); 118 for(int i = 0; i < m; ++i){ 119 scanf("%d", &jj[i].d); 120 } 121 for(int i = 0; i < m; ++i){ 122 scanf("%d", &jj[i].cost); 123 } 124 sort(jj, jj + m); 125 if(cal()){ 126 cout << ans << endl; 127 }else cout << "No" << endl; 128 } 129 return 0; 130 }
1 /* 2 ***********Good LUCK********** 3 * Author: yeahpeng 4 * Created Time: 2015/6/3 23:09:57 5 * File Name: hdu1242_優隊+bfs.cpp 6 */ 7 #include <stdio.h> 8 #include <iostream> 9 #include <algorithm> 10 #include <sstream> 11 #include <stdlib.h> 12 #include <string.h> 13 #include <limits.h> 14 #include <vector> 15 #include <string> 16 #include <time.h> 17 #include <math.h> 18 #include <queue> 19 #include <stack> 20 #include <set> 21 #include <map> 22 #define INF 0x3f3f3f3f 23 #define Zero(x) memset((x),0, sizeof(x)) 24 #define Neg(x) memset((x), -1, sizeof(x)) 25 #define dg(x) cout << #x << " = " << x << endl 26 #define pk(x) push_back(x) 27 #define pok() pop_back() 28 #define eps 1e-8 29 #define pii pair<int, int> 30 #define pi acos(-1.0) 31 using namespace std; 32 typedef long long ll; 33 bool debug = true; 34 int OK = 1; 35 int n, m; 36 const int maxn = 220; 37 char mp[maxn][maxn]; 38 struct node{ 39 int x, y, sp; 40 node(int xx = 0,int yy = 0, int ss = 0){ 41 x = xx; 42 y = yy; 43 sp = ss; 44 } 45 bool operator<(const node& b)const { 46 return sp > b.sp; 47 } 48 }st, ed; 49 int dir[4][2] = { 50 0, 1, 0, -1, 1, 0, -1, 0 51 }; 52 int ans; 53 bool flag[maxn][maxn]; 54 bool cal(){ 55 Zero(flag); 56 priority_queue<node> q; 57 q.push(node(st.x, st.y, 0)); 58 node top; 59 int x, y; 60 flag[st.x][st.y] = true; 61 while(!q.empty()){ 62 top = q.top(); 63 q.pop(); 64 if(top.x == ed.x && top.y == ed.y){ 65 ans = top.sp; 66 return true; 67 } 68 69 for(int i = 0; i < 4; ++i){ 70 x = top.x + dir[i][0]; 71 y = top.y + dir[i][1]; 72 if(!flag[x][y] && x >= 1 && x <= n && y >= 1 && y <= m){ 73 if(mp[x][y] != '#'){ 74 flag[x][y] = true; 75 if(mp[x][y] == 'x') q.push(node(x, y,top.sp + 2)); 76 else q.push(node(x, y, top.sp + 1)); 77 } 78 } 79 } 80 } 81 return false; 82 } 83 int main(){ 84 //freopen("data.in","r",stdin); 85 //freopen("data.out","w",stdout); 86 //cin.sync_with_stdio(false); 87 while(scanf("%d%d", &n, &m) != EOF){ 88 for(int i = 1; i <= n; ++i) scanf("%s", &mp[i][1]); 89 for(int i = 1; i <= n; ++i){ 90 for(int j = 1; j <= m; ++j){ 91 if(mp[i][j] == 'r'){ 92 st.x = i; 93 st.y = j; 94 }else if(mp[i][j] == 'a'){ 95 ed.x = i; 96 ed.y = j; 97 } 98 } 99 } 100 if(cal()){ 101 cout << ans << endl; 102 }else cout << "Poor ANGEL has to stay in the prison all his life." << endl; 103 } 104 return 0; 105 }
zoj 3632 watermelon full of waterenode
1 /***Good Luck***/ 2 #define _CRT_SECURE_NO_WARNINGS 3 #include <iostream> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <cstring> 7 #include <string> 8 #include <algorithm> 9 #include <stack> 10 #include <map> 11 #include <queue> 12 #include <vector> 13 #include <set> 14 #include <functional> 15 #include <cmath> 16 #include <numeric> 17 18 #define Zero(a) memset(a, 0, sizeof(a)) 19 #define Neg(a) memset(a, -1, sizeof(a)) 20 #define All(a) a.begin(), a.end() 21 #define PB push_back 22 #define inf 0x3f3f3f3f 23 #define inf2 0x7fffffffffffffff 24 #define ll long long 25 using namespace std; 26 //#pragma comment(linker, "/STACK:102400000,102400000") 27 void get_val(int &a) { 28 int value = 0, s = 1; 29 char c; 30 while ((c = getchar()) == ' ' || c == '\n'); 31 if (c == '-') s = -s; else value = c - 48; 32 while ((c = getchar()) >= '0' && c <= '9') 33 value = value * 10 + c - 48; 34 a = s * value; 35 } 36 const int maxn = 50005; 37 int n; 38 ll arr1[maxn], arr2[maxn]; 39 ll dp[maxn]; 40 struct node { 41 ll v, i; 42 node(ll vv = 0, ll ii = 0) :i(ii), v(vv){} 43 bool operator<(const node& a) const { 44 return v > a.v || (v == a.v && i > a.i); 45 } 46 }; 47 int main() { 48 //freopen("data.out", "w", stdout); 49 //freopen("data.in", "r", stdin); 50 //cin.sync_with_stdio(false); 51 while (scanf("%d", &n) != EOF) { 52 for (int i = 1; i <= n; ++i) scanf("%lld", arr1 + i); 53 for (int i = 1; i <= n; ++i) scanf("%lld", arr2 + i); 54 priority_queue<node> pq; 55 dp[0] = 0; 56 for (int i = 1; i <= n; ++i) { 57 node tmp = node(dp[i - 1] + arr1[i], arr2[i] + i - 1); 58 while (!pq.empty() && pq.top().i < i) pq.pop(); 59 pq.push(tmp); 60 dp[i] = pq.top().v; 61 } 62 printf("%lld\n", dp[n]); 63 } 64 return 0; 65 }
hdu 5090ios
1 //************************* 2 //*******GL HF************ 3 //************************* 4 #include<cstdio> 5 #include<cmath> 6 #include<algorithm> 7 #include<iostream> 8 #include<cstring> 9 #include<cstdlib> 10 #include<map> 11 #include<queue> 12 #include<set> 13 #include<vector> 14 #pragma comment(linker, "/STACK:102400000,102400000") 15 #define Local 16 #define o(a) cout << #a << " = " << a << endl 17 #define pb(a) push_back(a) 18 #define lson l,mid,pos<<1 19 #define rson mid+1,r,pos<<1|1 20 typedef long long ll; 21 using namespace std; 22 23 void local(){ 24 #ifdef Local 25 freopen("date.in","r",stdin); 26 freopen("date.out","w",stdout); 27 #endif 28 } 29 const int maxn = 550; 30 bool debug = false; 31 int n, k; 32 int arr[maxn]; 33 priority_queue<int ,vector<int>,greater<int> > q; 34 int main(){ 35 int T; 36 scanf("%d", &T); 37 38 while(T--){ 39 scanf("%d%d", &n, &k); 40 int v; 41 while(!q.empty()) q.pop(); 42 for(int i = 1; i <= n ; ++i){ 43 scanf("%d", &v); 44 q.push(v); 45 } 46 int top; 47 int c = 1; 48 if(debug){ o(q.top());} 49 while(!q.empty() && q.top() <= n){ 50 top = q.top(); 51 q.pop(); 52 if(debug){ o(top);} 53 if(c != top){ 54 q.push(top + k); 55 }else { 56 c++; 57 } 58 59 //cout << "OK" << endl; 60 } 61 if(!q.empty()){ cout << "Tom" << endl;} 62 else cout << "Jerry" << endl; 63 } 64 }