Shell Pyramid【数学+二分】

Shell Pyramid
时间限制: 1 Sec 内存限制: 128 MB
提交: 291 解决: 95
[提交] [状态] [命题人:admin]
题目描述
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 extremely simple. It was just like an iron cylinder, with its rearward end sealed and forward end open. There was a small hole at the rearward end of it, which was used to install the fuse. The cannons on the warships were put on small vehicles which had four wheels and the shells were iron spheres with gunpowder in them.

At that time, it was said that there was an intelligent captain, who was also a mathematician amateur. He liked to connect everything him met to mathematics. Before every battle, he often ordered the soldiers to put the shells on the deck and make those shells to form shell pyramids.

Now let’s suppose that a shell pyramid has four layers, and there will be a sequence of ordinal numbers in every layer. They are as the following figure:

In the figure, they are the first layer, the second layer, the third layer and the fourth layer respectively from the left to the right.

In the first layer, there is just 1 shell, and its ordinal number is 1. In the second layer, there are 3 shells, and their ordinal numbers are 1, 2, and 3. In the third layer, there are 6 shells, and their ordinal numbers are 1, 2, 3, 4, 5, and 6. In the fourth layer, there are 10 shells, and their ordinal numbers are shown in the figure above.

There are also serial numbers for the whole shell pyramid. For example, the serial number for the third shell in the second layer is 4, the serial number for the fifth shell in the third layer is 9, and the serial number for the ninth shell in the fourth layer is 19.

There is also a interrelated problem: If given one serial number s, then we can work out the s th shell is in what layer, what row and what column. Assume that the layer number is i, the row number is j and the column number is k, therefore, if s=9, then i=4, j=4 and k=3.

Now let us continue to tell about the story about the captain.
A battle was going to begin. The captain allotted the same amount of shells to every cannon. The shells were piled on the deck which formed the same shell pyramids by the cannon. While the enemy warships were near, the captain ordered to fire simultaneously. Thunderous sound then was heard. The captain listened carefully, then he knew that how many shells were used and how many were left.

At the end of the battle, the captain won. During the break, he asked his subordinate a question: For a shell pyramid, if given the serial number s, how do you calculate the layer number i, the row number j and column number k?

输入
For a shell pyramid which is big enough, a integer is given, and this integer is the serial number s(s<2^63). There are several test cases. Input is terminated by the end of file.

输出
For each case, output the corresponding layer number i, row number j and column number k.

样例输入
复制样例数据
2
19
75822050528572544
样例输出
4 4 3
769099 111570 11179

题目大意:
已知第一层有1个球,第二层有3个球,第三层有6个球,并将第一层的球编号为1,则依次后推,第二层从上到下,从左到右分别是2,3,4,依次后推。现在给你球的编号n,问它是在哪一层的哪一行哪一列上。

解题思路:
首先我们假设每一层球的个数为num[i]num[i]num[i]
则:num[i]=i∗(i+1)/2num[i]=i*(i+1)/2num[i]=i(i+1)/2
并假设前nnn层球的个数总和为sum[n]sum[n]sum[n]
则:sum[n]=num[1]+num[2]+⋯+num[n]sum[n]=num[1]+num[2]+\dots +num[n]sum[n]=num[1]+num[2]++num[n]
⇒sum[n]=1×22+2×32+⋯+n×(n+1)2\Rightarrow sum[n]=\frac{1\times 2}{2}+\frac{2\times 3}{2}+\dots+\frac{n\times(n+1)}{2}sum[n]=21×2+22×3++2n×(n+1)
⇒sum[n]×2=1×2+2×3+⋯+n×(n+1)\Rightarrow sum[n]\times2=1\times2+2\times3+\dots+n\times(n+1)sum[n]×2=1×2+2×3++n×(n+1)
⇒sum[n]×2=(1+12)+(2+22)+⋯+(n+n2)\Rightarrow sum[n]\times2=(1+1^2)+(2+2^2)+\dots+(n+n^2)sum[n]×2=(1+12)+(2+22)++(n+n2)
⇒sum[n]×2=12+22+⋯+n2+1+2+⋯+n\Rightarrow sum[n]\times2=1^2+2^2+\dots+n^2+1+2+\dots+nsum[n]×2=12+22++n2+1+2++n
⇒sum[n]×2=n×(n+1)(2n+1)6+n×(n+1)2\Rightarrow sum[n]\times2=\frac{n\times(n+1)(2n+1)}{6}+\frac{n\times(n+1)}{2}sum[n]×2=6n×(n+1)(2n+1)+2n×(n+1)
⇒sum[n]=n×(n+1)(n+2)6\Rightarrow sum[n]=\frac{n\times(n+1)(n+2)}{6}sum[n]=6n×(n+1)(n+2)
所以由前缀和公式我们可以二分找出nnn在哪一层
而每层又是一个首项为111公差为111的等差数列,因此在二分找出nnn在哪一行即可。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
int main() 
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);int T;scanf("%d",&T);while(T--) {ll n;scanf("%lld",&n);ll l=1,r=10000000;ll ans=0;while(r-l>1) {ll mid=(l+r)>>1;ll num=mid*(mid+1)/2*(mid+2)/3;ll num1=(mid+1)*(mid+2)/2*(mid+3)/3;if(n>num&&n<=num1) {ans=mid+1;break;}else if(n>num1) {l=mid;}else if(n<=num) {r=mid;}}if(n==1) ans=1;if(n>1&&n<=4) ans=2;ll nape=(ans-1)*ans/2*(ans+1 )/3;nape=n-nape;l=1,r=ans;//cout<<ans<<" "<<nape<<endl;while(l<r) {ll mid=(r+l)>>1;ll num=(mid+1)*mid/2;if(num<nape) l=mid+1;else r=mid;}//cout<<r<<endl;ll hang=r;ll lie;nape=nape-(hang-1)*hang/2;lie=nape;printf("%lld %lld %lld\n",ans,hang,lie);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Degree Sequence of Graph G【模拟】

Degree Sequence of Graph G 时间限制: 1 Sec 内存限制: 128 MB 提交: 362 解决: 92 [提交] [状态] [命题人:admin] 题目描述 Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he has deep lov…

Simple Addition expression【打表+二分】

Simple Addition expression 时间限制: 1 Sec 内存限制: 128 MB 提交: 355 解决: 80 [提交] [状态] [命题人:admin] 题目描述 A luxury yacht with 100 passengers on board is sailing on the sea in the twilight. The yacht is ablaze with lights and there comes out laug…

洛谷P2622 关灯问题II【状压dp+bfs】

P2622 关灯问题II 题目描述 现有n盏灯&#xff0c;以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮&#xff0c;对于所有的灯都有一个效果。按下i按钮对于第j盏灯&#xff0c;是下面3中效果之一&#xff1a;如果a[i][j]为1&#xff0c;那么当这盏灯开了的时候&am…

洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压dp】

P1879 [USACO06NOV]玉米田Corn Fields 时间限制 1.00s 内存限制 125.00MB 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number…

LEAGUE TABLES【模拟】

LEAGUE TABLES 时间限制: 1 Sec 内存限制: 128 MB 提交: 349 解决: 150 [提交] [状态] [命题人:admin] 题目描述 League football (known in some circles as soccer) has been played in England since 1888 and is the most popular winter game through most of Europe, jus…

MUSICAL CHAIRS【模拟】

MUSICAL CHAIRS 时间限制: 1 Sec 内存限制: 128 MB 提交: 386 解决: 76 [提交] [状态] [命题人:admin] 题目描述 Musical chairs is a game frequently played at children’s parties. Players are seated in a circle facing outwards. When the music starts, the players h…

Bomb HDU - 3555【数位dp】

Bomb HDU - 3555 The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49”, the power…

不要62 HDU - 2089【数位dp】

不要62 HDU - 2089 杭州人称那些傻乎乎粘嗒嗒的人为62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可…

PACKING【二维01背包】

PACKING 时间限制: 1 Sec 内存限制: 128 MB 提交: 278 解决: 24 [提交] [状态] [命题人:admin] 题目描述 It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulti…

机器人军团【动态规划】

机器人军团 时间限制: 1 Sec 内存限制: 64 MB 提交: 279 解决: 139 [提交] [状态] [命题人:admin] 题目描述 邪狼&#xff1a;“怎么感觉这些机器人比我还聪明&#xff1f;不是说人工智能永远不能超越人类吗&#xff1f;” 天顶星人&#xff1a;“你们真是目光短浅&#xff0c…

【动态规划】抄近路

【动态规划】抄近路 时间限制: 1 Sec 内存限制: 64 MB 提交: 105 解决: 68 [提交] [状态] [命题人:admin] 题目描述 “最近不知道怎么回事&#xff0c;感觉我们这个城市变成了一个神奇的地方&#xff0c;有时在路上走着走着人就消失了&#xff01;走着走着突然又有人出现了&…

【动态规划】魔法石矿

【动态规划】魔法石矿 时间限制: 1 Sec 内存限制: 64 MB 提交: 116 解决: 27 [提交] [状态] [命题人:admin] 题目描述 为了找到回家的路&#xff0c;张琪曼施展魔法&#xff0c;从高维空间召唤出了一种叫作“读者”的生物&#xff0c;据说“读者”这种生物无所不能&#xff0c;…

Knapsack Cryptosystem【折半+查找】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/D 来源&#xff1a;牛客网 Amy asks Mr. B problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack cryptosystem. Please help it. Given an array {ai} wi…

All men are brothers【并查集+数学】

链接&#xff1a;https://ac.nowcoder.com/acm/contest/889/E 来源&#xff1a;牛客网 题目描述 Amy asks Mr. B problem E. Please help Mr. B to solve the following problem. There are n people, who don’t know each other at the beginning. There are m turns. In e…

Light bulbs【差分】

19.98% 1000ms 8192K There are NN light bulbs indexed from 00 to N-1N−1. Initially, all of them are off. A FLIP operation switches the state of a contiguous subset of bulbs. FLIP(L, R)FLIP(L,R)means to flip all bulbs xx such that L \leq x \leq RL≤x≤R. S…

Digit sum【暴力+打表】

Digit sum 33.57% 2000ms 131072K A digit sum S_b(n)S b ​ (n) is a sum of the base-bb digits of nn. Such as S_{10}(233) 2 3 3 8S 10 ​ (233)2338, S_{2}(8)1 0 0 1S 2 ​ (8)1001, S_{2}(7)1 1 1 3S 2 ​ (7)1113. Given NN and bb, you need to calcu…

P1040 加分二叉树【dp+深搜】

题目描述 设一个nn个节点的二叉树tree的中序遍历为&#xff08;1,2,3,…,n1,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第ii个节点的分数为di,treedi,tree及它的每个子树…

Helloworld【C#】

c#Helloworld 题目描述 请输出样例所示内容 输出 样例输出 ********** Hello,world! ********** using System;namespace ConsoleApp1 {class Program{static void Main(string[] args){Console.WriteLine("**********");Console.WriteLine("Hello,world!&…

判断闰年【C#】

判断闰年 题目描述 使用C#编写一个控制台应用。输入-一个年份&#xff0c;判断是否润年(被4整除&#xff0c;且不被100整除&#xff0c;或者被400整除)。 是闰年输出yes&#xff0c;不是输出no 输入 一个年份 输出 yes或者no 样例输入 1996 样例输出 yes using Syst…

采用递归求第n位数【C#】

题目描述 一数列的规则如下&#xff1a;1、1、2、3、5、8、13、21、34......。求第n位数是多少&#xff1f; 输入 输入一个正整数&#xff0c;代表求第几位数字 输出 输出第n位数字 样例输入 30 样例输出 832040 提示 输入数字必须大于零 using System;namespace C…