1. 程式人生 > >吃糖果遊戲(tyvj 1567)

吃糖果遊戲(tyvj 1567)

tyvj 1567:

博弈,題目給的資料是不超過1000位,所以這題應該找規律求解。

我是將30以內的sg值值求出來,然後規律就很容易看出來啦。

求sg值:

#include <stdio.h>
#include <string.h>

int sg[100][100];

int getsg(int x, int y)
{
	int i;
	if(sg[x][y] != -1)
		return sg[x][y];
	bool vis[100];
	memset(vis, 0, sizeof(vis));
	for(i = 1; i < x; i++)
		vis[getsg(x - i, i)] = 1;
	for(i = 1; i < y; i++)	
		vis[getsg(y - i, i)] = 1;
	for(i = 0; i < 100; i++)
		if(vis[i] == 0)
			break;
	return sg[x][y] = sg[y][x] = i;
}

int main (void)
{
	memset(sg, -1, sizeof(sg));
	int i, j;
	for(i = 0; i < 100; i++)
		sg[1][i] = sg[i][1] = 1;
	
	for(i = 1; i <= 30; i ++)
		for(j = 1; j <= 10; j++)
			getsg(i, j);
	
	//getsg(20, 20);//開始這樣寫,但是結果不對
	for(i = 1; i <= 30; i ++)
	{
		for(j = 1; j <= 10; j++)
		{
			if(sg[i][j] != 0)
				printf("1 ");
			else
				printf("0 ");
		}
		printf("\n");
	}

	return 0;
}
打出來的結果:
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 0 0 1 1 1 0 0 1 1
1 0 0 1 1 1 0 0 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1

恩 除此之外還有一種思考方式,可以直接找到規律,上面sg函式是以二維來思考的,我們也可以換作一維,那麼n,就代表已經將其中一堆吃完,剩下那一堆將要被分割的糖果數是n。

當n = 1時,先手勝。

當n = 2,因為只能分成(1, 1)(勝, 勝), 所以2是必敗的。

當n = 3,可以分成(2, 1)(敗, 勝),那麼後手在面對(2, 1)這個狀態的時候肯定是吃掉2這堆,留下1這堆,因為通過前面的分析知道分割1可以保證勝利,這樣後手就會贏,所以3是必敗的。

當n = 4時, 可以分成(2, 2)(敗, 敗), (1, 3)(勝, 敗),先手肯定要將兩個必敗態留給對手,所以肯定會選擇分成(2, 2)。

當n = 5時, 可以分成(2, 3)(敗, 敗), (1, 4)(勝, 勝), 先手選擇分成(2, 3)保證對手輸。

也就是說如果n的後繼狀態中有一種分法(a, b),其中a和b都是必敗的,那麼n是必勝的,否則必敗。

………………

推個20或者30的應該就可以看出規律:

1     2     3     4     5     6     7     8     9    10   

1     0     0     1     1     1     0     0     1     1     

11  12   13   14  15   16   17  18   19   20

1     0     0     1     1     1     0     0     1     1       

(做題的時候如果頭腦清楚思維敏捷,這應該也是不錯的方法,但是感覺就是不太適合我_(:з」∠)_)

找到規律就很好寫了~
#include <stdio.h>
#include <string.h>

char a[10010], b[10010];

int yes(char x)
{
	if(x == '1' || x == '4' || x == '5' || x == '6' || x == '9' || x == '10')
		return 1;
	return 0;
}

int f(char x)
{
	if(x == '2' || x == '3' || x == '7' || x == '8')
		return 0;
	return 1;
}

int main (void)
{
	while(scanf("%s %s", a, b) != EOF)
	{//只要判斷最後一位 
		int len1 = strlen(a), len2 = strlen(b);
		if(yes(a[len1 - 1]) || yes(b[len2 - 1]))
			printf("Matrix67\n");
		else
		{
			if(f(b[len2 - 1]) || f(a[len1 - 1]))
				printf("Matrix67\n");
			else
				printf("Shadow\n");		
		}
			
	}
	return 0;
}

相關推薦

糖果遊戲(tyvj 1567)

tyvj 1567: 博弈,題目給的資料是不超過1000位,所以這題應該找規律求解。 我是將30以內的sg值值求出來,然後規律就很容易看出來啦。 求sg值: #include <stdio.h> #include <string.h> int s

糖果(自創小遊戲,不喜勿噴)

#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string.h> #include <time.h> #include &

hdu_1205 糖果

long long sum tdi main ans != true can ret //如果 剩下的人+1 > 最大的人 就是Yes 不然 no#include<cstdio> int q,a[1000010],n,x,maxn; long long s

(遞歸)1944:糖果

htm pan clas return 回來 main tro cin spa 描述 名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名(盒內共有 N 塊巧克力,20 > N >0)。 媽媽告訴名名每天可以吃一塊或者兩塊巧克力。假設名名每天都吃巧克力,問

糖果

輸出 clas 給定 時間 -s for all tdi space 吃糖果 鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1193 時間限制: 1000 ms 內存限制: 65536 KB提交數: 1

國產“雞”遊戲獲監管放行,可《絕地求生》卻活不下去了

絕地求生《絕地求生》全球走紅之後,國產遊戲廠商迅速跟上,目前最為熱門的四大國產“吃雞遊戲”,除《小米槍戰》內測時間在10月18日外,11月初的一周時間內,網易的《荒野行動》《終結者2》啟動內測,騰訊的《光榮使命:使命行動》開啟預約。然而,由於遊戲鼓勵玩家通過暴力殺戮其他玩家,過程較為血腥,因此國家新聞出版廣電

HDU - 1205 糖果

