1. 程式人生 > >HDU_6154 CaoHaha's staff 【規律打表】

HDU_6154 CaoHaha's staff 【規律打表】

題目連結

題目描述

在一個二維座標系中,想要得到一塊為n的面積,問最少在座標軸上面畫多少筆畫可以得到這樣的面積,筆畫可以是上、下、左、右、兩種對角線共六種。

解題思路

規律題,打表求出筆畫為n時可以得到最大的面積,然後在找的過程周找到大於等於n的最小的下標即可。
核心是一個找邊長為根號√2倍數的菱形(正方形)。然後從第一個菱形邊長為√2開始一點一點擴充套件,即可找出規律。規律可參考程式碼部分。
補充一下找規律的步驟:

看上圖黑色的正方形為第一個長為 √2 的菱形,也就是起始位置。

  • 所以我們先將DB[4] = 2,也就是邊長為4的最大為面積為2
  • 緊接著畫5條邊構成的最大面積,也就是紅色的那條線,面積比第4條邊多了0.5,這時候我們賦值x1為0.5。由此可以推斷DB[5] = DB[5 - 1] + x1。
  • 6條邊:為藍色的邊,面積比4條邊多了2.0,這時候我們賦值x2為2.0。由此可以推斷 DB[6] = DB[5 - 2] + x2。
  • 7條邊:為綠色的邊,面積比6條邊多了1.5,這時候我們知道之前的x1 = x1 + 1.0。由此推斷DB[7] = DB[7 - 1] + x1;
  • 8條邊:為橙色的邊,面積比6條邊多了4.0,這時候我們知道之前的x2 = x2 + 2.0。由此推斷DB[8] = DB [8 - 2] + x2;
  • 再接著往下就是和上面的一樣,每次加四條邊就是一個迴圈。自己拿筆畫一下就可以得出答案了。

程式碼部分

#include <iostream>
#include <string>
#include <string.h> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5; double DB[maxn]; int main() { ios::sync_with_stdio(false); double x1 = 0.5, x2 = 2; DB[4] = 2; for(int i = 5; i <= maxn ; ++ i) { if(i % 4 == 1)DB[i] = DB[i - 1
] + x1, x1 += 1.0; if(i % 4 == 2)DB[i] = DB[i - 2] + x2, x2 += 2.0; if(i % 4 == 3)DB[i] = DB[i - 1] + x1; if(i % 4 == 0) DB[i] = DB[i - 2] + x2; } int t; cin >> t; while(t --) { double n; cin >> n; for(int i = 4; i <= maxn; ++ i) { if(DB[i] >= n) { cout << i << endl; break; } } } return 0; }

相關推薦

HDU_6154 CaoHaha's staff 規律

題目連結 題目描述 在一個二維座標系中,想要得到一塊為n的面積,問最少在座標軸上面畫多少筆畫可以得到這樣的面積,筆畫可以是上、下、左、右、兩種對角線共六種。 解題思路 規律題,打表求出筆畫為n時可以得到最大的面積,然後在找的過程周找到

HDU - 2089 不要62 暴力數位DP

不要62 HDU - 2089 題意 求區間【n,m】之間有多少個數字不含4或者連續的62 解法1 由於資料範圍是0~1e6,所以直接暴力判斷每一位數字是否含有4或者62,然後求字首和即可 #include<stdio.h> #include<algo

HDU 6154 CaoHaha's staff數學規律

【中文題意】給你一個面積,問你最少可以用多少條邊圍成一個圖形的面積大於或等於給出的面積。邊可以是1cm,也可以是sqrt(2)cm。 【思路分析】畫圖畫了N久,網路賽的時候和餅乾手推推到了20多,

Hrubst 1391 Orz odd暴力規律啊!

Orz odd Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 21(9 users) Total Accepted: 8(7 users) Rating:  Special Judge: No Des

hrbust 1328 相等的最小公倍數暴力規律

相等的最小公倍數 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 486(156 users) Total Accepted: 185(133 users) Rating:  Special Judge: 

hdu 5512 Pagodas暴力+找規律

Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 979    Accepted Submiss

Number Sequence +規律

Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 63052    Accept

hdoj 4548 美素數

scan == mit return else 多少 -1 time 另類 另類打表:將從1到n的滿足美素數條件的數目賦值給prime[n],這樣最後僅僅須要用prime[L]減去prime[R-1]就可以; 美素數 Time Limit: 3000/1000 MS (

分塊bzoj 3758 數數

inpu 綜合 前綴和 lan 不能 art -1 esc ref 【題目描述】 Description 神犇最近閑來無事,於是就思考哲學,研究數字之美。在神犇看來,如果一個數的各位能夠被分成兩個集合,而且這兩個集合裏的數的和相等,那麽這個數就是優美的(具體原因就只有神犇才

HDU4548 美素數前綴和

cas 包括 各位數之和 tar rip desc tdi memory pro 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4548 美素數

ACM-ICPC 2018 南京賽區網絡預賽 - J. Sum (找規律+)

以及 pre 歐拉 name -i namespace c++ rime names 題意:\(f(i):i\)能拆分成兩個數的乘積,且要求這兩個數中各自都沒有出現超過1次的質因子。每次給出n,求\(\sum_{i=1}^{n}f(i)\) 分析:\(1 \le n \le

2018 ACM-ICPC 青島站 F 找規律

#include<bits/stdc++.h> using namespace std; const int maxn=1025; int dp[maxn][maxn],pre[maxn]; void init(int x1,int y1,int x2,int y2) { i

HDU 5976 Detachment 逆元+

題意:一維的大小可以想象成一條線的長度,二維的大小可以當成矩形的面積,三維的大小可以當成長方體的體積,以此類推,四維就是4個長度相乘,五維就是五個長度相乘,問最大大小是多少; 思路: 比較容易猜測的情況就是,一個線段儘可能的分成多個,分成的小線段兩兩之間差值儘可能小,

CCF NOI1072.爬樓梯遞推

時間限制: 1000 ms  空間限制: 262144 KB  具體限制   題目描述 樹老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數。例如: 樓梯一共有3級,他可以每次都走一級,或者第一次走一級,第二次走兩級,也可以第一次走兩級,第二次走一級,一

組合數學 逆元 HDU

有一個無限大的矩形,初始時你在左上角(即第一行第一列),每次你都可以選擇一個右下方格子,並瞬移過去(如從下圖中的紅色格子能直接瞬移到藍色格子),求到第nn行第mm列的格子有幾種方案,答案對10000000071000000007取模。  Input 多組測試資料。

D. Roman Digits

題意:有1,5,10,50四種數字,問用n個數字,能構成多少個不同的數字?思路:DFS打表觀察#include<bits/stdc++.h> #define PI acos(-1.0) #d

869 A B C E 組合數

A The Artful Expedient Rock… Paper! After Karen have found the deterministic winning (losing?) strategy for rock-paper-scissors,

HDU 5867.Water problem8月20

Water problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 233    Accepted

51NOD 1995 三子棋 思維+圖解

題目來源: syu校賽 基準時間限制:1 秒 空間限制:131072 KB 小的時候大家一定玩過“井”字棋吧。也就是在九宮格中,只要任意行、列,或者任意連續對角線上面出現三個相同的,就能獲勝。現在小明和小花也在玩三子棋,但是他們不是在九宮格里,而是在3×

51Nod-1062 序列中最大的數序列計算+

有這樣一個序列a: a[0] = 0 a[1] = 1 a[2i] = a[i] a[2i+1] = a[i] + a[i+1] 輸入一個數N,求a[0] - a[n]中最大的數。 a[0] = 0, a[1] = 1, a[2] = 1, a[3] = 2, a[4] = 1, a[5] = 3, a[