Advertisement
Guest User

pic

a guest
Dec 18th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. #include <fstream>
  2. #include <cstring>
  3. #define LL long long
  4. #define INF 9223372036854775804 //LONGLONGMAX
  5. using namespace std;
  6. ifstream fin("pic.in");
  7. ofstream fout("pic.out");
  8. int cer, n, v[51][51], A[51][51];
  9. LL ans1=-1;
  10. void solve1();
  11. void solve2();
  12. LL binSearch(int st, int dr);
  13. int main()
  14. {
  15.     fin>> cer >> n;
  16.     if(cer==1)
  17.         solve1();
  18.     else
  19.         solve2();
  20.     return 0;
  21. }
  22. int maxim(int st, int dr)
  23. {
  24.     int maxx=0;
  25.     for(int i=st; i<=dr; i++)
  26.         if(v[dr][i]>maxx)
  27.             maxx=v[dr][i];
  28.     return maxx;
  29. }
  30. void update(int a)
  31. {
  32.     for(int i=1; i<=a; i++)
  33.         v[a][i]-=A[a][i];
  34. }
  35. bool check(int a)
  36. {
  37.     LL ans;
  38.     memset(A, 0, sizeof(A));
  39.     A[1][1]=a;
  40.     for(int i=1; i<=n; i++)
  41.     {
  42.         int maxx=maxim(1,i);
  43.         ans+=maxx;
  44.         for(int j=1; j<=i; j++)
  45.         {
  46.             A[i][j]+=maxx;
  47.             A[i+1][j]=(A[i][j]-v[i][j]+1)/2;
  48.             A[i+1][j+1]=(A[i][j]-v[i][j])/2;
  49.         }
  50.     }
  51.     for(int i=1; i<=n; i++)
  52.         if(A[n][i]<v[n][i])
  53.             return 0;
  54.     return 1;
  55. }
  56. LL binSearch(LL st, LL dr)
  57. {
  58.     LL mid=(st+dr)/2;
  59.     int verif = check(mid);
  60.     if(verif==1)
  61.         {
  62.             binSearch(st,mid);
  63.             ans1=mid;
  64.         }
  65.     else if(check(mid)==0)
  66.         binSearch(mid,dr);
  67. }
  68. void solve2()
  69. {
  70.     LL s=0, ans2=0;
  71.     for(int i=1; i<=n; i++)
  72.     {
  73.         for(int j=1; j<=i; j++)
  74.         {
  75.             fin >> v[i][j];
  76.             s+=v[i][j];
  77.         }
  78.     }
  79.     /*for(int i=1; i<=n; i++)
  80.     {
  81.         update(i);
  82.         //adaug timpul maxim necesar umplerii tuturor paharelor de pe rand
  83.         int maxx=maxim(1,i);
  84.         ans1+=(maxx*i);
  85.         //scad din timp timpul in care s-a turnat in paharul cel mai mare
  86.         //ans1-=A[i][maxx];
  87.         //adaug apa in pahare si scurg apa pe urmatorul rand
  88.         for(int j=1; j<=i; j++)
  89.         {
  90.             A[i][j]+=maxx;
  91.             A[i+1][j]+=((A[i][j]-v[i][j]+1)/2);
  92.             A[i+1][j+1]+=((A[i][j]-v[i][j])/2);
  93.         }
  94.     }*/
  95.     binSearch(1LL,INF);
  96.     ans2=ans1-s;
  97.     fout << ans1 <<" "<<ans2;
  98. }
  99. void solve1()
  100. {
  101.     int s=0, smax=0, a, ans=0;
  102.     for(int i=1; i<=n; i++)
  103.     {
  104.         s=0;
  105.         for(int j=1; j<=i; j++)
  106.         {
  107.             fin >> a;
  108.             s+=a;
  109.         }
  110.         if(s>smax)
  111.         {
  112.             smax=s;
  113.             ans=i;
  114.         }
  115.     }
  116.     fout << ans;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement