OneCode(天梯四) D 難度計算(題解)

2021-08-21 19:28:35 字數 1753 閱讀 7884

一碼學程題目鏈結(天梯四d):onecode_tianti_4_d

此題是一道動歸題,本人在寫此題的時候根本沒看出動歸,居然在那shaziyiyangde列舉

結果證明,列舉是肯定不行的(想列舉到一分?這輩子都不可能)

我們可以分情況來看,當然,本題題目已經給出了所有情況:

no.1 所有數字都相同(1難度值)

no.2 數字以差值為1單調遞增或遞減(2難度值)

no.3 數字交替出現(4難度值)

no.4 數字成等差數列(5難度值)

no.5 數字不符合上列規律(10難度值)

細心讀題,我們還可以在題目中發現 「按3至5位數字分割」 的條件

這再次向我們說明了認真審題的重要性 

(我就沒看到這個條件)

已經知道所有情況的可能性,我們就可以做出多個函式來處理這些情況,**實現如下:

int find_same(int b,int e) 

//第一種情況

return 1;

}int find_wall(int b,int e) 

//第三種情況

else 

}return 1;

}int find_stair(int b,int e) 

//第二和第四種情況

以上,真正是處理情況的函式其實只有 find_same 、find_wall 和 find_stair

而 bamderbox 是對它們返回的值進行判斷,再傳給主程式

看到這裡,可能有人會問:「五種情況。這裡加上 bamderbox 也才只有四個函式,不夠啊!」

那你肯定就是沒有認真讀我給出的**了,旁邊都打了注釋了的

(因為第二和四種情況太像了,所以本人將它們使用同乙個函式解決,再加上簡單if就行了)

【重點】本人設立這幾個函式的目的,就是想用它們來檢視a至b中的數為(拼音第二聲)第幾個規律,並在函式bamderbox中返回其難度值

所以我們可以寫出動歸主程式:

int main()

memset(f,9999999,sizeof(f));f[0]=0;

for(int i=3;i<=l;i++)

}cout<

(看這裡的時候要回想下「按3至5位數字分割」 的條件,不然紅色**段會很難看懂的哦~)

所以我們就可以寫出乙個完整的d題ac**啦

#include#include#include

#include

using namespace std;

int mapn[10000001];

int f[1000001];

char ch[10000001];

int l,ans=0;

int find_same(int b,int e)

return 1;

}int find_wall(int b,int e)

else 

}return 1;

}int find_stair(int b,int e)

memset(f,9999999,sizeof(f));f[0]=0;

for(int i=3;i<=l;i++)

{for(int j=3;j<=5;j++)

{if(i

onecode天梯 B 第K大的數

b 第k大的數 時間限制 1000 ms 記憶體限制 131072 kb 提交總數 13 ac總數 11 問題描述 給出乙個包含n個數的數列,現在從這個數列中取出所有子區間中的第k大的數 所有長度大於等於k的子區間 構成乙個新的數列,求這個新的數列的第m大的數是多少?輸入格式 首先,輸入3個數n,k...

D3D學習筆記(四)

光照 光照可分為環境光,漫射光,鏡面光三種 三種顏色的光均可用d3decolorvalue或d3dxcolor來表示,描述光線的顏色時,d3dxcolor中的alpha值將被忽略 材質 材質可用結構d3dmaterial9來表示 typedef struct d3dmaterial9d3dmater...

codevs天梯四色問題

題目 給定n 小於等於8 個點的地圖,以及地圖上各點的相鄰關係,請輸出用4種顏色將地圖塗色的所有方案數 要求相鄰兩點不能塗成相同的顏色 資料中0代表不相鄰,1代表相鄰 分析 好老的題目,基礎dfs即可 const maxn 10 vara array 1.maxn of longint flag a...