題目描述
給出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認為一種染料用多次是不和諧的。所以每...