A - The New Year: Meeting Friends
水题,中位数。。。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int a,b,c;
while(scanf("%d%d%d", &a, &b, &c) != EOF){
int ans1 = max(max(a, b), c);
int ans2 = min(min(a, b), c);
printf("%d\n", ans1 - ans2);
}
return 0;
}
B - Text Document Analysis
模拟,细节问题注意一下即可,尤其是到了字符串结束的时候还需要进判断。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 300;
char s[maxn];
int main(){
int ans1, ans2, cnt, flag, n;
while(scanf("%d", &n) != EOF){
ans1 = ans2 = cnt = flag = 0;
scanf("%s", s);
for(int i = 0; i < n; i++){
if(s[i] == '_'){
if(!flag)
ans1 = max(cnt, ans1);
else{
if(cnt){
// printf("i = %d\n", i);
ans2++;
}
}
cnt = 0;
}
else if(s[i] == '('){
ans1 = max(cnt, ans1);
cnt = 0;
flag = 1;
}
else if(s[i] == ')'){
if(cnt){
// printf("i = %d\n", i);
ans2++;
}
flag = 0;
cnt = 0;
}
else cnt++;
}
ans1 = max(ans1, cnt);
printf("%d %d\n", ans1, ans2);
}
return 0;
}
C - Polycarp at the Radio
题意较难理解。其实(1,m)出现的最大次数应该为(n/m),这样才能保证使bj的最小值最大,然后模拟处理一下字符串即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 2005;
int a[maxn], b[maxn], vis[maxn];
int main(){
int n,m;
while(scanf("%d%d", &n, &m) != EOF){
memset(vis, 0, sizeof(vis));
int cnt = n/m;
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
if(a[i] <= m && a[i] >= 1) vis[a[i]]++;
}
int ans = 0;
for(int i = 1; i <= m; i++){
if(vis[i] < cnt) ans += (cnt - vis[i]);
}
printf("%d %d\n", cnt, ans);
int i, flag = 1;
for(i = 0; i < n; i++){
while(vis[flag] >= cnt && flag <= m) flag++;
if(flag > m) break;
if(a[i] >= 1 && a[i] <= m){
// printf("vis[%d] = %d, flag = %d\n", a[i], vis[a[i]], flag);
if(vis[a[i]] > cnt){
vis[a[i]]--;
vis[flag]++;
b[i] = flag;
}
else b[i] = a[i];
}
else{
vis[flag]++;
b[i] = flag;
}
}
for(; i < n; i++) b[i] = a[i];
int fi = 0;
for(int i = 0; i < n; i++){
if(!fi) printf("%d", b[i]), fi = 1;
else printf(" %d", b[i]);
}
printf("\n");
}
return 0;
}
D - Lakes in Berland
bfs求连通块
#include <queue>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 55;
char maze[maxn][maxn];
int n, m, k, vis[maxn][maxn];
bool flag;
int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
struct Node{
int x, y;
Node(){}
Node(int a,int b):x(a), y(b){}
};
struct loc{
int x, y, val;
loc(int a,int b,int c):x(a), y(b), val(c){}
bool operator < (const loc temp)const{
return val < temp.val;
}
};
vector <loc> vec;
int judge(int x,int y){
if(x == 0 || x == n-1 || y == 0 || y == m-1)
return false;
return true;
}
int bfs1(int x,int y){
flag = true;
int ans = 1;
queue <Node> que;
que.push(Node(x, y));
flag = flag & judge(x, y);
vis[x][y] = 1;
while(!que.empty()){
Node cur = que.front(); que.pop();
for(int i = 0; i < 4; i++){
int xx = cur.x + dir[i][0];
int yy = cur.y + dir[i][1];
if(xx < 0 || xx >= n || yy < 0 || yy >= m || vis[xx][yy]) continue;
if(maze[xx][yy] == '.'){
flag = flag&judge(xx, yy);
ans++;
vis[xx][yy] = 1;
que.push(Node(xx, yy));
}
}
}
return ans;
}
void bfs2(int x,int y){
queue <Node> q;
memset(vis, 0, sizeof(vis));
q.push(Node(x, y));
maze[x][y] = '*';
vis[x][y] = 1;
while(!q.empty()){
Node cur = q.front(); q.pop();
for(int i = 0; i < 4; i++){
int xx = cur.x + dir[i][0];
int yy = cur.y + dir[i][1];
if(xx < 0 || xx >= n || yy < 0 || yy >= m || vis[xx][yy]) continue;
if(maze[xx][yy] == '.'){
maze[xx][yy] = '*';
vis[xx][yy] = 1;
q.push(Node(xx, yy));
}
}
}
}
void solve(){
memset(vis, 0, sizeof(vis));
vec.clear();
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(maze[i][j] == '.' && !vis[i][j]){
int ans = bfs1(i, j);
if(flag) vec.push_back(loc(i, j, ans));
}
}
}
sort(vec.begin(), vec.end());
// for(int i = 0; i < vec.size(); i++) printf(" %d", vec[i]);
int ret = 0;
for(int i = 0; i < vec.size()-k; i++){
ret += vec[i].val;
bfs2(vec[i].x, vec[i].y);
}
printf("%d\n", ret);
for(int i = 0; i < n; i++) printf("%s\n", maze[i]);
}
int main(){
while(scanf("%d%d%d", &n, &m, &k) != EOF){
for(int i = 0; i < n; i++) scanf("%s", maze[i]);
solve();
}
return 0;
}