Skip to content

Some CodeForces problems solutions #180

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions Codeforces/equalize_prizes
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include <iostream>
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;
}
60 changes: 60 additions & 0 deletions Codeforces/exams.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
//https://codeforces.com/problemset/problem/479/C
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;
typedef pair<unsigned int, unsigned int> puu;
typedef priority_queue<pair<unsigned int, unsigned int>> 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;
}
106 changes: 106 additions & 0 deletions Codeforces/printer.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

typedef long long ll;
typedef pair<unsigned int, unsigned int> puu;
typedef priority_queue<pair<unsigned int, unsigned int>> 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;
}


80 changes: 80 additions & 0 deletions Codeforces/yellow_cards_cf.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;
typedef pair<unsigned int, unsigned int> puu;
typedef priority_queue<pair<unsigned int, unsigned int>> 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;
}


108 changes: 108 additions & 0 deletions SPOJ/ARBITRAG.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#include <iostream>
#include <list>
#include <vector>
#include <map>

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<pair<float,int>> graph[31];
list<edge> E;
map<string,int> 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;
}
Loading