宾馆的\(\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;
}

总结

这次比赛暴露了我以下几个问题:

  1. 不够认真、仔细,对特殊情况考虑不全
  2. 代码中总存在一些小问题
  3. 太浮躁,认为第一遍测试过了就万事大吉了,没有检查代码的隐藏\(bug\)
  4. 太过依赖于样例和测试数据

随机推荐

  1. moiezen(2018.10.16)

    题意:有n件行李,编号为1~n.行李的质量是模 P 意义下的(P不一定是质数).有 k 个背包,要装下这些行李,为了方便在背包中找行李,每个背包中的行李编号是连续的,允许有背包为空.我们想让最重的背包 ...

  2. canvas常用画法整理

    代码Canvas.htm <!DOCTYPE html> <html lang="en"> <head> <title>canvas ...

  3. jave之set和get的用法

    package com.xxl.api.admin; public class Test { private int score; public int getScore() { return sco ...

  4. 19 标签:xml或者html

    1       标签:xml或者html 1.1  使用XmlSlurper解析xml groovy处理xml非常容易.XmlSlurper 类用来处理xml.在处理xml方面,还有其他的处理方式,但 ...

  5. GCC在windows下的配置

    http://blog.csdn.net/lan120576664/article/details/46806991 http://blog.csdn.net/shaynerain/article/d ...

  6. CentOS 7.x升级内核

    第一种针对当前内核版本的小版本升级可以采用如下方法: [root@localhost ~]# uname -r -.el7 [root@localhost ~]# yum list kernel [r ...

  7. 禁用和关闭ECSHOP缓存

    ECSHOP的缓存机制从一定程度上可以减少ECSHOP反复读取数据库的几率,从而一定程度上降低服务器负担,提高访问速度. 但是启用缓存机制,对一些新手站长也有不利的地方.我就遇到很多新手站长经常问,我 ...

  8. P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib

    题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们.农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组 ...

  9. JSP新闻发布系统

    1.主页面 1.1登录 1.2    分页 2.注销 3.代码如下 package cn.news.dao.impl; import java.sql.SQLException; import org ...

  10. winfrom项目的打印

    自己可以下一个PDF打印机(例如下载64位office虚拟打印文档) 首先要添加控件 1.添加打印的选项卡,并命名为打印 2.点击打印选项卡,右击鼠标,选择选择项 using System;using ...