diff --git a/Codeforces/equalize_prizes b/Codeforces/equalize_prizes new file mode 100644 index 0000000..6c81308 --- /dev/null +++ b/Codeforces/equalize_prizes @@ -0,0 +1,34 @@ +#include +using namespace std; + +int q; +int n,k; +int A[101]; +int minim; +int ans; + +int main(){ + cin >> q; + + for(int p = 0; p < q; p++){ + scanf("%d %d", &n, &k); + minim = 1000000000; + + for(int i = 0; i < n; i++){ + scanf("%d",&A[i]); + minim = min(minim,A[i]); + } + + ans = k + minim; + for(int i = 0; i < n; i++){ + if(abs(ans-A[i])>k){ + ans = -1; + break; + } + } + + cout << ans << endl; + } + + return 0; +} diff --git a/Codeforces/exams.cpp b/Codeforces/exams.cpp new file mode 100644 index 0000000..34b3aa1 --- /dev/null +++ b/Codeforces/exams.cpp @@ -0,0 +1,60 @@ +//https://codeforces.com/problemset/problem/479/C +#include +#include +#include +#include +using namespace std; + +typedef long long ll; +typedef pair puu; +typedef priority_queue> pq ; + +#define ri(i) scanf("%d",&i) +#define rl(i) scanf("%ld",&i) +#define rii(i,j) scanf("%u %u",&i,&j) +#define FOR(i,a,b) for(int i = a; i <= b; i++) +#define ROF(i,a,b) for(int i = a; i >= b; i--) +#define p_arr(A,a,b) FOR(i,a,b){ cout << A[i] << " ";} cout << endl; + + + +int N; +puu A[5001]; + +int t1,t2; +pq p; + +bool puu_comp(puu p1,puu p2){ + return p1.first!=p2.first ? p1.first < p2.first : p1.second < p2.second; +} + + +int exams(int i = N-1){ + if(i==0){ + return A[i].second; + } + if(exams(i-1)<=A[i].second) {return A[i].second;} + else {return A[i].first;} +} + + +int main(){ + + ri(N); + + FOR(i,1,N){ + rii(t1,t2); + p.push({t1,t2}); + } + + ROF(i,N-1,0){ + A[i] = {p.top().first,p.top().second}; + p.pop(); + } + + cout << exams() << endl; + + + + return 0; +} diff --git a/Codeforces/printer.cpp b/Codeforces/printer.cpp new file mode 100644 index 0000000..7f725fe --- /dev/null +++ b/Codeforces/printer.cpp @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include +using namespace std; + +typedef long long ll; +typedef pair puu; +typedef priority_queue> pq ; + +#define ri(i) scanf("%d",&i) +#define rl(i) scanf("%ld",&i) +#define rii(i,j) scanf("%d %d",&i,&j) +#define FOR(i,a,b) for(int i = a; i <= b; i++) +#define ROF(i,a,b) for(int i = a; i >= b; i--) +#define p_arr(A,a,b) FOR(i,a,b){ cout << A[i] << " ";} cout << endl; +#define MAXINT ~(1<<31) + +int n,k; +string f1; +string f2; + +int f1_rm; +int f2_rm; +int f1_lm; +int f2_lm; +int candidate; + +int f,t; + +int ans = MAXINT; + +int main(){ + + rii(n,k); + + cin >> f2; + cin >> f1; + + //find both rm: + + ROF(i,n-1,0){ + if(f2[i]=='1'){ + f2_rm = i+1; + break; + } + } + + ROF(i,n-1,0){ + if(f1[i]=='1'){ + f1_rm = i+1; + break; + } + } + + if(f1_rm==0 && f1[0]=='0'){ + FOR(i,0,n-1){ + if(f2[i]=='1'){ + f2_lm = i+1; + break; + } + } + int mp = (f2_lm+f2_rm)/2; + printf("%d\n",max(abs(mp-f2_lm),abs(mp-f2_rm))); + printf("%d %d\n", 2, mp); + return 0; + } + + if(f2_rm==0 && f2[0]=='0'){ + FOR(i,0,n-1){ + if(f1[i]=='1'){ + f1_lm = i+1; + break; + } + } + int mp = (f1_lm+f1_rm)/2; + printf("%d\n",max(abs(mp-f1_lm),abs(mp-f1_rm))); + printf("%d %d\n", 1, mp); + return 0; + } + + + FOR(i,1,n){ + ans = min(ans,max(abs(i-f2_rm),i+k+f1_rm)); + ans = min(ans,max(abs(i-f1_rm),i+k+f2_rm)); + } + + FOR(i,1,n){ + if(ans==max(abs(i-f2_rm),i+k+f1_rm)){ + printf("%d\n",ans); + printf("%d %d\n",2,i); + return 0; + } + if(ans==max(abs(i-f1_rm),i+k+f2_rm)){ + printf("%d\n",ans); + printf("%d %d\n",1,i); + return 0; + } + } + + //cout << ans << endl; + return 0; +} + +  diff --git a/Codeforces/yellow_cards_cf.cpp b/Codeforces/yellow_cards_cf.cpp new file mode 100644 index 0000000..3e78493 --- /dev/null +++ b/Codeforces/yellow_cards_cf.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +using namespace std; + +typedef long long ll; +typedef pair puu; +typedef priority_queue> pq ; + +#define ri(i) scanf("%d",&i) +#define rl(i) scanf("%ld",&i) +#define rii(i,j) scanf("%i %i",&i,&j) +#define FOR(i,a,b) for(int i = a; i <= b; i++) +#define ROF(i,a,b) for(int i = a; i >= b; i--) +#define p_arr(A,a,b) FOR(i,a,b){ cout << A[i] << " ";} cout << endl; + +int A1,A2; +int K1,K2; +int n; + +int min_k,max_k; +int min_a,max_a; + +int mini,maxi; + +int mini_1[1000]; +int mini_2[1000]; + +int maxi_1[1000]; +int maxi_2[1000]; + +int main(){ + + ri(A1); + ri(A2); + ri(K1); + ri(K2); + ri(n); + + if(K1>K2){ + max_k = K1; + max_a = A1; + min_k = K2; + min_a = A2; + } + else{ + max_k = K2; + max_a = A2; + min_k = K1; + min_a = A1; + } + + //compute max: + int temp_n = n; + int temp_maxi = n/min_k; + + if(temp_maxi > min_a){ + temp_maxi = min_a; + temp_n -= min_a*min_k; + + temp_maxi += temp_n/max_k; + } + maxi = temp_maxi; + + //compute mini: + temp_n = n; + if((min_k-1)*min_a + (max_k-1)*max_a >= n){ + mini = 0; + } + else{ + mini = n - ((min_k-1)*min_a + (max_k-1)*max_a); + } + + printf("%d %d\n",mini,maxi); + + return 0; +} + +  diff --git a/SPOJ/ARBITRAG.cpp b/SPOJ/ARBITRAG.cpp new file mode 100644 index 0000000..b242c79 --- /dev/null +++ b/SPOJ/ARBITRAG.cpp @@ -0,0 +1,108 @@ +#include +#include +#include +#include + +using namespace std; + +struct edge {int a,b; float c;}; + +const int MAXINT = ~(1<<31); + +int N; +int M; +int n_case = 1; +float len; + +vector> graph[31]; +list E; +map names; +char c1[200]; +char c2[200]; + +bool bellman(int start){ + + float cost[31]; + float maxf = (float) MAXINT; + for(int i = 0; i < N; i++){ + cost[i] = maxf; + } + + cost[start] = -1.0f; + + for(int l = 1; l < N; l++ ){ + for(edge e:E){ + + if(cost[e.a]==maxf &&cost[e.b]==maxf){continue;} + + if(cost[e.b] > cost[e.a]*e.c){ + cost[e.b] = cost[e.a]*e.c; + } + + } + } + + for(edge e:E){ + + if(cost[e.a]==maxf &&cost[e.b]==maxf){continue;} + + if(cost[e.b] > cost[e.a]*e.c){ + + return true; // there's infinite loop + + } + + } + return false; //no infinite loop + +} + +bool arbitrag(){ + + for(int i = 0; i < N; i++){ + if(bellman(i)){return true;} + } + + return false; +} + + +int main(){ + + scanf("%d",&N); + int temp1; + int temp2; + while(N!=0){ + + for( int i = 0; i < N; i++){ + cin >> c1; + names[c1] = i; + } + + scanf("%d", &M); + + for(int j = 0; j < M; j++){ + scanf("%s %f %s",c1,&len,c2); + temp1 = names[c1]; + temp2 = names[c2]; + + graph[temp1].push_back({len,temp2}); + + E.push_back({temp1,temp2,len}); + } + + printf("Case %d: %s \n",n_case,arbitrag() ? "Yes" : "No"); + + + + scanf("%d",&N); + n_case++; + names.clear(); + for(int i = 0; i < N; i++){ + graph[i].clear(); + } + E.clear(); + } + + return 0; +} diff --git a/SPOJ/CANDN.cpp b/SPOJ/CANDN.cpp new file mode 100644 index 0000000..fdbc975 --- /dev/null +++ b/SPOJ/CANDN.cpp @@ -0,0 +1,98 @@ +#include +#include +#include + +using namespace std; + +int J,B,C,N,S; +int e1,e2,l; + +int ans,ansN,ansC; +const int MAXINT = ~(1<<31); +int memo_charly[5001]; +int memo_nito[5001]; +int memo_bar[5001]; + + +void dijkstra(int (&memo)[5001],int i, vector> (graph)[]){ + + priority_queue> q; + int temp_w,temp_node; + pair temp_e; + + memo[i] = 0; + q.push({0,i}); + + while(!q.empty()){ + temp_w = -q.top().first; + temp_node = q.top().second; + + for(int j = 0; j < graph[temp_node].size(); j++){ + temp_e = graph[temp_node][j]; + if(temp_w + temp_e.first < memo[temp_e.second]){ + memo[temp_e.second] = temp_w + temp_e.first; + q.push({-memo[temp_e.second],temp_e.second}); + } + } + + q.pop(); + } + +} + +void init_memo(int (&memo)[5001]){ + for(int i = 1; i <= J; i++){ + memo[i] = MAXINT; + } +} + +void candn(vector> (graph)[5001]){ + //init memos: + init_memo(memo_nito); + init_memo(memo_charly); + init_memo(memo_bar); + + //dijkstra over the three memos: + dijkstra(memo_nito,N,graph); + dijkstra(memo_charly,C,graph); + dijkstra(memo_bar,B,graph); + + int maxi = -1; + int maxi_node = -1; + int min_cost_charly = memo_bar[C]; + int min_cost_nito = memo_bar[N]; + + for(int i = 1; i <= J; i++){ + if((memo_bar[i] + memo_charly[i]) == min_cost_charly && (memo_bar[i] + memo_nito[i])==min_cost_nito && memo_bar[i]>maxi){ + maxi = memo_bar[i]; + maxi_node = i; + } + } + + ans = maxi; + ansC = memo_charly[maxi_node]; + ansN = memo_nito[maxi_node]; + +} + +int main(){ + + scanf("%d %d %d %d %d",&J,&B,&C,&N,&S); + while(J!=-1){ + vector> graph[5001]; + + for(int i = 0; i < S; i++){ + scanf("%d %d %d",&e1,&e2,&l); + graph[e1].push_back({l,e2}); + graph[e2].push_back({l,e1}); + } + + candn(graph); + + cout << ans << " " << ansC << " " << ansN << endl; + + scanf("%d %d %d %d %d",&J,&B,&C,&N,&S); + } + + return 0; +} diff --git a/SPOJ/mixtures.cpp b/SPOJ/mixtures.cpp new file mode 100644 index 0000000..c89d00f --- /dev/null +++ b/SPOJ/mixtures.cpp @@ -0,0 +1,92 @@ +#include +using namespace std; + +int n; +int mixes[101]; +int MAXINT = ~(1<<31); +int T[101]; +int memo[101][101]; +int counter; +int get_sum(int b, int e){ + + if(e0){ + + //initialize memo: + for(int i = 0; i < n; i++){ + for(int j = 0; j < n; j++){ + memo[i][j] = -1; + } + } + + for(int i = 0; i < n; i++){ + cin >> mixes[i]; + T[i] = 0; + } + + T[0] = mixes[0]; + for(int i = 1; i < n; i++){ + T[i] = T[i-1] + mixes[i]; + } + + cout << mixtv2() << endl; + } + + return 0; +} diff --git a/SPOJ/soldier.cpp b/SPOJ/soldier.cpp new file mode 100644 index 0000000..0e6dd6b --- /dev/null +++ b/SPOJ/soldier.cpp @@ -0,0 +1,84 @@ +#include +#include +using namespace std; + +int N,T; +int price[110]; +int quality[110]; +vector equipment[7]; +int t,p,q; +int code[7] = {-1, 2,3,5,7,11,13}; +int ans; +int availableTypes = 1; +int counter; +int memo[7][1010]; +int soldierv2(int i = 6, int money = T){ + counter ++; + + int ans = -1; + int temp1; + if(money <= 0){ + return -1; + } + if(i==1){ + for(int j = 0; j < equipment[i].size(); j++){ + ans = money - price[equipment[i].at(j)] >= 0 ? max(ans,quality[equipment[i].at(j)]) : ans; + } + return ans; + } + + for(int j = 0; j < equipment[i].size(); j++){ + + + if(memo[i-1][money - price[equipment[i].at(j)]]==0){ + temp1 = soldierv2(i-1,money - price[equipment[i].at(j)]); + memo[i-1][money - price[equipment[i].at(j)]] = temp1; + } + else{ + temp1 = memo[i-1][money - price[equipment[i].at(j)]]; + } + temp1 = min(quality[equipment[i].at(j)],temp1); + ans = temp1 != -1? max(temp1,ans) : ans; + } + + return ans; +} + + +int main(){ + for(int i = 1; i <= 6; i++ ){ + equipment[i].reserve(1000); + } + + scanf("%d %d", &N, &T); + + for(int i = 1; i <= N; i++){ + scanf("%d %d %d", &t, &p, &q); + + if(t<=6){ + price[i] = p; + quality[i] = q; + equipment[t].push_back(i); + if(availableTypes%code[t]!=0){ + availableTypes *= code[t]; + } + } + } + + if(availableTypes!=30030){ + cout << 0 << endl; + } + else{ + ans = soldierv2(); + if(ans==-1){ + cout << 0 << endl; + } + else{ + cout << ans << endl; + + } + + } + + return 0; +}