EZ 2018 1 21 2018noip第五次膜你赛

  这次分数普遍偏高,而且yu'ben'ao又AK了!

  但是最后一题莫名爆0让我很感伤啊(搓了1个多小时的20分暴力)!

  难度偏低,主要是T2没剪枝,炸了3个点。

  T1 这种SB题恐怕是千年难遇了,PJ------------的难度

  稍微观察一下就能发现ans=max{a[i]+i-1}

  缅怀yekehe60分

  CODE

#include<cstdio>
using namespace std;
int n,ans=-1,i,x;
inline void read(int &x)
{
    x=0; char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
inline int max(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    freopen("energy.in","r",stdin); freopen("energy.out","w",stdout);
    read(n);
    for (i=1;i<=n;++i)
    read(x),ans=max(ans,x+i-1);
    printf("%d",ans);
    return 0;
}

  T2 智障搜索题,我为了卡时间还加上了一堆诸如clock之类的东西,然后果然超时了

  主要是要把两个数列同时开始搜,不能先搜一个再去判断另一个是否可行

  CODE

#include<cstdio>
using namespace std;
const int N=45;
int a[N],b[N],s[N],t,n,i;
bool flag;
inline void read(int &x)
{
    x=0; char ch=getchar(); 
    while (ch<'0'||ch>'9') ch=getchar(); 
    while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
inline void DFS(int k,int len1,int len2)
{
    if (k>n) { flag=1; return; }
    if (len1>n/2||len2>n/2) return;
    if (s[k]==a[len2+1])
    {
        b[len2+1]=s[k];
        DFS(k+1,len1,len2+1);
    } 
    a[len1+1]=s[k];
    DFS(k+1,len1+1,len2);
}
int main()
{
    freopen("split.in","r",stdin); freopen("split.out","w",stdout);
    read(t);
    while (t--)
    {
        read(n);
        for (i=1;i<=n;++i)
        read(s[i]);
        a[1]=s[1]; flag=0;
        DFS(2,1,0);
        if (flag) puts("Frederica Bernkastel"); else puts("Furude Rika");
    }
    return 0;
}

  T3 标算太难,已超出能力范围(233333)

  但是我们要有信仰的去——打爆力

  循环更新原串直到得到只含有0~9的串,暴力枚举子串统计答案,20分到手

  CODE

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,r,k,i,j,ans,add[30],tot;
string s,now,a[30];
inline int calc(int x,int y)
{
    if (x!=y&&s[x]=='0') return 0;
    int m=0;
    for (int i=x;i<=y;++i)
    m=(m*10+s[i]-'0')%n;
    if (!m) return 1;
    return 0;
}
int main()
{
    freopen("message.in","r",stdin); freopen("message.out","w",stdout);
    cin>>n>>r>>k;
    for (i=1;i<=k;++i)
    cin>>a[i],a[i].erase(0,3);
    s=a[1];
    for (i=2;i<=k;++i)
    {
        memset(add,0,sizeof(add)); tot=0;
        for (j=0;j<s.size();++j)
        if (s[j]=='A'+i-1) add[++tot]=j;
        for (j=1;j<=tot;++j)
        s.erase(add[j]+(j-1)*(a[i].size()-1),1),s.insert(add[j]+(j-1)*(a[i].size()-1),a[i]);
    }
    for (i=0;i<s.size();++i)
    for (j=i;j<s.size();++j)
    ans=ans+calc(i,j)==r?0:ans+calc(i,j);
    printf("%d",ans);
}
原文地址:https://www.cnblogs.com/cjjsb/p/8466292.html