#include <cstdlib>
#include <iostream>
#include <stack>
#include "krazki.h"
#include "message.h"
using namespace std;
#define int64_t long long int
const int64_t inf = 0x7FFFFFFFFFFFFFFF;
int main()
{
if( MyNodeId() != 0 )
return 0;
int n = PipeHeight(), m = NumberOfDiscs();
stack<int64_t> pipe;
int64_t minimalOpening = inf;
for( int i = 0; i < n; ++i )
{
int64_t opening = HoleDiameter(i+1);
minimalOpening = min( minimalOpening, opening );
pipe.push( minimalOpening );
}
int64_t maximalDisc = -1;
for( int i = 0; i < m; ++i )
{
int64_t disc = DiscDiameter(i+1);
maximalDisc = max( maximalDisc, disc );
while( !pipe.empty() && pipe.top() < maximalDisc )
pipe.pop();
if( pipe.empty() )
{
cout << "0";
return 0;
}
else if( i != m-1 )
pipe.pop();
else
{
cout << pipe.size();
return 0;
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #include <cstdlib> #include <iostream> #include <stack> #include "krazki.h" #include "message.h" using namespace std; #define int64_t long long int const int64_t inf = 0x7FFFFFFFFFFFFFFF; int main() { if( MyNodeId() != 0 ) return 0; int n = PipeHeight(), m = NumberOfDiscs(); stack<int64_t> pipe; int64_t minimalOpening = inf; for( int i = 0; i < n; ++i ) { int64_t opening = HoleDiameter(i+1); minimalOpening = min( minimalOpening, opening ); pipe.push( minimalOpening ); } int64_t maximalDisc = -1; for( int i = 0; i < m; ++i ) { int64_t disc = DiscDiameter(i+1); maximalDisc = max( maximalDisc, disc ); while( !pipe.empty() && pipe.top() < maximalDisc ) pipe.pop(); if( pipe.empty() ) { cout << "0"; return 0; } else if( i != m-1 ) pipe.pop(); else { cout << pipe.size(); return 0; } } return 0; } |
English