这场比赛,是5月11日去哈工大打省赛的一个赛前模拟训练,总共5个小时(中午12点到下午5点),题出的很难(主要是我太菜…),总共11题,我们队出了6题…估计也就差不多大一队伍的中流水平…前2个小时出了5题,后面真的是后劲不足,实在是没有AC了…只有最后几分钟才出了B题…

这是我们队的提交记录…可以看到从1点半之后几乎就没有AC了…在这期间真的是自闭啊…

A题 nefu 33 Fair Number

签到题。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int l,s1,s2,tmp;
    string a;
    while(cin>>a&&a!="0")
    {
        l=a.length();
        s1=s2=0;
        for(int i=0;i<=l/2-1;i++)
        {
            if(a[i]>='0'&&a[i]<='9')
                s1=s1+a[i]-'0';
            else
                s1=s1+a[i]-'A'+10;
        }
        if(l%2==0)tmp=l/2;
        else tmp=l/2+1;
        for(int i=l-1;i>=tmp;i--)
        {
            if(a[i]>='0'&&a[i]<='9')
                s2=s2+a[i]-'0';
            else
                s2=s2+a[i]-'A'+10;
        }
        if(s1==s2)printf("Y\n");
        else printf("N\n");
    }
    return 0;
}

D题 nefu 643 teacher Li

寒假培训的原题,我开的这题,直接AC了…

#include <bits/stdc++.h>
using namespace std;
int n,i,j,cas;
string x,ans;
int main()
{
    ios::sync_with_stdio(false);
    cas=0;
    while(cin>>n>>ans)
    {
        for(i=1;i<=2*n-2;i++)
        {
            cin>>x;
            for(j=0;j<max(x.length(),ans.length());j++)
                ans[j]=ans[j]^x[j];
        }
        printf("Scenario #%d\n",++cas);
        printf("%s\n\n",ans.c_str());
    }
    return 0;
}

K题 nefu 904 删数问题

开场不久队友AC了这题…贴一下他的代码:

#include <bits/stdc++.h>
using namespace std;
void calculate(char *a,int k)
{
    int len=strlen(a);
    for(int count=0;count<k;count++)
    {
        for(int i=0;i<len;i++)
        {
            if(a[i]>a[i+1])
            {
                for(int j=i;j<len;j++)
                {a[j]=a[j+1];}
                break;
            }
        }
    }
    cout<<a<<endl;
}
int main()
{
    char s[210];
    int k;
    while(cin>>s)
    {
        if(s[0]=='0') break;
        cin>>k;
        calculate(s,k);
    }
    return 0;
}

I题 nefu 477 不同的卡片

队友开的这题…比较水…没什么好说的…

//2019.5.7补题 by.nefu_ljw
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,x,cas,sum,ans,pre[100010],vis[100010],a[100010];
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n>>m)
    {
        sum=0;
        memset(vis,0,sizeof(vis));
        for(ll i=1;i<=n;i++)
        {
            cin>>a[i];
            if(vis[a[i]]==0)//vis标记是否重复
            {
                vis[a[i]]=1;
                sum=sum+a[i];
            }
            pre[i]=sum;//pre数组记录[1,x]区间内的不重复元素的和
        }
        printf("Case #%lld:\n",++cas);
        while(m--)
        {
            cin>>x;
            printf("%lld\n",pre[x]);
        }
    }
    return 0;
}

J题 nefu 599 ***丝搬砖

我开的这题,一开始套的DFS的模板,看着最大才30,也没测试一下(30,30)就交了,结果TLE…后来队友推出数学公式,答案是一个组合数Cm+n n(m+n个数中选n个),用杨辉三角打表就给AC了…

#include <bits/stdc++.h>
using namespace std;
long long a[65][65],i,j,m,n;
void excel()//杨辉三角打表
{
    a[1][1]=1;
    for(i=2;i<=62;i++)
    {
        for(j=1;j<=i;j++)
        a[i][j]=a[i-1][j-1]+a[i-1][j];
    }
}
int main()
{
    while(cin>>m>>n)
    {
        excel();
        printf("%lld\n",a[m+n+1][n+1]);
    }
    return 0;
}

B题 nefu 640 Number Guessing

最后做的题,我卡了一个多小时,最后队友AC了…
思路是枚举答案,从0枚举到9999,但是要注意枚举的数不能含有重复数字(题目中说了电脑给的四位数是四个不同的数字组合,不含重复数字,那么你猜的数字也不能含重复数字)
我赛后补题了一下,发现比赛的时候我把check函数里第一个循环写到第二个循环的内层了,而且也没判断枚举的数字是否含有重复数字,错误还是挺多的…我还是思路不严谨,题目也没看清…
以下是我补题的AC代码:

//2019.5.6补题 by.nefu_ljw
#include <bits/stdc++.h>
using namespace std;
int n,suma,sumb,answer,s1[21],s2[21];
string a[21],b,ans[21];
bool check(int x)//判断枚举的数x是否满足条件
{
    int x1=x%10,x2=x/10%10,x3=x/100%10,x4=x/1000;
    if(x1==x2||x1==x3||x1==x4||x2==x3||x2==x4||x3==x4)return 0;//注意,枚举的数不能含有重复数字!
    for(int i=3;i>=0;i--)//把枚举的数x转换为字符串b
    {
        b[i]=x%10+'0';
        x=x/10;
    }
    for(int cas=1;cas<=n;cas++)
    {
        suma=sumb=0;
        memset(s1,0,sizeof(s1));
        memset(s2,0,sizeof(s2));
        for(int i=0;i<=3;i++)
        {
            if((a[cas][i]^b[i])==0)suma++;
            s1[a[cas][i]-'0']++;//统计字符串a中某个数字出现的次数
            s2[b[i]-'0']++;//统计字符串b中某个数字出现的次数
        }
        for(int i=0;i<=9;i++)
        {if(s1[i]==1&&s2[i]==1)sumb++;}
        if(suma!=(ans[cas][0]-'0')||sumb!=(ans[cas][2]-'0'))return 0;//与ans[cas]的字符比对,判断是否满足答案
    }
    return 1;
}
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>n&&n>=0)
    {
        for(int i=1;i<=n;i++)
            cin>>a[i]>>ans[i];
        for(int i=0;i<=9999;i++)
        {
            if(check(i))
            {answer=i;break;}
        }
        printf("%04d\n",answer);
    }
    return 0;
}

——————————————————————————————————————————————

以下5题…没整出来…待我以后补题…

C题 nefu 642 monkey

队友看了这题,貌似是三维DP,然而没整出来状态转移方程…

E题 nefu 641 素数树

离散数学刚学完《树》这一章…然而这题还是不会写…这题只有大二的队AC了…

F题 nefu 656 Easy Dynamic Programming

这题就一个队AC了…我们队看都没看…题目名字说是简单的动态规划,我信你个鬼…

G题 nefu 39 Reverse a Road

这题我们队看了一下,貌似可以整,然而只能想到O(n2)的算法…估计TLE…整不出了…

H题 nefu 40 Divid Regions

防AK题…没有一个队伍提交这题…大一大二全军覆没…