$Codeforces\; Round\; 504\; (Div.2)$
宾馆的\(\rm{wifi}\)也太不好了,蹭的\(ZZC\)的热点才打的比赛(感谢\(ZZC\))
日常掉rating…… 我现在是个\(\color{green}{pupil}\)……
因为我菜,所以还是只写了前三道题
题解
\(\mathcal{A.Single\; Wildcard\; Pattern\; Matching}\)
题目大意:有点长,不想翻译了qwq
我能说第一题是前三道题中最难的么……各种特判,各种被卡,最后交了4遍也没做出来(我太蒟了 QAQ)
反复修改后的冗杂的AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n,m; cin>>n>>m; n-=1,m-=1;
if(n>m+1){
cout<<"NO"; return 0;
}
char s1[200010],s2[200010]; cin>>s1>>s2;
int pos=0;
for(int i=0;i<=n+1;i++){
pos=i;
if(s1[i]=='*') break;
}
//cout<<pos;
for(int i=0;i<pos;i++){
if(s1[i]!=s2[i]){
cout<<"NO"; return 0;
}
}
if(pos==n+1){
if(n!=m){
cout<<"NO"; return 0;
}
goto hhh;
}
int j;
for(j=0;;j++){
if(n-j==pos) break;
if(s1[n-j]!=s2[m-j]){
cout<<"NO"; return 0;
}
}
for(int i=pos;i<m-j;i++){
if(s2[i]<'a'||s2[i]>'z'){
cout<<"NO"; return 0;
}
}
hhh:
cout<<"YES";
return 0;
}
\(\mathfrak{B.Pair\; of\; Toys}\)
题目大意:输入两个数\(n,k\),问从\(1\text{~}n\)中取出\(2\)个数使得它们的和为\(k\)的方案数(\((a,b)\)和\((b,a)\)算同一种方案)
这题算是数论吧……挺简单的
如果\(a+b==k\),那么\((a+1)+(b-1),(a+2)+(b+2)\)……也等于\(k\)。所以我们可以找到最接近的两个数\(k/2,k/2+1\),然后\(1\text{~}k/2\)和\((k/2+1)\text{~}(k{-}1)\)就是所有的方案。接下来我们只需要找出合法的方案数就可以了
首先我们可以确定如果\(k/2{>=}n\),肯定无解,当\(k/2{<}n\)的时候,因为\(n\)可能小于\(k\),所以合法的方案数应为\(\min(k/2,(k-1)-k/2,n-k/2)\)
P.S. 不要忘了开\(long\; long\)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
long long n,k; cin>>n>>k;
long long mid=k/2,ans;
if(mid<n) ans=min(mid,min(k-1-mid,n-mid));
else{
cout<<0; return 0;
}
cout<<ans;
return 0;
}
\(\sf{C.Bracket\; Subsequence}\)
题目大意:给你一个长度为\(n\)括号序列\(a\),找出一段长度为\(m\)合法的括号序列\(b\),使得\(b\)是\(a\)的子串
\(b\)为答案,我们枚举\(a\)的每一个括号,每扫到一个括号,就把它加入\(b\)里,如果为左括号,\(cnt{+}{=}1\),如果\(cnt==m/2\)就跳出循环,然后从后面补右括号就行了
没初始化\(ans\)数组,FST了…… QAQ
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n,m; cin>>n>>m; m/=2;
char a[200010],b[200010]; cin>>a;
memset(b,0,sizeof(b));
int len=strlen(a)-1,tot=0,cnt=0;
for(int i=0;i<=len;i++){
if(a[i]=='('){
b[tot++]='(';
cnt++;
}
if(cnt==m) break;
if(a[i]==')'){
b[tot++]=')';
}
}
for(int i=tot;i<m*2;i++) b[i]=')';
cout<<b;
return 0;
}
总结
这次比赛暴露了我以下几个问题:
- 不够认真、仔细,对特殊情况考虑不全
- 代码中总存在一些小问题
- 太浮躁,认为第一遍测试过了就万事大吉了,没有检查代码的隐藏\(bug\)
- 太过依赖于样例和测试数据
随机推荐
- tinyxml一些应注意的问题
今天在对使用tinyxml库的程序调试的时候,出现的一些问题让人很纠结,特记以此... 在对TixmlDocument创建时我是用new创建的,然后在用完之后我用delete释放掉,可是用gdb调试 ...
- laravel 报错htmlspecialchars() expects parameter 1 to be string, object given
翻译过来就是 期望参数1是字符串 意思就是说变量为数组,应以数组的方式输出 @foreach($xxx as $k=>$y) {{$k}}{{$y}} @endforeach
- Forward Rendering 正向渲染
Forward Rendering 正向渲染 正向渲染一个基于着色器的渲染路径.它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影.在默认设置中,少数最亮 ...
- Unity mesh 合并
簡介: 基本上就是把 很多物體結合成一個物體 的作法,這種做法有很多優點,例如:1. 提高效能2. 統一材質 (只要建立一個材質,就能控制.分配給所有物體)3. 動畫控制方便 (像是你要在 Unity ...
- Metabolic Signatures of Cystic Fibrosis Identified in Dried Blood Spots For Newborn Screening Without Carrier Identification (文献分享一组-孔楠楠)
题目:Metabolic Signatures of Cystic Fibrosis Identified in Dried Blood Spots For Newborn Screening Wit ...
- Mol Cell Proteomics. |彭建祥| 人胃肠道间质瘤亚群蛋白质组图谱
大家好,本周分享的是发表在Molecular & Cellular Proteomics 上的一篇关于人胃肠道间质瘤亚群蛋白质组图谱的文章,题目是Proteomic maps of human ...
- Git的使用方法与GitHub项目托管方法
Git的安装 Windows上安装Git 访问网址:https://git-for-windows.github.io/ 点击Download下载,下载后双击安装包进行安装,一直"下一步&q ...
- 对单片机C语言的一些误用和总结
在学习单片机的时候才真正知道C语言是什么它是来干什么的~但是C语言用到嵌入式只是它小小的一部分他的应用还有很多地方呢,呵呵我们这里就不讨论这个了.我们是不是在写程序的时候错误很多就算编译通过了也达不到 ...
- Java中 Collection 、 List 、 Set 、 Map详解
一.容器( Collection ) 接口 容器( Collection )是最基本的集合接口,一个容器( Collection )保存一组对象( Object ),即对象是容器的元素( Ele ...
- 547 Friend Circles 朋友圈
班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的集合.给 ...