牛客練習賽44 B 小y的線段 (思維)

2022-05-03 12:39:26 字數 1699 閱讀 8117

題目描述

給出n條線段,第i條線段的長度為a_iai​

,每次可以從第i條線段的j位置跳到第i + 1條線段的j+1位置。如果第i+1條線段長度不到j+1,那麼就會回到第i條線段的0位置,然後繼續跳。

問從第i條線段的0位置跳到第n條線段需要跳多少次

為了減少輸入量,a陣列將由以下方式得到

unsigned int sa, sb, sc;

int mod;

unsigned int rand()

int main()

輸入描述:

第一行兩個正整數n,mod,表示一共有n條線段

第二行3個數字,分別為sa,sb,sc

輸出描述:

一行乙個數字,表示從每條線段跳到n的次數之和。

示例1輸入

複製5 5

5 6 4

輸出複製

13思路:

假設每乙個a[i] 都無限長的話, 那麼ans = n * ( n-1 ) / 2

然後我們思考多出的跳躍是從**來的呢?

是當如果第i+1條線段長度不到j+1,那麼就會回到第i條線段的0位置,這裡就會多跳一次。

那麼我們可以知道,如果乙個位置i,走到第j個線段會跳到0位置的話,那麼i以上的所有線段都會因為i到j 之間線段長度的限制多跳躍一次, (可以畫圖理解一下。)

然後我們就可以 從後向前倒推,看那些i符合上面的情況,對答案做累加即可。

細節見**:

#include #include #include #include #include #include #include #include #include #include #include #define all(x) (x).begin(), (x).end()

#define sz(a) int(a.size())

#define all(a) a.begin(), a.end()

#define rep(i,x,n) for(int i=x;i#define pll pair#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

#define ms0(x) memset((x), 0, sizeof((x)))

#define msc0(x) memset((x), '\0', sizeof((x)))

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define eps 1e-6

#define gg(x) getint(&x)

#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<> 5;

sa ^= sa << 1;

unsigned int t = sa;

sa = sb;

sb = sc;

sc ^= t ^ sa;

return sc;

}int main()

ll ans=(n*(n-1))/2;

ll x=a[n];

for(int i=n-1;i>=1;--i)

if(!x)

}cout<= '0' && ch <= '9')

} else

}}

牛客練習賽44 小y的線段 思維

題目描述 給出n條線段,第i條線段的長度為 ai 每次可以從第 i 條線段的j位置跳到第 i 1 條線段的 j 1 位置。如果第 i 1 條線段長度不到j 1,那麼就會回到第 i 條線段的 0 位置,然後繼續跳。問從第 i 條線段的 0 位置跳到第 n 條線段需要跳多少次。解題思路 題目上的 n 的...

牛客練習賽44 A 小y的序列 模擬

小y有一塊長度為n的布匹。顏色全部為0。他要給這個布匹染色。他總共有m種染料。小y認為一種染料用多次是不和諧的。所以每種染料會被用剛好一次。也就是說小y要給這塊布匹染m次色。第i次會把li到ri這個區間染成顏色i。現在給出最終布匹每段的顏色。請你輸出一種染色方案。資料保證有解 輸入共兩行。第一行兩個...

牛客練習賽44 A 小y的序列 (模擬,細節)

小y的序列 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k special judge,64bit io format lld 題目描述 小y有一塊長度為n的布匹。顏色全部為0。他要給這個布匹染色。他總共有m種染料。小y認為一種染料用多次是不和諧的。所以每...