#include<stdio.h> #include "krazki.h" #include<message.h> #include<algorithm> using namespace std; long long *rura, *klocki, *ile,*dziura; int main() { if(MyNodeId()==0) { int n=PipeHeight(),m = NumberOfDiscs(); rura= new long long [n]; klocki= new long long [m]; ile=new long long [m]; dziura=new long long[m]; rura[0]=HoleDiameter(1); for (int i =1;i<n;i++) { rura[i]=HoleDiameter(i+1); if(rura[i-1]< rura[i]) rura[i] = rura[i-1]; } klocki[0]= DiscDiameter(1); ile[0]=1; int k=0; for (int i=1;i<m;i++) { int a = DiscDiameter(i+1); if(a>klocki[k]) { k++; klocki[k] = a; ile[k]=1; } else { ile[k]++; } } k++; long long cur=0,res=0, prevStop =-1; for (int i = k-1;i>=0;i--) { long long val = klocki[i]; while(rura[cur] >=val && cur<n) { cur++; } cur--; dziura[i] = cur - prevStop- ile[i]; prevStop=cur; } long long sum=0; for (int i =0;i<k-1;i++) { sum-=dziura[i]; if(sum<0) sum=0; } printf("%lld\n", max(0LL,dziura[k-1]-sum+1)); delete [] rura; delete [] klocki; delete [] ile; delete [] dziura; } }
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include<stdio.h> #include "krazki.h" #include<message.h> #include<algorithm> using namespace std; long long *rura, *klocki, *ile,*dziura; int main() { if(MyNodeId()==0) { int n=PipeHeight(),m = NumberOfDiscs(); rura= new long long [n]; klocki= new long long [m]; ile=new long long [m]; dziura=new long long[m]; rura[0]=HoleDiameter(1); for (int i =1;i<n;i++) { rura[i]=HoleDiameter(i+1); if(rura[i-1]< rura[i]) rura[i] = rura[i-1]; } klocki[0]= DiscDiameter(1); ile[0]=1; int k=0; for (int i=1;i<m;i++) { int a = DiscDiameter(i+1); if(a>klocki[k]) { k++; klocki[k] = a; ile[k]=1; } else { ile[k]++; } } k++; long long cur=0,res=0, prevStop =-1; for (int i = k-1;i>=0;i--) { long long val = klocki[i]; while(rura[cur] >=val && cur<n) { cur++; } cur--; dziura[i] = cur - prevStop- ile[i]; prevStop=cur; } long long sum=0; for (int i =0;i<k-1;i++) { sum-=dziura[i]; if(sum<0) sum=0; } printf("%lld\n", max(0LL,dziura[k-1]-sum+1)); delete [] rura; delete [] klocki; delete [] ile; delete [] dziura; } } |