【二分】 HDU 2446 Shell Pyramid

题意:很多球组成一个金字塔

第x层有 x*(x+1)/ 2 个球

给你一个S 表示金字塔一层一层数下来的第S个球

它在哪一层  这层中的第几行 第几列

公式 1 : x*(x+1)*(x+2)/ 6

公式 2 :x*(x+1)/ 2

公式1为公式2 的前n项和

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <time.h>;
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define IN   freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 10323;
const int MAXM = 201;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
LL getnum1(LL num)
{
    LL x=num;
    LL y=num+1;
    LL z=num+2;
    if(x%2==0) x/=2;
    else if(y%2==0) y/=2;
    else if(z%2==0) z/=2;

    if(x%3==0) x/=3;
    else if(y%3==0) y/=3;
    else if(z%3==0) z/=3;
    return x*y*z;
}
LL getnum2(LL num)
{
    return num*(num+1)/2;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("in.txt", "r", stdin);
    #endif
    int t;
    LL n;
    scanf("%d",&t);
    while(t--)
    {
        cin>>n;
        LL l=0,r=3810776;//r表示极限了。。
        while(l<=r)//求第几层
        {
            LL mid=(l+r)>>1;//getnum1(3810776)
            if(getnum1(mid)>=n)
                r=mid-1;
            else l=mid+1;
        }
        LL ans1=l;
        n-=getnum1(l-1);
        l=0,r=3810776;
        while(l<=r)//求第几行
        {
            LL mid=(l+r)>>1;
            if(getnum2(mid)>=n)
                r=mid-1;
            else l=mid+1;
        }
        n-=getnum2(l-1);
        LL ans2=l;
        printf("%I64d %I64d %I64d\n",ans1,ans2,n);
    }
}
时间: 2024-12-19 17:40:48

【二分】 HDU 2446 Shell Pyramid的相关文章

HDU 2446 Shell Pyramid(二分查找 数学)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2446 Problem Description In the 17th century, with thunderous noise, dense smoke and blazing fire, battles on the sea were just the same as those in the modern times. But at that time, the cannon ,were e

HDU 5730 - Shell Necklace

题意: 给出连续的1-n个珠子的涂色方法 a[i](1<=i<=n), 问长度为n的珠链共有多少种涂色方案 分析: 可以得到DP方程: DP[n] = ∑(i=1,n) (DP[n-i]*a[i]). 该方程为卷积形式,故 CDQ + FFT CDQ: 将 [l,r] 二分, 先得到[l,mid]的答案,再更新[l,mid]对[mid+1,r]的贡献.   对任意 DP[j](mid+1 <= j <= r), [l,mid] 对其贡献为 ∑(i=l,mid) (DP[i]*a[j

HDU 5730 Shell Necklace(CDQ分治+FFT)

[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5730 [题目大意] 给出一个数组w,表示不同长度的字段的权值,比如w[3]=5表示如果字段长度为3,则其权值为5,现在有长度为n的字段,求通过不同拆分得到的字段权值乘积和. [题解] 记DP[i]表示长度为i时候的答案,DP[i]=sum_{j=0}^{i-1}DP[j]w[i-j],发现是一个卷积的式子,因此运算过程可以用FFT优化,但是由于在计算过程中DP[j]是未知值,顺次计算复杂度是O(

(DP+二分) hdu 3433

A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1273    Accepted Submission(s): 631 Problem Description There are two kinds of tasks, namely A and B. There are N workers and the i

hdu 5730 Shell Necklace —— 分治FFT

题目:http://acm.hdu.edu.cn/showproblem.php?pid=5730 DP式:\( f[i] = \sum\limits_{j=1}^{i} f[i-j] * a[j] \) 因为没有给 \( f[0] \) 赋初值,所以在递归底层令 \( f[l] += a[l] \) 注意多组数据清空数组: 读入 \( s[i] \) 时要取模!! 代码如下: #include<iostream> #include<cstdio> #include<cstr

【AtCoder】【模型转化】【二分答案】Median Pyramid Hard(AGC006)

题意: 给你一个排列,有2*n-1个元素,现在进行以下的操作: 每一次将a[i]替换成为a[i-1],a[i],a[i+1]三个数的中位数,并且所有的操作是同时进行的,也就是说这一次用于计算的a[],是这一次计算之前的那个a[].每一次不操作开头和结尾的两个位置.这样子每一次都会减少2个元素,问你最后剩下的元素是什么. 数据范围: 1<=N<=10^5 思路: 看见这道题正解是二分的时候,简直震惊!(考试的时候一直想的是计算每一项在最终序列中的系数来做). 我们可以二分出一个值x,将所有小于等

hdu 5730 Shell Necklace fft+cdq分治

题目链接 dp[n] = sigma(a[i]*dp[n-i]), 给出a1.....an, 求dp[n]. n为1e5. 这个式子的形式显然是一个卷积, 所以可以用fft来优化一下, 但是这样也是会超时的. 所以可以用cdq分治来优化. cdq分治就是处理(l, mid)的时候, 将dp[l]...dp[mid]对dp[mid+1]...dp[r]做的贡献都算出来. #include <bits/stdc++.h> using namespace std; #define pb(x) pus

图论 500题——主要为hdu/poj/zoj

转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i

hdu图论题目分类

=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 基础并查集★ 1325&&poj1308 Is It A Tree? 基础并查集★ 1856 More is better 基础并查集★ 1102 Constructing Roads 基础最小生成树★ 1232 畅通工程 基础并查集★ 123