2021年1月30日个人赛补题报告

C题:

这个题的数据开到了10^18,很明显不能暴力。正确的做法是从1到n进行二分查找,对于每一个查找的值进行暴力模拟。之前只是单纯的写过二分算法,但并没有在实际做题中应用过。

代码如下:

#include<iostream>

#include<algorithm>

#include<map>

#include<set>

#include<stack>

using namespace std;

#define ll long long

ll n;

ll f(ll x)

{

    ll i,j,k;

    ll tem=n;

    ll sum=0;

    while(tem>0)

    {

        if(tem<x)

        {

            sum+=tem;

            tem-=tem;

        }

        else

        {

            tem-=x;

            sum+=x;

        }

        if(tem>=10)

        {

            ll chi=tem/10;

            tem-=chi;

        }

    }

    return sum;

}

int main()

{

    ll i,j,k;

    cin>>n;

    ll l,r;

    l=1;

    r=n;

    ll mid=(l+r)/2;

    ll p;

    if(n&1)

    {

        p=(n+1)/2;

    }

    else

    {

        p=n/2;

    }

    while(l<r)

    {

        mid=(l+r)/2;

      if(f(mid)>=(n+1)/2)

      {

          r=mid;

      }

      else

      {

          l=mid+1;

      }

    }

    cout<<r<<endl;

    return 0;

}

D题:

原文地址:https://www.cnblogs.com/chengxvzhishen/p/14366501.html