无尽

The road ahead will be long. Our climb will be steep.

UOJ 133 [UR #9]电路手动分析

二分。

刚开始做这题的时候,只是脑补出了这种做法,直觉告诉我它应该是对的,但并不会证明。
抱着试试看的心态打了一发,居然A了……

题解:http://vfleaking.blog.uoj.ac/blog/694

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
    long long n, m, r, left, right;
    scanf("%lld%lld%lld",&n,&m,&r);
    left=1, right=n*m;
    if(!r)
    {
        return !printf("%lld\n",min(n*m,2ll));
    }
    else if(n==1||m==1)
    {
        while(left<right)
        {
            long long mid=(left+right+1)>>1;
            if((mid-1)*(mid-2)/2<=r)left=mid;
            else right=mid-1;
        }
    } 
    else
    {
        while(left<right)
        {
            long long mid=(left+right+1)>>1, pre, s, h;
            s=sqrt(mid);
            h=mid-s*s;
            if((s+1*(h!=0))<=n && (s+1*(h!=0))<=m)
            {
                pre=2*(s-1)*(s-1)+2*s-2;
                if(h)pre+=(h-1)*2+1;
                if(h>s)pre+=(h-s-1)*2+1;
            }
            else
            {
                s=min(n,m);
                h=mid/s;
                pre=2*(s-1)*(h-1)+s+h-2;
                h=mid%s;
                if(h)pre+=(h-1)*2+1;
            }
            if(1.0*mid*(mid-1)/2<=r+pre)left=mid;
            else right=mid-1;
        }
    }
    printf("%lld\n",left);
    return 0;
} 
阅读更多
版权声明:本文为蒟蒻原创文章,应该没什么人会转载的,要转载就注明出处并且在下方评论区吱一声吧。 https://blog.csdn.net/ziqian2000/article/details/52373587
文章标签: UOJ-133
个人分类: 其它-二分/三分
上一篇UOJ 13 [UER #1]跳蚤OS
下一篇BZOJ 4590 [Shoi2015]自动刷题机
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