2025多校冲刺CSP模拟赛1(螳臂复活祭)
写在前面:
推歌:
《马丁的早晨》
马丁 马丁 马丁
每天早晨你醒来
马丁 马丁 马丁
有个角色在等待
变成了龙啊真可爱
真可爱
变成原始人不太帅
不太帅
郭默是你的好朋友
我们去玩吧
罗娜是你喜欢的女孩
你真了不起
马丁 马丁 马丁
你是超人飞得快
马丁 马丁 马丁
你的故事太奇怪
马丁 马丁 马丁
无论校内和校外
马丁 马丁 马丁
有了你生活更精彩
为什么总发生在我身上
题解未动,废话先行:
这次的模拟赛,肝硬化竟取得了比它近三次校内模拟赛的总分之和还要高 \(5pts\) 的成绩!(虽然 \(rank~50\) ),兴奋异常(¿其实没有),遂写博文(其实是前几天没空写)。
顺带一提,那个格式化代码真的好丑(也可能是我没品罢,山猪吃不了溪石)
开始题解:
T1 交友(friend)
(好久没A \(T1\) 了)
题目描述:
有个网格,上面有草( \(G\) )和牛( \(C\) )和空气( \(.\) ),俩牛吃了紧挨着它俩的草,到了一个格子就配对,草被吃了就没了不能吃第二遍,求最多配对数。
输入格式:
中间忘了。
输出格式:
后面忘了。
样例1
输入:
4 5
.CGGC
.CGCG
CGCG.
.CC.C
输出:
4
样例解释:
样例很明了。
数据范围:
看我代码。
Solve:
可以很容易发现,一头牛周围至多八个位置可能会有与它配对的牛:
于是我们可以遍历整个矩阵,如果那个位置是牛,那么就枚举这四个位置:
之后两头牛配对之后就把它们吃的那块草皮清空就好了。
Code:
#include <bits/stdc++.h>
using namespace std;
const int _ = 1010;
int n, m, g[_][_];
long long ans;
char s[_];
int main(){
freopen("friend.in", "r", stdin);
freopen("friend.out", "w", stdout);
scanf("%d%d", & n, & m);
for(int i = 1; i <= n; i ++){
scanf("%s", s);
for(int j = 1; j <= m; j ++){
if(s[j - 1] == 'G'){
g[i][j] = 1;
}
if(s[j - 1] == 'C'){
g[i][j] = 10086;
}
}
}
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
if(g[i][j] == 10086){
if(g[i][j + 1] == 1 && g[i][j + 2] == 10086){
ans ++;
g[i][j + 1] = 0;
}
if(g[i + 1][j] == 1 && g[i + 2][j] == 10086){
ans ++;
g[i + 1][j] = 0;
}
if((g[i + 1][j] == 1 || g[i][j + 1] == 1) && g[i + 1][j + 1] == 10086){
ans ++;
if(g[i][j + 1] == 1){
g[i][j + 1] = 0;
}
else g[i + 1][j] = 0;
}
if((g[i][j - 1] == 1 || g[i + 1][j] == 1) && g[i + 1][j - 1] == 10086){
ans ++;
if(g[i][j - 1] == 1)g[i][j - 1] = 0;
else g[i + 1][j] = 0;
}
}
}
}
printf("%lld", ans);
return 0;
}
/*
4 5
.CGGC
.CGCG
CGCG.
.CC.C
*/
T2 炼金(alchemy):
题目描述:
你觉得铅是世界上最好的金属,你的国王也觉得,于是他让你用国库里的金属发明尽量多的铅。你知道 \(M\) 种金属,每种金属都只知道一种配方,每种配方都是用两种原料金属各一克来反应生成一克该金属,每次只能取整数克金属,每种配方能用无穷次,铅( \(Pb\) )为一号元素,求最终铅的最大质量。
输入格式:
一行 \(T\) ,一行 \(m\) , \(m\) 行,第 \(i\) 行表示第 \(i\) 号元素的配方,一行 \(m\) 个数,表示国库里每号元素有多少克。
输出格式:
后面忘了。
样例1
输入:
3
3
2 3
1 3
1 2
5 2 3
5
3 4
3 4
4 5
3 5
1 3
0 8 6 2 4
4
3 4
2 3
2 3
2 3
0 1 1 0
输出:
4
样例解释:
样例 \(1\) 中,用 \(2\) 克 \(2\) 号金属和 \(2\) 克 \(3\) 号金属制造 \(2\) 克铅,最终共得到 \(7\) 克铅。
样例 \(2\) 中,先用 \(2\) 克 \(3\) 号金属和 \(2\) 克 \(5\) 号金属制造 \(2\) 克 \(4\) 号金属,然后用 \(4\) 克 \(3\) 号金属和 \(4\) 克 \(4\) 号金属制造 \(4\) 克铅。注意,可能有两种配方使用相同的两种原料金属(只是炼金术手法不同)。也要注意,并不是每种金属都一定会作为其他配方的原料;在本例中,\(2\) 号金属从未作为原料。
样例 \(3\) 中,注意某种金属可能可以用来制造自身。(有时候炼金术的规律确实很逆天!)但在本例中无法制造出任何铅。由于配方只能以整数克操作,不能用 \(0.5\) 克 \(2\) 号金属和 \(0.5\) 克 3 号金属制造 \(0.5\) 克 \(4\) 号金属,再用 \(0.5\) 克 \(3\) 号金属和 \(0.5\) 克 \(4\) 号金属制造 \(0.5\) 克铅。
数据范围:
看我代码。
Solve:
你等下我被王5大蛇Hack了【大悲】。