现在的位置: 首页 > 综合 > 正文

Codeforces Round #289 (Div2)

2019年02月11日 ⁄ 综合 ⁄ 共 3116字 ⁄ 字号 评论关闭

终于放假了!可是还要学车,唉。。

没有一门挂太开心!(这学期的确没有花心思在学习上。。期末复习到崩溃。。

但是这一次涨了rating,开心> <!


A - Maximum in Table(签到)

<span style="font-size:18px;">#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
#define MAXN 50
#define OT printf
#define LL long long
#define INF 0x7f7f7f7f
#define RUN(x) freopen(#x, "r", stdin);
#define REP(i, n) for(i = 0; i < n; i++)
#define FOR(i, s, e) for(i = s; i < e; i++)

inline int RD(int &x)
{
        x = 0;
        char ch = getchar();
        while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; }
        while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); }
        return 1;
}

/*..........................................dizzy............................................*/

LL Grid[11][11];

int main()
{
    int i, j, n;
    FOR(i, 1, 11) Grid[1][i] = 1;
    RD(n);
    FOR(i, 1, n + 1)
    {
        Grid[i][1] = 1;
        FOR(j, 2, n + 1)
        Grid[i][j] = Grid[i][j - 1] + Grid[i - 1][j];
    }
    OT("%I64d\n", Grid[n][n]);
    return 0;
}
</span>


B - Painting Pebbles

<span style="font-size:18px;">#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
#define MAXN 50
#define OT printf
#define LL long long
#define INF 0x7f7f7f7f
#define RUN(x) freopen(#x, "r", stdin);
#define REP(i, n) for(i = 0; i < n; i++)
#define FOR(i, s, e) for(i = s; i < e; i++)

inline int RD(int &x)
{
        x = 0;
        char ch = getchar();
        while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; }
        while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); }
        return 1;
}
inline int RD(int &x0, int &x1) { return RD(x0) + RD(x1); }

/*..........................................dizzy............................................*/

int pebble[101];
int color[101][101];

int cmp(int a, int b)
{
    return pebble[a] < pebble[b];
}

int main()
{
    int i, j, t;
    int n, k; RD(n, k);

    int MIN = 101, MAX = 0;
    REP(i, n)
    {
        RD(pebble[i]);
        MIN = MIN < pebble[i] ? MIN : pebble[i];
        MAX = MAX > pebble[i] ? MAX : pebble[i];
    }

    if(MAX - MIN > k) puts("NO");
    else
    {
        puts("YES");
        REP(i, n)
        {
            int v = pebble[i] / k;
            int u = pebble[i] % k;
            REP(j, v) REP(t, k) color[i][j * k + t] = t + 1;
            REP(j, u) color[i][v * k + j] = j + 1;
            sort(color[i], color[i] + pebble[i]);
            REP(j, pebble[i])
            {
                if(j) OT(" ");
                OT("%d", color[i][j]);
            }
            OT("\n");
        }
    }

    return 0;
}
</span>


C - Sums of Digits (get到了新姿势:怎样在数位之和确定的情况下求得比指定数大的最小的数)

<span style="font-size:18px;">#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
#define MAXN 500
#define OT printf
#define INF 0x7f7f7f7f
#define RUN(x) freopen(#x, "r", stdin);
#define REP(i, n) for(i = 0; i < n; i++)
#define FOR(i, s, e) for(i = s; i <= e; i++)
#define DWN(i, s, e) for(i = e; i >= s; i--)

template <class T>
inline int RD(T &x)
{
        x = 0;
        char ch = getchar();
        while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; }
        while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); }
        return 1;
}
/*..........................................dizzy............................................*/

int a[MAXN], b[MAXN], len;

void get(int b)
{
    int i = 0;
    while(b)
    {
        while(a[i] < 9 && b) a[i]++, b--;
        if(i >= len && !b) len = i + 1;
        i++;
    }
}

void prt()
{
    int i;
    DWN(i, 0, len - 1) OT("%d", a[i]);
    puts("");
}

int main()
{
//    RUN(C.in);

    int i, j, k, n; RD(n);
    memset(a, 0, sizeof(a)); len = 0;

    REP(i, n)
    {
        RD(b[i]);
        if(!i) { get(b[i]); prt(); continue; }
        if(b[i] > b[i - 1]) { get(b[i] - b[i - 1]); prt(); continue; }
        int tmp = b[i] - b[i - 1], k = 0;
        while(true)
        {
            if(k >= len) len = k + 1;
            if(a[k] < 9 && tmp > 0)
            {
                a[k]++, tmp--;
                get(tmp);
                break;
            }
            tmp += a[k], a[k] = 0;
            k++;
        }
        prt();
    }

    return 0;
}
</span>

抱歉!评论已关闭.