51nod1502 蘋果曼和紙

2022-03-30 12:42:31 字數 1558 閱讀 8866

蘋果曼有很大的一張紙。這張紙的形狀是1×n的長方形。你的任務是幫助蘋果曼來摺疊這一張紙。有一些操作,這些操作有如下兩個種形式:

1. 把這張紙在第pi個位置對折。經過對折後,左邊的1×pi部分會蓋到右邊的1×([當前紙片寬度]-pi)上面。

2. 詢問在如果把距離左端li以內的剪掉,距離左端ri以外的也剪掉,那麼還剩下多少紙片的長度。

看樣例,可以更好的解理這個問題。

第一次摺疊之後,紙片的寬度變成了4,第二次摺疊,紙片的寬度變成了2。

input

單組測試資料。

第一行有兩個整數n和q (1≤n≤10^5; 1≤q≤10^5),表示紙片的寬度和詢問數目。

接下來q行的形式是如下之一:

· "1 pi" (1≤pi

· "2 li ri" (0≤liinput示例

7 41 3

1 22 0 1

2 1 2

output示例43

維護一下每個位置上有多少層紙,每次翻摺的時候,只翻較短的一部分(所以得記一下當前的方向),那麼總共最多隻會有n個位置被翻到別的位置上。

主要是記方向、計算實際位置很麻煩...

我直接分類討論。。當前維護的是否是翻轉後的、當前翻摺操作是否是否會導致翻轉,總共四類。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

#define ll long long

9#define ull unsigned long long

10#define ui unsigned int

11//

#define d double

12#define ld long double

13const

int maxn=100233,modd=1000000007;14

intt[maxn];

15int

i,j,k,n,m;

1617

int ra,fh;char

rx;18 inline int

read()

2425 inline void add(int x,int v)

26 inline int

get(int

x)32 inline int query(int l,int

r)37

38int

main()

41int l,r,stpos=1,rest=n,p;bool rev=0;42

while(m--)else

53else

54if(!rev)else

63 }else

68//

printf(" rest:%d st:%d rev:%d\n",rest,stpos,rev);

69//

for(i=1;i<=rest;i++)printf(" %d",get(stpos+(!rev?i-1:-i+1)));puts("");70}

71 }

view code

51 nod 蘋果曼和樹

1500 蘋果曼和樹 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5 級演算法題 收藏 關注 蘋果曼有一棵 n個點的樹。有一些 至少乙個 結點被標記為黑色,有一些結點被標記為白色。現在考慮乙個包含 k 0 k n 條樹邊的集合。如果蘋果曼刪除這些邊,那麼會將這個樹分成 k ...

51nod 1500 蘋果曼和樹(樹形dp)

題目 思路 分析狀態間的關係 dp u 1 0 代表與u相連的聯通塊是否具有黑點的方案數 注意有刪邊 dp u 1 當u相連的聯通塊具有黑點時,兒子結點v具有黑點與否都可以 當u相連的聯通塊不具有黑點時,兒子結點必須具有黑點 dp u 0 u相連的聯通塊肯定不具有黑點,兒子結點具有黑點與否都可以 i...

51 Nod 1500 蘋果曼和樹(樹形dp)

思路 樹形dp。我們考慮當前結點 i 對於結點 i 它可以屬於它的子樹,也可以不屬於,換句話說,我們可以計算出與 i 結點相連的連通塊中是否具有黑點的方案數。於是,d i 表示包含 i 的連通塊中含有黑點,d i 表示不含有。接下來考慮狀態轉移方程 上面的只是我個人認為的。可能是錯的哈 1 incl...