Advertisement

上海市计算机学会2020年4月月赛(丙组)

阅读量:

第一道题:竞选班长 AC

复制代码
 #include <iostream>

    
 #include <algorithm>
    
 using namespace std;
    
 int a, b, c, d;
    
 int main() {
    
 	scanf("%d%d%d%d", &a, &b, &c, &d);
    
 	if ((a>=90&&b>=90||a>=90&&c>=90||b>=90&&c>=90) && d>=85)
    
 		puts("Qualified");
    
 	else
    
 		puts("Not qualified");
    
 	return 0;
    
 }

第二道题:永恒的生命游戏 AC

复制代码
 #include <iostream>

    
 #include <algorithm>
    
 using namespace std;
    
 const int N = 107;
    
 int n, m;
    
 char s[N][N];
    
 bool in_map(int x, int y) {
    
 	return x>=0 && x<n && y>=0 && y<m;
    
 }
    
 int cal(int x, int y) {
    
 	int ct = 0;
    
 	for (int i = x-1; i <= x+1; i++) {
    
 		for (int j = y-1; j <= y+1; j++) {
    
 			if (i==x && j==y || !in_map(i, j)) continue;
    
 			if (s[i][j] == '*') ct++;
    
 		}
    
 	}
    
 	return ct;
    
 }
    
 bool check(int x, int y) {
    
 	int ct = cal(x, y);
    
 	return (s[x][y]=='*' && ct>=2 && ct<=3 || s[x][y]=='.' && ct!=3);
    
 }
    
 bool solve() {
    
 	for (int i = 0; i < n; i++)
    
 		for (int j = 0; j < m; j++)
    
 			if (!check(i, j))
    
 				return false;
    
 	return true;
    
 }
    
 int main() {
    
 	scanf("%d%d", &n, &m);
    
 	for (int i = 0; i < n; i++)
    
 		scanf("%s", s[i]);
    
 	puts(solve() ? "Still life" : "Other");
    
 	return 0;
    
 }

第三道题:调配问题(一) AC

复制代码
 #include <iostream>

    
 #include <algorithm>
    
 using namespace std;
    
 const int N = 1e5 + 7;
    
 int n, a[N];
    
 long long s, ans;
    
 int main() {
    
 	scanf("%d", &n);
    
 	for (int i = 1; i <= n; i++) {
    
 		scanf("%d", a + i);
    
 		s += a[i];
    
 		ans += abs(s);
    
 	}
    
 	printf("%lld\n", ans);
    
 	return 0;
    
 }

第四道题:数字验证 AC

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 char s[505];
    
 int main() {
    
 	cin >> s;
    
 	int p = 0, q = -1, n = strlen(s+p);
    
 	if (s[p]=='+' || s[p]=='-') p++;
    
 	if (n==1 && s[p]=='.') {
    
 		puts("Invalid");
    
 		return 0;
    
 	}
    
 	for (int i = p; s[i]; i++) {
    
 		if (s[i] == '.') {
    
 			q = i;
    
 			break;
    
 		}
    
 	}
    
 	for (int i = p; s[i]; i++) {
    
 		if ( i!=q && !isdigit(s[i]) ) {
    
 			puts("Invalid");
    
 			return 0;
    
 		}
    
 	}
    
 	puts("Valid");
    
 	return 0;
    
 }

第五道题:吃苹果 AC

复制代码
 #include <iostream>

    
 #include <algorithm>
    
 using namespace std;
    
 const int N = 1e6 + 7;;
    
 int n, a[N], sum = 0;
    
 int main() {
    
 	scanf("%d", &n);
    
 	for (int i = 0; i < n; i ++)
    
 		scanf("%d", a + i);
    
 	sort(a, a + n);
    
 	for (int i = 0; i < n; i ++)
    
 		if (sum <= a[i]) sum++;
    
 	printf("%d\n", sum);
    
 	return 0;
    
 }

若有更好的解,欢迎评论或私信与我~

全部评论 (0)

还没有任何评论哟~