欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 第十一届蓝桥杯大赛 CC++ 研究生组3.0

第十一届蓝桥杯大赛 CC++ 研究生组3.0

2025/9/10 6:58:22 来源:https://blog.csdn.net/Moliay/article/details/146989378  浏览:    关键词:第十一届蓝桥杯大赛 CC++ 研究生组3.0

A

AC 100%
简单模拟题
1和本身也计入个数计算

#include<iostream>
using namespace std;
int main(){int ans = 0, n = 78120;for(int i = 1; i <= n / i; i++){if(n % i == 0){ans++;
//			cout << i << " ";if(n / i != i){ans++;
//				 cout << n / i << " ";}}}printf("%d", ans);//96return 0;
} 

B

AC 0%(填空题只输出答案即可!)

  • 三种方向:横、竖、左上到右下方向(不是只有对角线)
  • 输入数据规模看起来唬人,可以用记事本等直接给出行列数据。其中每行可视为一个字符串
#include<iostream>
using namespace std;
const int N = 310;
char a[N][N]; 
int main(){int ans = 0, n = 300, m = 301;for(int i = 0; i < n; i++){scanf("%s", a[i]);}for(int i = 0; i < n; i++){//行 for(int j = 0; j < m; j++){if(a[i][j] == '2'){if(j + 3 < m && a[i][j + 2] == a[i][j] && a[i][j + 1] == '0' && a[i][j + 3] == '0') ans++;}}}for(int j = 0; j < m; j++){//列 for(int i = 0; i < n; i++){if(a[i][j] == '2'){if(i + 3 < n && a[i + 2][j] == a[i][j] && a[i + 1][j] == '0' && a[i + 3][j] == '0') ans++;}}}for(int i = 0; i < n; i++){//左上到右下方向 for(int j = 0; j < m; j++){if(a[i][j] == '2'){if(j + 3 < m && i + 3 < n && a[i + 2][j + 2] == a[i][j] && a[i + 1][j + 1] == '0' && a[i + 3][j + 3] == '0') ans++;}}}printf("%d", ans);//16520return 0;
}

订正版

#include<iostream>
using namespace std;
const int N = 310;
char a[N][N]; 
int main(){// int ans = 0, n = 300, m = 301;// for(int i = 0; i < n; i++){// 	scanf("%s", a[i]);// }// for(int i = 0; i < n; i++){//行 // 	for(int j = 0; j < m; j++){// 		if(a[i][j] == '2'){// 			if(j + 3 < m && a[i][j + 2] == a[i][j] && a[i][j + 1] == '0' && a[i][j + 3] == '0') ans++;// 		}// 	}// }// for(int j = 0; j < m; j++){//列 // 	for(int i = 0; i < n; i++){// 		if(a[i][j] == '2'){// 			if(i + 3 < n && a[i + 2][j] == a[i][j] && a[i + 1][j] == '0' && a[i + 3][j] == '0') ans++;// 		}// 	}// }// for(int i = 0; i < n; i++){//左上到右下方向 // 	for(int j = 0; j < m; j++){// 		if(a[i][j] == '2'){// 			if(j + 3 < m && i + 3 < n && a[i + 2][j + 2] == a[i][j] && a[i + 1][j + 1] == '0' && a[i + 3][j + 3] == '0') ans++;// 		}// 	}// }// printf("%d", ans);//16520cout << 16520;return 0;
}

关于判断过程,可以直接对于每个2作为一个判断对象,更高效

#include<iostream>
#include<string>
using namespace std;
typedef long long ll;
const int maxn = 310, N = 300;
string s[maxn];
int main(){
//	ll ans = 0;
//	for(int i = 0; i < N; i++){
//		cin >> s[i];
//	}
//	for(int i = 0; i < N; i++){
//		for(int j = 0; j <= N; j++){
//			if(s[i][j] == '2'){
//				if(j + 3 <= N && s[i][j + 1] == '0' && s[i][j + 2] == '2' && s[i][j + 3] == '0') ans++;
//				if(i + 3 < N && s[i + 1][j] == '0' && s[i + 2][j] == '2' && s[i + 3][j] == '0') ans++;
//				if(i + 3 < N && j + 3 <= N && s[i + 1][j + 1] == '0' && s[i + 2][j + 2] == '2' && s[i + 3][j + 3] == '0') ans++;
//			}
//		}
//	}
//	printf("%lld\n", ans);//16520printf("16520");return 0;
} 

C

AC 0%
完全没有思路

#include<iostream>
#include<cmath>
using namespace std;
int main(){long long ans = pow(2, 20) * 2;for(int i = 2; i <= 20; i++){ans += i;}printf("%lld", ans);//2097361return 0;
} 

  • 直线分割平面
    n条直线把一个平面分割为n(n + 1) / 2 + 1个平面
    即第n次增加一条直线分割后比之前新增n个平面
    在这里插入图片描述

  • 封闭图形
    有n个圆形,最多把平面分割为n^2-n+2个区域

#include<stdio.h>
int main(){//n条直线可以分割出n*(n+1)/2 + 1个平面(每次加新直线时,保证新家直线和已有直线都相交且交点不重合) int ans = 20 * 21 / 2 + 1;for(int i = 1; i <= 20; i++){//每新加一个圆,都至多和一条直线分为两块,一个圆分为两块 ans += 20 * 2 + (i - 1) * 2;} printf("%d", ans); return 0;
}

D

AC 100%
用指定方式遍历二维数组

#include<iostream>
using namespace std;
const int N = 100;
int a[N][N];
int main(){int n = 100, i = 1, j = 1, cnt = 1;a[i][j] = cnt++;while(cnt < 1000){a[i][++j] = cnt++;//向左 while(j > 1){//左下 a[++i][--j] = cnt++;}a[++i][j] = cnt++;//向下while(i > 1){//右上 a[--i][++j] = cnt++;}}
//	for(int i = 1; i <= 20; i++){
//		printf("%d:", i);
//		for(int j = 1; j <= 20; j++){
//			printf("%5d", a[i][j]);
//		}
//		printf("\n");
//	}printf("%d", a[20][20]);//761return 0;
}

E(DFS)

AC 0%

#include<iostream>
using namespace std;
int main(){int ans = 40 + 40 + 7 * 6 * 5 - 6;cout << ans;//284return 0;
} 

F

AC 100%

#include<iostream>
using namespace std;
int main(){int h = -1, l = 101, n, x;double sum = 0;scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d", &x);sum += x;h = max(h, x);l = min(l, x);}printf("%d\n%d\n%.2f", h, l, sum / n);return 0;
}

G

AC 100%
日期递增+回文判断+特殊格式判断

#include<iostream>
using namespace std;
int h[2][15] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};bool sys(int y, int m, int d){//是否回文 if(y / 1000 == d % 10 && y % 1000 / 100 == d / 10 && y % 100 / 10 == m % 10 && y % 10 == m / 10) return true;return false;
}bool judge(int y, int m, int d){//是否ABAB if(y / 1000 == y % 100 / 10 && y % 1000 / 100 == y % 10) return true;return false;
}int main(){int n, y, m, d, ans1, ans2, flag1 = 1, flag2 = 1, run;scanf("%d", &n);y = n / 10000;m = n % 10000 / 100;d = n % 100;while(flag1 || flag2){run = 0;if(y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) run++;d++;if(d > h[run][m]){d = 1;m++;if(m > 12){m = 1;y++;}}if(sys(y, m, d)){if(flag1){flag1 = 0;printf("%04d%02d%02d\n", y, m, d);}if(judge(y, m, d)){flag2 = 0;printf("%04d%02d%02d", y, m, d);}}}return 0;
}

H(动态规划+DFS)

AC 0%
编译不通过,不能用time作为变量名。
在这里插入图片描述
不过就算是编译过了,答案也不对……

#include<iostream>
#include<unordered_map>
using namespace std;const int N = 2010;
int time[N], have[N], ans;
unordered_map<int, pair<int, int>> mp;void get(int t){ans += max(time[mp[t].first], time[mp[t].first]);have[t] = 1;if(!have[mp[t].first]) get(mp[t].first);if(!have[mp[t].second]) get(mp[t].second);
}int main(){int n, m, k, t, x, a, b, c;scanf("%d%d%d%d", &n, &m, &k, &t);for(int i = 1; i <= n; i++) scanf("%d", time + i);for(int i = 1; i <= m; i++){scanf("%d", &x);have[x]++;}while(k--){scanf("%d%d%d", &a, &b, &c);mp[c] = {a, b};}get(t);printf("%d", ans);return 0;
}

I(递推)

AC 40%

#include<iostream>
#include<vector>
#include<unordered_set>
using namespace std;int main(){string s;vector<string> vs;long long ans = 0, len;cin >> s;len = s.size();for(int i = 0; i < len; i++){for(int j = 1; j <= len; j++){if(i + j <= len) vs.push_back(s.substr(i, j));}}for(auto t : vs){unordered_set<char> sc;for(int i = 0; i < t.size(); i++) sc.insert(t[i]);ans += sc.size();}cout << ans;return 0;
}

J

end

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词