SSブログ

PCK予選 [コンテスト]

5完 (oooo-o----)でした. 34 / 100? とか.
やはりこういうの緊張しますが, 先輩が落ち着かしてくれたので満足はしています.
本当に感謝しかないです.
僕は1234と6の半分くらいを書きました.(mm:ssは提出時間)

1. 10問解いたら何点とれる? (01:58)
#include <stdio.h>

int main(void)
{
    int i;
    int sum;
    int n;
    
    sum = 0;
    
    for (i = 0; i < 10; i++){
        scanf("%d", &n);
        sum += n;
    }
    
    printf("%d\n", sum);
    
    return (0);
}


2. 乗車券 (04:33)
#include <stdio.h>

int main(void)
{
    int b1, b2, b3;
    
    scanf("%d %d %d", &b1, &b2, &b3);
    
    if (b1 + b2 == 2 || b3 == 1){
        printf("Open\n");
    }
    else {
        printf("Close\n");
    }
    
    return (0);
}


3.家庭菜園 (44:47)
#include <cstdio>
#include <vector>

using namespace std;

bool inOrder(vector<int> a)
{
    int t = a[1] - a[0];
    for (int i = 0; i < a.size() - 1; i++){
        if (a[i + 1] - a[i] != t){
            return (false);
        }
    }
    
    return (true);
}

int main(void)
{
    int n;
    int h[128];
    int i, j;
    int ans;
    vector<int> t;
    
    while (scanf("%d", &n) && n){
        
        for (i = 0; i < n + 1; i++){
            scanf("%d", &h[i]);
        }
        
        for (i = 0; i < n + 1; i++){
            t.clear();
            for (j = 0; j < n + 1; j++){
                if (i != j){
                    t.push_back(h[j]);
                }
            }
            if (inOrder(t)){
                ans = h[i];
                break;
            }
        }
        
        printf("%d\n", ans);
    }
    
    return (0);
}


4. すべての数は6174に通ず (32:09)
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int make(vector<int> num)
{
    int s;
    s = 0;
    for (int i = 0; i < 4; i++){
        s = s * 10 + num[i];
    }
    
    return (s);
}

int main(void)
{
    vector<int> num(4);
    int n;
    int t;
    int ct;
    
    while (scanf("%d", &n) && n){
        
        if (n % 1111 == 0){
            printf("NA\n");
            continue;
        }
        
        ct = 0;
        while (n != 6174){
            ct++;
            t = n;
            for (int i = 0; i < 4; i++){
                num[i] = t % 10;
                t /= 10;
            }
            sort(num.rbegin(), num.rend());
            int L = make(num);
            sort(num.begin(), num.end());
            int S = make(num);
            n = L - S;
        }
        
        printf("%d\n", ct);
    }
    
    return (0);
}


5. パイプつなぎ職人の給料 (--:--)
(O(N)な解法がありそうだなーと思って思いつかない. ぐぬぬ.)

6. マヤの大予言 (175:01)
#include <stdio.h>

typedef unsigned long long li;

int table[2][13] = {{365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                    {366, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

li conv(int y, int m, int d)
{
    li ret;
    int i;
    li t = y - 1;
    ret = 0;
    ret += t * 365 + (t / 4) - (t / 100) + (t / 400);
    
    if (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)){
        for (i = 1; i <= m - 1; i++){
            ret += table[1][i];
        }
    }
    else {
        for (i = 1; i <= m - 1; i++){
            ret += table[0][i];
        }
    }
    ret += d;
    return (ret);
}

int main(void)
{
    char rec[256];
    li t;
    int i, j;
    int dot;
    while (scanf("%s", rec), rec[0] != '#'){
        dot = 0;
        for (i = 0; rec[i] != '\0'; i++){
            if (rec[i] == '.') dot++;
        }
        if (dot == 2){
            int year, month, day;
            sscanf(rec, "%d.%d.%d", &year, &month, &day);
            t = (conv(year, month, day) - conv(2012, 12, 21)) % (1872000);
            
            printf("%lld.", t / (20 * 20 * 20 * 18));
            t %= (20 * 20 * 20 * 18);
            printf("%lld.", t / (20 * 20 * 18));
            t %= (20 * 20 * 18);
            printf("%lld.", t / (20 * 18));
            t %= (20 * 18);
            printf("%lld.", t / 20);
            t %= 20;
            printf("%lld\n", t);
        }
        else {
            li b, ka, tt, w, ki;
            int y, sum;
            sscanf(rec, "%lld.%lld.%lld.%lld.%lld", &b, &ka, &tt, &w, &ki);
            t = b * (20 * 20 * 20 * 18) + ka * (20 * 20 * 18) + tt * (20 * 18) + w * 20 + ki + conv(2012, 12, 21);
            
            for (i = 0; i < 10000; i++){
                if (t <= i * 365 + (i / 4) - (i / 100) + (i / 400)) break;
            }
            y = i;
            printf("%d.", y);
            y--;
            t -= (y * 365 + (y / 4) - (y / 100) + (y / 400));
            sum = 0;
            y++;
                for (j = 1; j <= 12; j++){
                    if (t > table[y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)][j]){
                        t -= table[y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)][j];
                    }
                    else {
                        break;
                    }
                }
                printf("%d.%lld\n", j, t);
        }
    }
    
    return (0);
}


7 ~ 10. ちらっと見たけど解けてない. 9ときたいな-.
本選どうだろう.びみょい.

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。