10.2【LGR-161-Div.3】洛谷基础赛 #4
闲来无趣,索性打把比赛玩玩,也就当是复赛准备了。
TA P9686 Judg.
题目描述
小 M 正在兴致勃勃地敲打着代码,他突然发现提交代码的评测机无响应了。
你查看了后台数据,请你根据这些已有数据判断他没有通过的测试点有哪些。
已知评测结果与测试点是否通过有如下关系:
| 评测结果 | 测试点是否通过 |
|---|---|
| \(\texttt{AC}\) | 是 |
| \(\texttt{WA}\) | 否 |
| \(\texttt{TLE}\) | 否 |
| \(\texttt{MLE}\) | 否 |
输入格式
第一行输入一个正整数 \(n\),表示评测数据的个数。
第 \(2 \sim n+1\) 行,每行输入一个字符串,依次表示测试点 \(1\sim n\) 的评测结果,数据保证这些字符串一定为 \(\{\texttt{AC},\texttt{WA},\texttt{TLE},\texttt{MLE}\}\) 中的一个。
输出格式
输出一行 \(m\) 个正整数,其中第 \(i\) 个数字 \(a_i\) 表示第 \(a_i\) 个测试点没有通过。
特别地,你需要保证这 \(m\) 个数字递增。
样例 #1
样例输入 #1
5
AC
WA
AC
TLE
MLE
样例输出 #1
2 4 5
思路
这题目我不到一分钟就过了。
每次输入一个字符串\(s\),判断它是不是AC,如果不是,就把他的序号放到一个vector里,最后循环输出vector里的数字就行。
代码实现
#include<bits/stdc++.h>
using namespace std;
vector<int> a;
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
if(s!="AC"){
a.push_back(i);
}
}
for(int i=0;i<a.size();i++){
cout<<a[i]<<" ";
}
return 0;
}
我紧接着来看了第二题,只能说是有点难度但不大。10分钟AC了。
TB P9687 Maps.
题目描述
小 Y 希望得到一幅地图,这份地图有些与众不同。
这份地图是一幅长为 \(n\) 个单位,宽为一个单位的网格图,每个网格必须被涂鸦成白色(\(0\))或者黑色(\(1\))。
你希望满足小 Y 的愿望送给他一幅这样的地图,但是这时小 Y 又提出了两点要求:
- 对于每个不在网格图两端的白色格子,恰好有 \(p\) 个满足它的左右两个格子都被涂鸦成黑色。
- 在满足上述所有条件的情况下,这幅地图从左到右的字符构成的字符串的字典序最小。
你心想,这些要求也是小菜一碟,于是开始了你的创作。
输入格式
本题有多组数据。
第一行一个正整数 \(T\),表示数据组数。
对于每组数据:
输入共一行两个整数 \(n,p\),表示你需要构造的地图的长度和小 Y 对你的要求。
输出格式
对于每组数据:输出一行一个长度为 \(n\) 的 01 字符串,表示你构造的地图;如果无法找到任何一幅地图满足小 Y 的要求,输出 \(-1\)。
样例
样例输入
5
5 1
3 1
5 3
5 4
5 5
样例输出
00101
101
-1
-1
-1
思路
不知道你们理解了题目没有,我理解起来却很困难。
题目的大致意思是:一个长度为\(n\)的bool数组上,有没有\(p\)个0点,满足他左右两个点都是1点的要求。如果是,输出满足条件且字典序最小的字符串,否则输出\(-1\).
通过分析样例,我们可以得出结论:\(n\)下取整整除2后的结果,如果大于\(p\),则一定是可以的,否则不行。
然后我们就要看如何得出字符串了。通过简单的分析后,便可以得出结论:字符串的前\(m/2-p\)个字符都是\(0\),这样可以满足字典序最小的要求。然后后面的数交替输出10101...就可以了。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
int n,p;
bool flag=0;
cin>>n>>p;
if(n%2==0&&(n-1)/2>=p){
flag=1;
}
else if(n%2!=0&&n/2>=p){
flag=1;
}
if(!flag){
cout<<-1<<endl;
continue;
}
int m=n;
while(m>0){
if(m/2>p){
cout<<'0';
m--;
}
if(m/2==p){
cout<<'1';
m--;
for(int i=0;i<p;i++){
cout<<"01";
}
break;
}
}
cout<<endl;
}
return 0;
}
鄙人不才,后面的TC和TD都没写出来。

浙公网安备 33010602011771号