程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> BestCoder Round #41 -- (A,B)

BestCoder Round #41 -- (A,B)

編輯:C++入門知識

BestCoder Round #41 -- (A,B)


 

題目傳送:BestCoder Round #41

 

 

A、ZCC loves straight flush

 

思路:簡單題,不過剛開始沒看清題,wa了好幾次,然後才發現輸入不連續也可以,就是說每個同一花色的牌都可以放在一塊,不用在意輸入順序,感覺這裡題目應該說清楚點好些

 

AC代碼(略挫,比賽時寫的都比較亂):

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
#define LL long long
#define INF 0x7fffffff
using namespace std;

char a[5][5];

int fun(int *p, int n) {
    sort(p, p + n);
    int ret = 1;
    if(p[0] != 1) {
        for(int i = 1; i <= 9; i ++) {
            int cur = 0;
            for(int j = 0; j < n; j ++) {
                if(p[j] <= i + 4 && p[j] >= i) {
                    cur ++;
                }
                ret = max(ret, cur);
            }
        }
    }
    else if(p[0] == 1) {
        for(int i = 1; i <= 10; i ++) {
            int cur = 0;
            for(int j = 0; j < n; j ++) {
                if(p[j] <= i + 4 && p[j] >= i) {
                    cur ++;
                }
            }
            if(i == 10) cur ++;
            ret = max(ret, cur);
        }
    }
    return ret;
}

int main() {
    int T;
    scanf("%d", &T);
    while(T --) {
        scanf("%s %s %s %s %s", a[0], a[1], a[2], a[3], a[4]);
        int cur = 1;
        int num[5];
        memset(num, 0, sizeof(num));
        for(int i = 0; i < 5; i ++) {
            int len = strlen(a[i]);
            for(int j = 1; j < len; j ++) {
                num[i] = num[i] * 10 + a[i][j] - '0';
            }
        }
        /*for(int i = 0; i < 5; i ++) {
            cout << num[i] << " ";
        }
        cout << endl;*/
        int A[5], B[5], C[5], D[5];
        int an = 0, bn = 0, cn = 0, dn = 0;
        for(int i = 0; i < 5; i++) {
            if(a[i][0] == 'A') A[an ++] = num[i];
            else if(a[i][0] == 'B') B[bn ++] = num[i];
            else if(a[i][0] == 'C') C[cn ++] = num[i];
            else if(a[i][0] == 'D') D[dn ++] = num[i];
        }
        
        int ans = 1;
        ans = max(ans, fun(A, an));
        ans = max(ans, fun(B, bn));
        ans = max(ans, fun(C, cn));
        ans = max(ans, fun(D, dn));
        
        printf("%d\n", 5 - ans);
    }
    return 0;
}


 

 

 

 

B、ZCC loves strings

 

思路:找規律,簡單博弈,但是坑點較多,總共有Cn取2中情況,然後Miss G贏得情況有奇數和偶數湊一塊的時候,還有選擇相同字符串的時候,然後特判一下ans是否為0,再取個gcd,記得用longlong,會爆int

 

AC代碼:

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include 
#include 
#include 
#define LL long long
#define INF 0x7fffffff
using namespace std;

int a[200005];

LL gcd(LL a, LL b) {
    return b == 0 ? a : gcd(b, a % b);
}

int main() {
    ios::sync_with_stdio(false);  
    int T, n;
    scanf("%d", &T);
    while(T --) {
        scanf("%d", &n);
        string tmp;
        LL ji = 0, ou = 0;
        map mmp;
        LL jia = 0;
        for(int i = 0; i < n; i ++) {
            cin >> tmp;
            if(mmp.find(tmp) != mmp.end()) {
                jia += mmp[tmp];
                mmp[tmp] ++;
            }
            else mmp[tmp] = 1;
            
            a[i] = tmp.length();
            if(a[i] & 1) ji ++;
            else ou ++;
        }
        LL ans = ji * ou;
        LL sum = n * (n - 1) / 2;
        
        ans += jia;
        if(ans == 0) {
            printf("0/1\n");
            continue;
        }
        
        LL gg = gcd(ans, sum);
        ans /= gg;
        sum /= gg;
        cout << ans << '/' << sum << endl;
    }
    return 0;
}


 

 

 

 

 

好了,這是我搞算法半年多以來打得稍微好一點的比賽了,雖然前幾十分鐘在亂搞,但是後來hack環節還是蠻激動的,好感人啊,BC紫名了,雖然質量不是太高,但是還是挺激動地,靜靜地等著我CF紫名,先貼個圖片紀念紀念

\

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved