2015年2月22日 星期日

[TIOJ 1123] 辣椒醬蛋糕問題

被梗了ˊˇˋ

作法:原題等價於四堆的拈......
懶的寫直接得到要取多少個,所以一個一個check,反正時間夠 (?)

code :

#include<bits/stdc++.h>
using namespace std;
 
bool check(int n,int m,int x,int y)
{
    return ((n-x)^(x-1)^(m-y)^(y-1))!=0 ;
}
 
int ans,pos,tp ;
 
void update(int area,int type,int p)
{
    if(area<ans) return ;
    if(area>ans) { ans=area , tp=type , pos=p ; return ; }
    if(type<tp) return ;
    if(p>pos) return ;
    ans=area , tp=type , pos=p ;
}
 
main()
{
    int n,m,x,y ;
    while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF)
    {
        if(!check(n,m,x,y))
            { printf("No winning strategy.\n") ; continue ; }
        ans=0 ;
        for(int i=1;i<x;i++) if(!check(n-i,m,x-i,y))
            update(i*m,2,i) ;
        for(int i=x;i<n;i++) if(!check(i,m,x,y))
            update((n-i)*m,2,i) ;
        for(int i=1;i<y;i++) if(!check(n,m-i,x,y-i))
            update(i*n,1,i) ;
        for(int i=y;i<m;i++) if(!check(n,i,x,y))
            update((m-i)*n,1,i) ;
        if(tp==2) printf("horizontal") ;
        else printf("vertical") ;
        printf(" %d %d\n",pos,ans) ;
    }
}
 

沒有留言:

張貼留言