2016年3月17日 星期四

UVA 10684 The jackPot

int num[10000] ; int main() { int n=0 ; while(scanf("%d",&n)!=EOF) { if( n==0 ) break ; for(int i=0 ; i 0 ) { sum += num[i] ; if( sum > max ) max = sum ; }else{ sum = 0 ; } } if( max > 0) printf("The maximum winning streak is %d.\n", max) ; else printf("Losing streak.\n") ; } }

2016年3月8日 星期二

UVA 532 Dungeon Master

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <queue>
using namespace std ;
int L=0, R=0, C=0 ;
char maze[31][31][31] ;
int dis[31][31][31] ;
char start = 'S' ;
char rock = '#' ;
char road = '.' ;
char out = 'E' ;
char line[31] ;
struct position
{
int x ;
int y ;
int z ;
int minute ;
};

struct position startPosition ;
struct position exitPosition ;

struct position getUpPosition( struct position pos)
{
pos.x++ ;
pos.minute++ ;
return pos ;
}

struct position getDownPosition( struct position pos)
{
pos.x-- ;
pos.minute++ ;
return pos ;
}

struct position getLeftPosition( struct position pos)
{
pos.y++ ;
pos.minute++ ;
return pos ;
}

struct position getRightPosition( struct position pos)
{
pos.y-- ;
pos.minute++ ;
return pos ;
}

struct position getForwardPosition( struct position pos)
{
pos.z++ ;
pos.minute++ ;
return pos ;
}

struct position getBackPosition( struct position pos)
{
pos.z-- ;
pos.minute++ ;
return pos ;
}

void bfs(struct position pos)
{
queue<struct position> myQueue ;
myQueue.push(pos) ;

dis[pos.x][pos.y][pos.z] = pos.minute ;
while( !myQueue.empty() ) {
struct position top = myQueue.front() ;
myQueue.pop() ;
if( top.x + 1 <  L && dis[top.x+1][top.y][top.z]==-1 && maze[top.x+1][top.y][top.z]!=rock ) {
struct position upPos = getUpPosition(top) ;
dis[upPos.x][upPos.y][upPos.z] = upPos.minute ;
myQueue.push(upPos) ;
}
if( top.x - 1 >= 0 && dis[top.x-1][top.y][top.z]==-1 && maze[top.x-1][top.y][top.z]!=rock) {
struct position downPos = getDownPosition(top) ;
dis[downPos.x][downPos.y][downPos.z] = downPos.minute ;
myQueue.push(downPos) ;
}
if( top.y + 1 <  R && dis[top.x][top.y+1][top.z]==-1 && maze[top.x][top.y+1][top.z]!=rock) {
struct position lefPos = getLeftPosition(top) ;
dis[lefPos.x][lefPos.y][lefPos.z] = lefPos.minute ;
myQueue.push(lefPos) ;
}
if( top.y - 1 >= 0 && dis[top.x][top.y-1][top.z]==-1 && maze[top.x][top.y-1][top.z]!=rock) {
struct position rightPos = getRightPosition(top) ;
dis[rightPos.x][rightPos.y][rightPos.z] = rightPos.minute ;
myQueue.push(rightPos) ;
}
if( top.z + 1 <  C && dis[top.x][top.y][top.z+1]==-1 && maze[top.x][top.y][top.z+1]!=rock) {
struct position forwardPos = getForwardPosition(top) ;
dis[forwardPos.x][forwardPos.y][forwardPos.z] = forwardPos.minute ;
myQueue.push(forwardPos) ;
}
if( top.z - 1 >= 0 && dis[top.x][top.y][top.z-1]==-1 && maze[top.x][top.y][top.z-1]!=rock) {
struct position backPos = getBackPosition(top) ;
dis[backPos.x][backPos.y][backPos.z] = backPos.minute ;
myQueue.push(backPos) ;
}
}
}



