彈飛DZY(思維,打表,還沒過全,先放著)

2022-03-29 02:37:55 字數 1405 閱讀 6588

彈飛dzy

description

某天,機智的zzc發明了一種超級彈力裝置,為了在他的朋友dzy面前顯擺,他邀請dzy一起玩個遊戲。遊戲一開始,zzc在地上沿著一條直線擺上n個裝置,每個裝置設定初始彈力係數ki,當dzy達到第i個裝置時,他會往後彈ki步,達到第i+ki個裝置,若不存在第i+ki個裝置,則dzy被彈飛。智商為10的dzy想知道當他從第i個裝置起步時,被彈幾次後會被彈飛。為了使得遊戲更有趣,zzc可以修改某個彈力裝置的彈力係數,任何時候彈力係數均為正整數。

input

第一行包含乙個整數n,表示地上有n個裝置,裝置的編號從0到n-1,接下來一行有n個正整數,依次為那n個裝置的初始彈力係數。第三行有乙個正整數m,接下來m行每行至少有兩個數i、j,若i=1,你要輸出從j出發被彈幾次後被彈飛,若i=2則還會再輸入乙個正整數k,表示第j個彈力裝置的係數被修改成k。對於20%的資料n,m<=10000,對於100%的資料n<=200000,m<=100000

output

對於每個i=1的情況,你都要輸出乙個需要的步數,佔一行。

sample input

41 2 1 1

31 1

2 1 1

1 1sample output23

題解:資料很大,想著打個表,根據改變的數,改變表中的值,temp=temp+p[temp]根據temp推不出前面乙個的值;就這點暴力了,但是沒什麼用,還是wa了一部分資料;想著用乙個vector陣列儲存可以到達temp的所有前乙個位置,但是每乙個都有好多前乙個位置,只能遞迴了,好複雜,還是這樣扔著吧,這題得80多分,證明有一部分資料很大;

wa**:

#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

#define si(x) scanf("%d",&x)

#define sl(x) scanf("%lld",&x)

#define pi(x) printf("%d",x)

#define pl(x) printf("%lld",x)

#define mem(x,y) memset(x,y,sizeof(x))

#define p_ printf(" ")

typedef long long ll;

const int maxn=200010;

int p[maxn];

int dp[maxn];

int main()

for(int i=0;idp[i]=x;

} si(m);

int a,b,c;

while(m--)

dp[b]=x;

for(int i=0;i<=b;i++)}}

} }return 0;

}

DZY的根 思維水

dzy的根 問題描述 dzy是個沒有根的人,他十分想要有根,這樣才能。智商爆表的計算機大神wjc決定再幫幫他,他用程式製造了n個根 有生命的根!這n個根和wjc一樣都十分機智,他們要參加西洋棋比賽,該比賽要進行k場對弈。每個根最多參加兩場對弈,最少參加零場對弈。每個根都有乙個與其他根都不相同的等級 ...

Bounce 彈飛綿羊

bounce 彈飛綿羊 分塊 將整個大區間分成若干塊,每個點維護到下乙個塊需要跳的次數以及會跳到哪個點 分塊要注意細節,區間開閉容易弄亂 如下 1 include2 include3 include4 include5 define b int sqrt n 6 define n 200000 7u...

hnoi2010 彈飛綿羊

題目描述很明確,現在的目標是均攤兩個操作的複雜度 現在我們已知有兩種方法 1.每次用o 1 的時間修改k值,用o n 的時間直接模擬回答詢問 2.每次修改了k值後用o n 的時間更新所有答案,o 1 時間回答 均攤這兩種操作,可以這樣做 由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部...