13年12月CCF计算机软件能力认证
题1
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 10010;
int main() {
int x, n;
int s[N];
memset(s, 0, sizeof(s));
cin >> n;
while(n --) {
cin >> x;
s[x] ++;
}
int ans = 0;
for(int i = 1; i <= N; i ++)
if(s[i] > s[ans]) ans = i;
cout << ans;
return 0;
}
题2
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
string s;
int j = 1;
int ans = 0;
cin >> s;
for(int i = 0; i < 11; i ++) {
if(s[i] != '-') {
ans += (s[i] - '0') * j;
j ++;
}
}
ans %= 11;
if(ans == 10 && s[12] != 'X') {
for(int i = 0; i < 12; i ++)
cout << s[i];
cout << "X";
}
else if(ans == 10 && s[12] == 'X')
cout << "Right";
else if(s[12] - '0' != ans) {
for(int i = 0; i < 12; i ++)
cout << s[i];
cout << char(ans + '0');
}
else cout << "Right";
return 0;
}
题3
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int main() {
int n;
int h[N];
cin >> n;
for(int i = 0; i < n; i ++)
cin >> h[i];
int ans = 0;
for(int i = 0; i < n; i ++) {
int l = i - 1; int r = i + 1;
while(l >= 0 && h[l] >= h[i]) l --;
while(r < n && h[r] >= h[i]) r ++;
if(ans < h[i] * (r - l - 1)) ans = h[i] * (r - l - 1);
}
cout << ans;
return 0;
}
题4
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MOD = 1e9 + 7;
const int N = 1010;
int main() {
int n, C[N][N];
for(int i = 0; i < N; i ++)
for(int j = 0; j <= i; j ++)
if(!j) C[i][j] = 1;
else C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
cin >> n;
int ans = 0;
for(int i = 2; i < n - 1; i ++)
ans = (ans + (long long)C[n - 1][i] * (i - 1) * (n - i - 1)) % MOD;
cout << ans;
return 0;
}
题5
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 60;
bool flag1[M][M];
bool flag2[M][M];
char s[M][M];
int r, c, f;
int sx, sy, tx, ty;
void dfs1(int i, int j) {
if(i >= 0 && i < r && j >= 0 && j < c) {
if(flag1[i][j]) return ;
if(!flag2[i][j] && s[i][j] != '#') {
flag1[i][j] = 1;
if(s[i][j] == '+' || s[i][j] == 'S' || s[i][j] == 'T') {
dfs1(i - 1, j); dfs1(i + 1, j);
dfs1(i, j - 1); dfs1(i, j + 1);
}
else if(s[i][j] == '-') {
dfs1(i, j - 1); dfs1(i, j + 1);
}
else if(s[i][j] == '|') {
dfs1(i - 1, j); dfs1(i + 1, j);
}
else if(s[i][j] == '.')
dfs1(i + 1, j);
}
}
}
void dfs2(int i, int j) {
if(i >= 0 && i < r && j >= 0 && j < c) {
if(flag2[i][j]) return ;
if(s[i][j] == 'T') {
f = 0;
return ;
}
if(!flag2[i][j] && s[i][j] != '#') {
flag2[i][j] = 1;
if(s[i][j] == '+' || s[i][j] == 'S' || s[i][j] == 'T') {
dfs2(i - 1, j); dfs2(i + 1, j);
dfs2(i, j - 1); dfs2(i, j + 1);
}
else if(s[i][j] == '-') {
dfs2(i, j - 1); dfs2(i, j + 1);
}
else if(s[i][j] == '|') {
dfs2(i - 1, j); dfs2(i + 1, j);
}
else if(s[i][j] == '.')
dfs2(i + 1, j);
}
}
}
int main() {
cin >> r >> c;
for(int i = 0; i < r; i ++)
for(int j = 0; j < c; j ++) {
cin >> s[i][j];
if(s[i][j] == 'S') sx = i, sy = j;
else if(s[i][j] == 'T') tx = i, ty = j;
}
dfs1(sx, sy);
if(! flag1[tx][ty]) cout << "I'm stuck!";
else {
int ans = 0;
for(int i = 0; i < r; i ++)
for(int j = 0; j < c; j ++)
if(flag1[i][j] == 1) {
f = 1;
memset(flag2, 0, sizeof(flag2));
dfs2(i, j);
ans += f;
}
cout << ans;
}
return 0;
}