int main()
{

while ( cin.getline(line,30) ) {
char * p = strtok(line, " \t\n") ; L = atoi (p) ;
p = strtok(NULL, " \t\n") ;  R = atoi (p) ;
p = strtok(NULL, " \t\n") ;  C = atoi (p) ;
if( L==0 && R==0 && C==0 ) break ;
for( int i=0 ; i<L ; i++ ) {
for( int j=0 ; j<R; j++) {
cin.getline(line,31) ;
//cout << line << endl ;
for( int k=0 ; k < C ; k++) {
maze[i][j][k] = line[k] ;
if( line[k] == start ) {
startPosition.x = i ;
startPosition.y = j ;
startPosition.z = k ;
}
if( line[k] == out ) {
exitPosition.x = i ;
exitPosition.y = j ;
exitPosition.z = k ;
}
dis[i][j][k] = -1 ;
}
}
cin.getline(line,31) ;
}

startPosition.minute = 0 ;
bfs(startPosition) ;

if( dis[exitPosition.x][exitPosition.y][exitPosition.z] != -1 ) {
cout << "Escaped in " << dis[exitPosition.x][exitPosition.y][exitPosition.z] << " minute(s)." << endl ;
}else
cout << "Trapped!" << endl ;
}

//system("pause");
}


2016年2月20日 星期六

組合遊戲理論(Combinatorial Game Theory)

G ≥ 0 unless there is a right option GR ≤ 0; (所有GR都大於0)
G ≤ 0 unless there is a left option GL ≥ 0;   (所有GL都大於0)


兩個game的相加

G = {GL..|GR....}, H = {HL..|HR....}


在意義上相當兩個獨立盤面,左方玩家可以選擇在其中一個盤面下move


G+H = { GL+H, G+HL   |   GR+H, G+HR }




2016年2月19日 星期五

代數結構理論(Algebraic Structure)

有一個集合R,並有元素 a, b, c 屬於 R,且含有兩種操作(operation)
加法(addition) 以及 乘法(multiplication)
(這邊加法以及乘法不是指一般我們日常生活中的數字加減乘除,可以想像為特屬於該集合R的加法與乘法),且兩個操作皆具有封閉性(closure),也就是a+b仍屬於R,a*b 仍屬於 R 。

若該集合是一個環(Ring),則須遵守以下規則

加法交換律:                a + b = b + a
加法結合律:                a + (b + c) = (a + b) + c
存在加法單位元素 z 使得R中的每一個元素a 有下列特性:
                      a + z = z + a = a
對於每一個元素 a 存在加法反元素b使得:      
                      a + b = z
乘法結合律:
                      a*(b*c)  = (a*b)*c
乘法分配律:
                     a*(b+c) = a*b + a*c
                     (b+c)*a = b*a + c*a

integral domain is a nonzero commutative ring

2016年2月14日 星期日

Visual C++ 在程式中取得目前資料夾

#include <Windows.h> // 要 include 這個才可以使用GetCurrentDirectory
#include <stdio.h>
#include <stdlib.h>
int main()
{
char szDir[256];
GetCurrentDirectory(256,szDir);
printf("%s",szDir);
system("pause");
}

2015年7月27日 星期一

紛紛擾擾

最近台灣不太平安。

無論是去年的服貿、高雄氣爆,還是到現在的八仙氣爆、課綱微調,在這些事件中生理上受傷的絕對是弱勢的族群。

對於這些事件,社會上正反意見都有,但我卻無法決定站在哪一邊了。

我一直認為,每個人都有其立場,只要中心主旨是對社會好的,雖然有時候會選擇一個立場,當合作溝通下來,應該都能達到雙贏的地步。

但一個議題所牽扯到的問題極端複雜,必須對歷史、社會、法律皆須全盤了解,才能知道某一立場所受的委屈是什麼,誰在說謊話,誰在說實話,這實在太費工夫了。

所以在全盤了解之前,我無法決定站在哪一邊了,對不起。


2011年1月24日 星期一

蚊子

我雙翼一振,如同萬馬千軍。

我槍頭一出,匹衡五路英雄。

在黑暗中持續等待,我想,長槍也同樣渴望著血。

無奈是,無數的掌聲, 在墜落的過程品嚐一生的跑馬燈。

想起說書人的兩句:『精彩不亮麗,起落是無常。』

心一橫,就是肝腸寸斷也露出滿足的微笑。