蓝桥杯刷题第十七天
创始人
2025-05-31 14:30:01

第一题:ACS

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?
运行限制
最大运行时间:1s
最大运行内存: 128M

看代码

#include
using namespace std;int main(){char c = 'L';cout<

第二题:递增三元组

题目描述
给定三个整数数组
A=[A1,A2,⋯AN],
B=[B1,B2,⋯BN],
]C=[C1,C2,⋯CN],
请你统计有多少个三元组(i,j,k) 满足:
1≤i,j,k≤N;
Ai输入描述
第一行包含一个整数 N。
第二行包含 N 个整数 A1,A2,⋯AN。
第三行包含 N 个整数 B1,B2,⋯BN。
第四行包含 N 个整数 C1,C2,⋯CN。
其中,1≤N≤105,0≤Ai,Bi,Ci≤105。
输出描述
输出一个整数表示答案。
输入输出样例
输入
3
1 1 1
2 2 2
3 3 3
输出
27

暴力做法,过了87.5%, 通过找比b小的a,和比b大的b,找到方案

再对应相乘就是答案,但是有一个样例超时

#include 
#include
using namespace std;typedef long long LL;
const int N = 100010;
int a[N], b[N], c[N];
int s[N], t[N];
int n;int main()
{ scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i <= n; i++) scanf("%d", &c[i]);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){if(a[j] < b[i]) s[i]++;if(b[i] < c[j]) t[i]++;}LL ans = 0;for(int i = 1; i <= n; i++){ans += s[i]*t[i];}cout<

通过暴力优化,变为一重循环

排序,再使用双指针,每此确定比b小的a的位置,比b大的c的位置(再用减去)

为什么这样可行,因为数组是有序的,前面都比b[i]小,b向后移动变为b[i+1]

此时比b[i]小的都比b[i+1]小

#include 
#include
using namespace std;typedef long long LL;
const int N = 100010;
int a[N], b[N], c[N];
int s[N], t[N];
int n;int main()
{ scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i <= n; i++) scanf("%d", &c[i]);sort(a + 1, a + 1 + n);sort(b + 1, b + 1 + n);sort(c + 1, c + 1 + n);LL ans = 0, s1 = 1, s2 = 1;for(int i = 1; i <= n; i++){while(s1 <= n && a[s1] < b[i]) s1++;while(s2 <= n && c[s2] <= b[i]) s2++;ans += (LL)(s1 - 1) * (n - s2 + 1);}cout<

使用了algorithm中的函数

lower_bound()返回第一个大于等于的地址

upper_bound()返回第一个大于的地址

减去起始地址,即得到最新的地址

#include
#include
using namespace std;typedef long long LL;
const int N = 1e5 + 10;
int a[N], b[N], c[N];int main(){int n;scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);for(int i = 0; i < n; i++) scanf("%d", &b[i]);for(int i = 0; i < n; i++) scanf("%d", &c[i]);sort(a, a + n); sort(b, b + n); sort(c, c + n);LL ans = 0;for(int i = 0; i < n; i++){LL x = lower_bound(a, a + n, b[i]) - a;LL y = n - (upper_bound(c, c + n, b[i]) - c);ans += x * y;}cout<

第三题:环境治理

环境治理 - 蓝桥云课 (lanqiao.cn)

floyd+二分

#include
#include
#include
using namespace std;const int N = 110;
typedef long long LL;
LL g[N][N], f[N][N], minv[N][N];
LL n, q;int floyd(){for(int k = 1; k <= n; k++)for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)f[i][j] = min(f[i][j], f[i][k] + f[k][j]);LL a = 0;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)a += f[i][j];return a;
}bool check(LL x){memcpy(f, g, sizeof g);LL h = x / n, s = x % n;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){if(i == j) continue;if(s >= i) f[i][j] = max(minv[i][j], f[i][j] - h - 1);else f[i][j] = max(minv[i][j], f[i][j] - h);f[j][i] = f[i][j];}return floyd() <= q;
}int main(){scanf("%lld%lld", &n, &q);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)scanf("%lld", &g[i][j]);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){scanf("%lld", &minv[i][j]);f[i][j] = minv[i][j];}if(floyd() > q){puts("-1");return 0;}LL l = 0, r = 1e9;while(l < r){LL mid = l + r >> 1;if(check(mid)) r = mid;else l = mid + 1;}cout<

相关内容

热门资讯

贺博生:12.17黄金原油今日... 投资本身没有风险,失控的投资才有风险。不要用你的侥幸去挑战行情,运气这东西是有,碰上一次别再去奢望第...
HashKey港股上市:市值1... 雷递网 雷建平 12月17日 亚洲区域性数字资产在岸平台HashKey Holdings(股票代码:...
人行自贡市分行:信用“金钥匙”... “太好了!无抵押、无担保,从申请到拿到信用贷款,只用了5天,资金流信息平台真是解了我们的燃眉之急。”...
沐曦股份高开568.83%,一... 新闻荐读 17日,继摩尔线程之后,“国产GPU第二股”沐曦股份正式登陆科创板。 上市首日,沐曦股份高...
润健股份等在上海成立能源科技公... 雷达财经讯,天眼查App显示,近日,润智信科能源科技(上海)有限公司成立,法定代表人为严从东,注册资...