1. 程式人生 > >CodeForces 257B Playing Cubes

CodeForces 257B Playing Cubes

題意:有兩種紅藍顏色的方塊,紅色為m個,藍色為n個,A,B兩人輪流放方塊,若相鄰兩個方塊顏色相同則A得一分,若相鄰兩個方塊顏色不同則B得一分,判斷A、B兩人的最高得分

思路:(1)通過小資料的暴力搜尋找到規律,輸出一定為( max(m,n)-1,  min(m,n) )    (2).博弈,除了第一塊相鄰顏色無法確定,一定能保證後面每一步的放置的顏色相同(除了當數量較小的方塊恰好放完的時候),A得分一定為兩者之間的較大值-1,因此B得分可以推出為 n+m-1-( max(m,n) - 1 )化簡後得n+m-max(n,m),為min(m,n)

注意點:無

以下為AC程式碼:

# Author Problem Lang Verdict Time Memory Sent Judged
10041600 257B - 17 GNU C++11 Accepted 62 ms 4 KB 2015-02-27 11:05:55 2015-02-27 11:05:55
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define ll long long
#define ull unsigned long long
#define all(x) (x).begin(), (x).end()
#define clr(a, v) memset( a , v , sizeof(a) )
#define pb push_back
#define mp make_pair
#define read(f) freopen(f, "r", stdin)
#define write(f) freopen(f, "w", stdout)
using namespace std;
const double pi = acos(-1);

int main()
{
    ios::sync_with_stdio( false );
    int m, n;
    while ( cin >> m >> n ){
        if ( m < n ) swap ( m, n );
        cout << m - 1 << ' ' << n << endl;
    }
    return 0;
}