AtCoder Beginner Contest 089

A

1
2
3
4
5
6
7
#include <cstdio >
int N;
int main()
{
scanf("%d",&N);
printf("%d\n",N/3);
}

B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdio>
#include <cctype>
#include <set>
using namespace std;
int n;
set<char> s;
char ch[2333];
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", ch);
s.insert(ch[0]);
}
if (s.size() == 3)
puts("Three");
else
puts("Four");
return 0;
}

C

暴力全枚举!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// LUOGU_RID: 174586349
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, a, r, c, h, ans;
string st;
signed main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> st;
if (st[0] == 'M')
m++;
if (st[0] == 'A')
a++;
if (st[0] == 'R')
r++;
if (st[0] == 'C')
c++;
if (st[0] == 'H')
h++;
}
ans += m * a * r;
ans += m * a * c;
ans += m * a * h;
ans += m * r * c;
ans += m * r * h;
ans += m * c * h;
ans += a * r * c;
ans += a * r * h;
ans += a * c * h;
ans += r * c * h;
cout << ans << endl;
}

D

dp

转移dp[i] = dp[i - d] + abs(x[i] - x[i - d]) + abs(y[i] - y[i - d]);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// LUOGU_RID: 174586544
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 9e4 + 10;
int h, w, q, d;
int nn;
int x[N], y[N];
int dp[N];
signed main()
{
cin >> h >> w >> d;
for (int i = 1; i <= h; i++)
{
for (int j = 1; j <= w; j++)
{
cin >> nn;
y[nn] = j;
x[nn] = i;
}
}
for (int i = d + 1; i <= h * w; i++)
{
dp[i] = dp[i - d] + abs(x[i] - x[i - d]) + abs(y[i] - y[i - d]);
}
int l, r;
cin >> q;
while (q--)
{
cin >> l >> r;
cout << dp[r] - dp[l] << endl;
}
return 0;
}