zoukankan      html  css  js  c++  java
  • Codeforces Round #524 (Div. 2) D(思维,构造)

    #include<bits/stdc++.h>
    using namespace std;
    long long dp[107];
    int main(){
        int cnt=1;
        dp[1]=1;
        for(int i=2;i<=1e9;i*=2){
            dp[++cnt]=dp[cnt-1]*4+1;//记录长度为2^cnt的正方形最多能被切割的次数
        }
        //for(int i=1;dp[i]!=0;i++)
            //printf("%lld ",dp[i]);//此处是为什么n>=32就可以稳切割的原因,超出了题目的极限数据
        int t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++){
            int a;
            long long b;
            scanf("%d%lld",&a,&b);
            int tmp=a;
            if(a>=32){
                printf("YES %d ",a-1);//切一次剩下切右下角就行,不会对路径产生影响
                continue;
            }
            long long next=1;
            long long sum=0;
            long long extra=0;
            while(a){
                sum+=next;//记录已经切割的次数
                next=next*2+1;//计算即将切割的次数
                a--;//每切一次就--
                extra+=dp[a]*(next-2);//根据画图得到的路径之外的切割次数
                if(b<sum+next)//此时切这次就搞定,不用继续缩小a了
                    break;
            }
            if(b<=extra+sum)//如果b太大说明这个次数是切不出来的
                printf("YES %d ",a);
            else
                printf("NO ");
        }
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    228. Summary Ranges
    324. Wiggle Sort II
    42. Trapping Rain Water
    工作之后
    279. Perfect Squares
    391. Perfect Rectangle
    351. Android Unlock Patterns
    246. Strobogrammatic Number
    [LeetCode] 75. Sort Colors Java
    [Java] 80. Remove Duplicates from Sorted Array II Java
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10266626.html
Copyright © 2011-2022 走看看