$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保存文件为UTF-8格式
TinyXML是个好东西,这个不用我多说了,我用它做过好几个项目,但这几个项目都只是从xml文件中获取信息,没有涉及到写文件,最近需要生成xml的配置文件,才注意到这个问题,那就是TinyXML似乎不 ...
- Lightoj 1008【规律】
25 24 23 22 21 10 11 12 13 20 9 8 7 14 19 2 3 6 15 18 1 4 5 16 17 然后把这个转化成: 17 18 19 20 21 10 11 12 ...
- uoj#274. 【清华集训2016】温暖会指引我们前行(LCT)
传送门 不难发现肯定是在温度的最大生成树上走是最优的 于是用\(LCT\)维护最大生成树,每一次加边时如果已经连通,就判断一下路径上的最小温度是否小于当前温度,是的话就断掉那条边,加入新边 //min ...
- P3809【模板】后缀排序
传送门 深入理解了一波后缀数组,这东西真的很妙诶,自己推感觉完全不现实,看来只能靠背代码了 这段时间就多敲敲,把板子记熟吧 代码: #include<cstdio> #include< ...
- centos7安装chrome浏览器
1.配置yum下载源: 在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo, 并且在该文件中添加如下内容: [google-chrome]name=googl ...
- 洛谷1280(dp)
题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...
- Codeforces 526F Pudding Monsters
先把题目抽象一下: 有一个静态的数组,求有多少个区间[i,j]满足:j-i==max{ai,...,aj}-min{ai,...,aj} 也就是要求max-min+i-j==0的区间数 所以肿么做呢? ...
- String的内存和intern()方法
一.关于常量池 字符串在Java中用的非常得多,Jvm为了减少内存开销和提高性能,使用字符串常量池来进行优化. 在jdk1.7之前(不包括1.7),Java的常量池是在方法区的地方,方法区是一个运行时 ...
- 09通过winfrom实现简单的播放音、视频
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- SourceGrid之Grid绑定数据
private void BindData() { //为绑定的按钮选线增加单击事件 SourceGrid.Cells.Controllers.CustomEvents clickEvent = ne ...