SPOJ PHT Pigeonhole Tower 预处理+二分 || 找规律

1 题意。

看了好一会儿,才看懂。。给出木柴棒的个数,求最高搭几层。

题目链接点这里。

2 分析。

找规律做的,赛后发现别人用的预处理+二分。学习了。

3

a.预处理+二分 ,也很快、100ms+

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
typedef long long ll;
const int maxn=1e6+10;
int t;
ll n;
ll a[maxn]={0,1},b[maxn];
void Ini(){
    a[0]=0;
    a[1]=3;
    for(int i=2;i>1;
            if(a[mid]n){
                r=mid-1;
            }
            else if(a[mid]==n){
                l=mid;
                break;
            }
        }
        printf("Case %d: %d\n",kk,min(l,r));
    }
}

b.找规律 , 80ms

#include 
#include 
#include 
#include 
using namespace std;
int kase;
long long n,res;
int main()
{
    scanf("%d",&kase);
    for(int kk=1;kk<=kase;kk++){
        scanf("%lld",&n);
        res=(-2+(long long)sqrt(4+4*n))/(long long)2;
        printf("Case %d: %lld\n",kk,res);
    }
}


你可能感兴趣的:(ACM,水题)