Loading [MathJax]/extensions/TeX/mathchoice.js

「牛客 OI 周赛2 – 提高组」解题报告

A – 游戏

我大概乱搞一下:从最外围向内操作,计算操作次数再取模然后对应姓名即可。我不太了解为什么就过了。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// A.cpp
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 1e3 + 200;
char mp[MAX_N][MAX_N];
int n, m, T, delta[MAX_N][MAX_N], now[MAX_N][MAX_N], matrix[MAX_N][MAX_N];
int main()
{
scanf("%d", &T);
while (T--)
{
memset(delta, 0, sizeof(delta)), memset(now, 0, sizeof(now));
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%s", mp[i] + 1);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (mp[i][j] == 'R')
matrix[i][j] = 1;
else if (mp[i][j] == 'G')
matrix[i][j] = 2;
else
matrix[i][j] = 0;
int cnt = 0;
for (int i = n; i >= 1; i--)
{
delta[i][m + 1] += delta[i + 1][m + 1];
for (int j = m; j >= 1; j--)
{
delta[i][j] += delta[i + 1][j];
now[i][j] = now[i][j + 1] + delta[i][j + 1];
int curt = (matrix[i][j] + now[i][j]) % 3;
cnt += (3 - curt) % 3;
now[i][j] += (3 - curt) % 3, delta[i][j + 1] += (3 - curt) % 3;
}
}
printf("%s\n", cnt % 3 == 2 ? "dreagonm" : (cnt % 3 == 1 ? "fengxunling" : "BLUESKY007"));
}
return 0;
}
// A.cpp #include <bits/stdc++.h> using namespace std; const int MAX_N = 1e3 + 200; char mp[MAX_N][MAX_N]; int n, m, T, delta[MAX_N][MAX_N], now[MAX_N][MAX_N], matrix[MAX_N][MAX_N]; int main() { scanf("%d", &T); while (T--) { memset(delta, 0, sizeof(delta)), memset(now, 0, sizeof(now)); scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) scanf("%s", mp[i] + 1); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (mp[i][j] == 'R') matrix[i][j] = 1; else if (mp[i][j] == 'G') matrix[i][j] = 2; else matrix[i][j] = 0; int cnt = 0; for (int i = n; i >= 1; i--) { delta[i][m + 1] += delta[i + 1][m + 1]; for (int j = m; j >= 1; j--) { delta[i][j] += delta[i + 1][j]; now[i][j] = now[i][j + 1] + delta[i][j + 1]; int curt = (matrix[i][j] + now[i][j]) % 3; cnt += (3 - curt) % 3; now[i][j] += (3 - curt) % 3, delta[i][j + 1] += (3 - curt) % 3; } } printf("%s\n", cnt % 3 == 2 ? "dreagonm" : (cnt % 3 == 1 ? "fengxunling" : "BLUESKY007")); } return 0; }
// A.cpp
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 1e3 + 200;

char mp[MAX_N][MAX_N];
int n, m, T, delta[MAX_N][MAX_N], now[MAX_N][MAX_N], matrix[MAX_N][MAX_N];

int main()
{
    scanf("%d", &T);
    while (T--)
    {
        memset(delta, 0, sizeof(delta)), memset(now, 0, sizeof(now));
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++)
            scanf("%s", mp[i] + 1);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                if (mp[i][j] == 'R')
                    matrix[i][j] = 1;
                else if (mp[i][j] == 'G')
                    matrix[i][j] = 2;
                else
                    matrix[i][j] = 0;
        int cnt = 0;
        for (int i = n; i >= 1; i--)
        {
            delta[i][m + 1] += delta[i + 1][m + 1];
            for (int j = m; j >= 1; j--)
            {
                delta[i][j] += delta[i + 1][j];
                now[i][j] = now[i][j + 1] + delta[i][j + 1];
                int curt = (matrix[i][j] + now[i][j]) % 3;
                cnt += (3 - curt) % 3;
                now[i][j] += (3 - curt) % 3, delta[i][j + 1] += (3 - curt) % 3;
            }
        }
        printf("%s\n", cnt % 3 == 2 ? "dreagonm" : (cnt % 3 == 1 ? "fengxunling" : "BLUESKY007"));
    }
    return 0;
}

