小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,為了提高難度,小希希望...