ZZUOJ 10437 小d的翻轉遊戲

2021-07-09 01:10:32 字數 1619 閱讀 1549

小d同學最近在翻轉棋的遊戲,這個棋類遊戲的棋子是黑白兩面的,他玩這個遊戲他已經玩了很久了,他覺得沒有什麼新意了,所以他打算換一種玩法。首先他把這些黑色和白色的棋子排在了一條直線上,之後就是他考驗自己的時候了,他會隨機選乙個數k,然後每次翻轉連續的k個棋子,他的目標是把所有的棋子全部變成白色的。但是他的時間有限,他最多有翻轉m次的時間。所以問題來了,他需要你告訴他他能不能按照這個條件下完成他的最後目標。

輸入的第乙個整數t,代表樣例個數,接下來的會有t組樣例。

每組樣例的第一行會有乙個整數k,m,含義如題意所示(1<= k,m <= 100000)。然後是乙個01串,其中0代表白色,1代表黑色。這個01串的長度len不會超過100000。k <= len。

對於每組樣例如果能完成目標輸出「yes」,不然輸出「no」。

3 1 1

1 2 100

01 3 2

111111

yes

no yes

鄭州大學第九屆acm大學生程式設計大賽題目

**:

/*

name: 10437: 小d的翻轉遊戲

author: long_long_ago

date: 17/12/15 15:49

description:

首先因為每個1都是需要翻轉的所以對於每乙個1都必須要翻轉。

同時要求出<=m的步數,所以第乙個k的連續區域開始必須是第乙個1

所以從第乙個1開始的k個長度都翻轉一次。

記錄下來每乙個位置是否翻轉了,然後對於每乙個位置,

只要知道他的前k的位置的翻轉次數就可以知道他當前的狀態是不是最後的狀態。

也就是統計這個翻轉次數的字首和就可以知道。

當乙個位置被翻轉了偶數次就說明他沒有翻轉,當翻轉了奇數次就說明翻轉了。

也就是是說如果這個位置本來是1,前k個的翻轉次數之和是奇數

就說明經過前面的翻轉過程之後他現在的狀態變成了0,也就是他不需要翻轉了,

如果當前是偶數的話,那就說明他前面的翻轉對他沒有影響,

這時候他自己就需要翻轉。

*/#include

#include

#include

#include

#include

#include

#include

#include

#include

#define n 100005

int k, m;

using

namespace

std;

string str;

int dir[n], f[n];

bool fun()

sum += f[i];

if (i - k + 1 >= 0)

}for (int i = len - k + 1; i < len; i++)

return res <= m;

}int main()

if (fun())

cout

<< "yes"

<< endl;

else

cout

<< "no"

<< endl;

}return

0;}

1808 小d的翻轉遊戲

time limit 1 sec memory limit 128 mb submit 116 solved 27 submit status web board 小d同學最近在玩翻轉棋的遊戲,這個棋類遊戲的棋子是黑白兩面的,他玩這個遊戲已經玩了很久了,他覺得沒有什麼新意了,所以他打算換一種玩法。首...

小D的劇場

小d的劇場 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 若你摘得小的星星 你將得到小的幸福 若你摘得大的星星 你將得到大的財富 若兩者都能摘得 你將得到永遠的願望 摘星是罪孽的寬恕 摘星是夜晚的奇蹟...

D 小希的迷宮

上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從房間b走到房間a,為了提高難度,小希希望...