Continue reading →

NOIp 2016 解题报告

A – 玩具谜题

sb 题,随便搞。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// P1563.cpp
#include <iostream>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
int dir[N];
string occupations[N];
int cmdKeys[M];
int cmdPath[M];
// I/O;
for (int i = 0; i < N; i++)
cin >> dir[i] >> occupations[i];
for (int j = 0; j < M; j++)
cin >> cmdKeys[j] >> cmdPath[j];
// Process;
int currentBias = 0;
for (int i = 0; i < M; i++)
if (cmdKeys[i] == 0)
if (dir[currentBias % N] == 1)
currentBias += cmdPath[i];
else
{
currentBias -= cmdPath[i];
if (currentBias < 0)
currentBias = N + currentBias;
}
else if (dir[currentBias % N] == 1)
{
currentBias -= cmdPath[i];
if (currentBias < 0)
currentBias = N + currentBias;
}
else
currentBias += cmdPath[i];
cout << occupations[currentBias % N];
return 0;
}
// P1563.cpp #include <iostream> using namespace std; int main() { int N, M; cin >> N >> M; int dir[N]; string occupations[N]; int cmdKeys[M]; int cmdPath[M]; // I/O; for (int i = 0; i < N; i++) cin >> dir[i] >> occupations[i]; for (int j = 0; j < M; j++) cin >> cmdKeys[j] >> cmdPath[j]; // Process; int currentBias = 0; for (int i = 0; i < M; i++) if (cmdKeys[i] == 0) if (dir[currentBias % N] == 1) currentBias += cmdPath[i]; else { currentBias -= cmdPath[i]; if (currentBias < 0) currentBias = N + currentBias; } else if (dir[currentBias % N] == 1) { currentBias -= cmdPath[i]; if (currentBias < 0) currentBias = N + currentBias; } else currentBias += cmdPath[i]; cout << occupations[currentBias % N]; return 0; }
// P1563.cpp
#include <iostream>

using namespace std;

int main()
{
    int N, M;
    cin >> N >> M;
    int dir[N];
    string occupations[N];
    int cmdKeys[M];
    int cmdPath[M];
    // I/O;
    for (int i = 0; i < N; i++)
        cin >> dir[i] >> occupations[i];
    for (int j = 0; j < M; j++)
        cin >> cmdKeys[j] >> cmdPath[j];
    // Process;
    int currentBias = 0;
    for (int i = 0; i < M; i++)
        if (cmdKeys[i] == 0)
            if (dir[currentBias % N] == 1)
                currentBias += cmdPath[i];
            else
            {
                currentBias -= cmdPath[i];
                if (currentBias < 0)
                    currentBias = N + currentBias;
            }
        else if (dir[currentBias % N] == 1)
        {
            currentBias -= cmdPath[i];
            if (currentBias < 0)
                currentBias = N + currentBias;
        }
        else
            currentBias += cmdPath[i];
    cout << occupations[currentBias % N];
    return 0;
}

Continue reading →

NOIp 2017 解题报告

A – 小凯的疑惑

送命规律题。当然也可以考虑用 exgcd 的性质,以下是感性理解:

考虑设这个数为x \equiv ya {\pmod b},展开就是:

x = ya + kb, k \in [1, b – 1]

发现k \geq 0时都满足,那么反过来取-1就可以又满足最大又满足不满足条件。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// P3951.cpp
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
unsigned long long a, b, i;
cin >> a >> b;
cout << a * b - a - b;
return 0;
}
// P3951.cpp #include <iostream> #include <cstring> using namespace std; int main() { unsigned long long a, b, i; cin >> a >> b; cout << a * b - a - b; return 0; }
// P3951.cpp
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    unsigned long long a, b, i;
    cin >> a >> b;
    cout << a * b - a - b;
    return 0;
}

Continue reading →

生成函数 | Generating Function

×

×