class bits space 是否 std div ont ase 壓力 因為某場比賽某位同學打表沒有打對,而且因為在上一場訓練賽中被寫進了題目裏,他悲痛欲絕,不光在群裏把昵稱改成了 不會打表且沒有去過九裏校區的xxxxx,而且希望通過吃糖來緩解自己的壓力。他非常挑食,

如何禁止遊戲,如何屏蔽局域網用戶玩絕地求生、終結者2、荒野行動等手遊?

alt 圖片 創新 記錄 png 文件 www. 通過 手遊 《絕地求生》(PUBG) 是一款突破性的戰術競技類遊戲,憑借其獨特創新的玩法模式,寫實風格帶來的代入感和沈浸感深受玩家喜愛。目前,吃雞類遊戲深受用戶喜愛,也湧現了一大批的同款端遊和手遊。對於上網行為管理來說,我們

遊戲公司靠外掛賺得盆滿缽滿?遊戲封號100年事件還能這麽看

小工具 函數 ima -h 包括 nor 設置 比較 絕地求生 據報道,2月3日晚,虎牙簽約的XZ戰隊隊長星魂在直播《絕地求生》途中,被藍洞官方“實錘”開掛,直接封號100年。100年太久,估計等不到解封的日子了。不過有一種更為有趣的說法是,藍洞官方在吃雞遊戲上封號,力度之

HDU--1205--糖果

HOHO,終於從Speakless手上贏走了所有的糖果,是Gardon吃糖果時有個特殊的癖好,就是不喜歡將一樣的糖果放在一起吃,喜歡先吃一種,下一次吃另一種,這樣;可是Gardon不知道是否存在一種吃糖果的順序使得他能把所有糖果都吃完?請你寫個程式幫忙計算一下。  Input 第一

搬瓦工香港測評,延遲低/1G頻寬/穩定性高,遊戲加速器

搬瓦工香港是搬瓦工目前提供的唯一一個亞洲機房,香港PCCW線路,三網直連,延遲一般都在50ms左右,1G頻寬,而且非常穩定,不掉包,不跳ping,非常適合做遊戲加速器,以及對速度要求比較高的建站使用者。 原文:搬瓦工香港PCCW線路測評 效能/ping延時/路由/速度 & 搬瓦工香港做遊

遊戲(18.11.24)

吃雞遊戲 Description xxx 吃雞成癮。為此他決定逃課吃雞!但是學校有規定,曠課到一定次數,是不給予期末考的資格的。因此 xxx 決定每門課最多逃兩次。現在告訴你,一個學期有 nnn 節課程,第 iii 節課的科目是 sis_isi​,時間為 tit_iti​。你需要告訴

HDU 1205 糖果(鴿籠原理)

鴿籠原理(也稱抽屜原理)         簡單的表述如下,這個原理看起來非常通俗,好像是在說一句廢話一樣,然而數學就是這樣,總是需要證明一下。         證明是用反證法:假設每個籠子只有一個鴿子,那麼必定有一個鴿子不在籠子裡,和原命題衝突。            另

遊戲跑毒和倍鏡開發

玩了幾天的吃雞遊戲,開始這個遊戲不感冒,現在也覺得不如王者農藥好玩。我屬於佛系吃雞,從落地拿上裝備開始就躲在房間裡不出門直到毒圈縮小。所以基本每次都會被毒圈給毒到。我就突發奇想做了一個毒圈的功能,還有高倍。下面是正文: 先上圖看看效果,主要是功能,至於美工嘛,哈哈一看就是出自

小樂樂糖果

題目描述     小樂樂是一個比較喜歡吃糖豆的小孩子,小樂樂的哥哥大樂樂也同樣愛吃糖豆。 作為一個小孩子,他們永遠覺得誰吃掉了最後一個糖豆,誰吃的糖豆最多。 為了公平起見小樂樂與大樂樂商量吃糖豆的規則如下: 1.  &nb

Home11月24:遊戲

Description xxx 吃雞成癮。為此他決定逃課吃雞!但是學校有規定,曠課到一定次數,是不給予期末考的資格的。因此 xxx 決定每門課最多逃兩次。現在告訴你,一個學期有 n 節課程,第 i節課的科目是 si​,時間為 ti​。你需要告訴 xxx 這個學期他逃課吃雞的最大時間是多少

The Arena——區塊鏈上的遊戲

細數當前的區塊鏈遊戲,型別上以收藏類和策略類為主,即便很多遊戲也加入了戰鬥元素,也大多都是回合制戰鬥的形式。那麼有沒有一款能夠讓人精神高度集中,甚至血脈噴張的即時戰鬥型別的區塊鏈遊戲呢?今天,SpiderStore就帶大家瞭解這樣一款遊戲——The Arena。 登陸游戲後,我們會在遊戲大廳

牛客網——糖果

題目描述 名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名(盒內共有 N 塊巧克力,20 > N >0)。 媽媽告訴名名每天可以吃一塊或者兩塊巧克力。 假設名名每天都吃巧克力,問名名共有多少種不同的吃完巧克力的方案。 例如: 如果N=1,則名名第1天就吃掉它,共有1種方案;

演算法筆記 — 糖果

  題目連結:http://codeup.cn/problem.php?cid=100000583&pid=0 題目描述 名名的媽媽從外地出差回來,帶了一盒好吃又精美的巧克力給名名(盒內共有 N 塊巧克力,20 > N >0)。 媽媽告訴名名每天可以吃一

python - 烏龜遊戲

#pygame 可以設定圖形,這裡不做講解。 遊戲程式設計:按以下要求定義一個烏龜類和魚類並嘗試編寫遊戲 假設遊戲場景為範圍(x,y)為0<=x<=10,0<=y<=10 遊戲生成1只烏龜和10條魚 它們的移動方向均隨機 烏龜的最大移動能力為2(它可以隨機選擇1還是2