Δυστυχώς δεν κατάφερα να ερθω στην τελική φάση λόγω υποχρεώσεων αλλά έλυσα τα προβλήματα τα οποία νομίζω ότι ήταν απο τα πιο βατα των τελευταίων χρόνων. Το τελευταίο μου πήρε περισσότερη ώρα να καταλάβω τι ζητούσε παρά να το λύσω...
Y.Γ: Είναι σχετικά πρόχειρες υλοποιήσεις και απέχουν απο το να χαρακτηριστούν βελτιστές αλλα δουλεύουν.
Κώδικας: Επιλογή όλων
/*
Task : Hydrologis
*/
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
inline double fac ( double n){
double t=1;
for(int i=1;i<=n;i++)
t=t*i;
return t;
}
inline double sum (double n){
return (n*(n+1))/2;
}
double V (double a,double b, double N,double M,double Vg){
return Vg + a*fac(N)/1000000 - b*sum(M);
}
int main (){
ifstream in ("hydrologis.in");
ofstream out ("hydrologis.out");
double N,M,a,b,Vg;
in>>N>>M>>Vg>>a>>b;
out<<(unsigned long int)round(V(a,b,N,M,Vg))<<endl;
}
Κώδικας: Επιλογή όλων
/*
Task: Aegean
*/
#include <fstream>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <map>
using namespace std;
struct ship {
int x,y;
ship(int a,int b):x(a),y(b){}
ship(){}
};
typedef unsigned long int ulint;
typedef ship point;
bool operator < (const ship & a,const ship & b){
return a.x<b.x;
}
vector <ship> ships;
map <ulint,ulint> ant1x,ant1y;
ulint N,M;
int main (){
ifstream in ("aegean.in");
ofstream out ("aegean.out");
in>>N;
for(int i=0;i<N;i++){
ulint x,y;
in>>y>>x;
ships.push_back(ship(x,y));
}
ulint M=0;
for(int i=0;i<N;i++)
if(ships[i].x> M )
M=ships[i].x;
else if( ships[i].y> M )
M=ships[i].y;
for(int i=0;i<N;i++){
ant1x[ ships[i].x] = max(ant1x[ ships[i].x], (ulint)(M- ships[i].y +1) );
ant1y[ ships[i].y] = max(ant1y[ ships[i].y], (ulint)(M- ships[i].x +1) );
}
out<<M<<endl;
out<<ant1y.size()<<" "<<ant1x.size()<<endl;
map <ulint,ulint>::iterator ity= ant1y.begin();
map <ulint,ulint>::iterator itx= ant1x.begin();
vector <point> fx;
vector <point> fy;
for(;ity!=ant1y.end();ity++)
fx.push_back(point((*ity).first,(*ity).second));
for(;itx!=ant1x.end();itx++)
fy.push_back(point((*itx).first,(*itx).second));
sort(fx.begin(),fx.end());
sort(fy.begin(),fy.end());
for(int i=0;i<fx.size();i++)
out<<fx[i].x<<" "<<fx[i].y<<endl;
for(int i=0;i<fy.size();i++)
out<<fy[i].x<<" "<<fy[i].y<<endl;
out.close();
in.close();
return 0;
}
Κώδικας: Επιλογή όλων
/*
Task: Cpu
*/
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int N,M;
int K=0;
vector <pair<int,int> > connectionsOUT;
vector <pair<int,int> > connectionsIN;
inline bool isBetween (int left, int right, int n){
if( left<=n && right>=n)
return 1;
return 0;
}
inline bool crossovers (int left,int right,int l,int r){
return !(( isBetween(left,right,l) && isBetween(left,right,r) ) || (!isBetween(left,right,l) && !isBetween(left,right,r))) ;
}
inline bool isOutOK (int l,int r){
for(int i=0;i<connectionsOUT.size();i++)
if(crossovers(connectionsOUT[i].first,connectionsOUT[i].second,l,r))
return 0;
return 1;
}
inline bool isInOK (int l,int r){
for(int i=0;i<connectionsIN.size();i++)
if(crossovers(connectionsIN[i].first,connectionsIN[i].second,l,r))
return 0;
return 1;
}
int main (){
ifstream in ("cpu.in");
ofstream out ("cpu.out");
in>>N>>M;
int l,r;
in>>l>>r;
connectionsOUT.push_back( pair<int,int>(min(l,r),max(l,r)));
while(!in.eof() ){
in>>l>>r;
if( isOutOK(l,r) )
connectionsOUT.push_back( pair<int,int>(min(l,r),max(l,r)));
else if (isInOK(l,r))
connectionsIN.push_back( pair<int,int>(min(l,r),max(l,r)));
else
break;
}
out<<connectionsOUT.size()+connectionsIN.size()<<endl;
}