题目列表

分糖果

分类讨论。

讨论一下三种情况。

不细说了,很简单,送分。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    freopen("candy.in","r",stdin);
    freopen("candy.out","w",stdout);
    int n,l,r;
    cin>>n>>l>>r;
    if(l%n<=r%n)
    {
        if(r-l<n)
        {
            cout<<r%n<<endl;
        }
        else
        {
            cout<<n-1<<endl;
        }
    }
    else 
    {
        cout<<n-1<<endl;
    }
    return 0;
}

插入排序

暴力想法(大约 $70\ pts$)

对于每次操作,去找一遍大小关系 $\mathcal O(n)$ 得到位置。

满分想法($100\ pts$)

考虑到 $1$ 操作很少,只有 $5000$,那么对每个一操作,$\mathcal O(n)$ 修改数字的位置。数字位置只要看和当前要更改的数字比一下,加一减一即可。

代码

#include<bits/stdc++.h>
using namespace std;
int a[8020];
int b[8020];
int main()
{
    freopen("sort.in","r",stdin);
    freopen("sort.out","w",stdout);
    int n,q;
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++)
    {
        b[i]=1;
        for(int j=1;j<i;j++)
        {
            if(a[j]<=a[i])b[i]++;
        }
        for(int j=i+1;j<=n;j++)
        {
            if(a[j]<a[i])b[i]++;
        }
    } 
    while(q--)
    {
        int op;
        scanf("%d",&op);
        if(op==1)
        {
            int x,v;
            scanf("%d%d",&x,&v);
            for(int i=1;i<x;i++)
            {
                if(a[i]<=a[x]&&v<a[i])
                {
                    b[i]++;
                    b[x]--;
                }
                if(a[i]>a[x]&&v>=a[i])
                {
                    b[i]--;
                    b[x]++;
                }
            }
            for(int i=x+1;i<=n;i++)
            {
                if(a[i]<a[x]&&v<=a[i])
                {
                    b[i]++;
                    b[x]--;
                }
                if(a[i]>=a[x]&&v>a[i])
                {
                    b[i]--;
                    b[x]++;
                }
            }
            a[x]=v;
        }
        else if(op==2)
        {
            int x,ans=1;
            scanf("%d",&x);
            printf("%d\n",b[x]);
        }
    }
    return 0;
}

网络连接

模拟题。

按题意先处理字符串即可。

处理之后判断是否合法。

合法再分两种情况:

  • 服务机

    • 有同 ip 的服务机了

      FAIL

    • 没有
      OK,并且自己占位置。

  • 客户机

    • 没有同 ip 的服务机

      FAIL


    • 输出服务机编号。

之后,我们只需要考虑怎么把字符串类型映射到一个数字(服务机编号)上。

诶,map 的翻译就叫映射。

你,懂了吗?

不懂评论或百度,谢谢

再说几个细节:

  1. 特判前导零
  2. 单独的零不算前导零
  3. 可能 ip 地址分割数字的字符不一定是按 . . . . : 排。

代码

#include<bits/stdc++.h>
using namespace std;
int s_to_i(string s)
{
    int ret=0;
    for(int i=0;i<s.size();i++)
    {
        ret=ret*10+(s[i]-'0');
    }
    return ret;
}
bool all_digit(string s)
{
    bool ret=1;
    for(int i=0;i<s.size();i++)
    {
        if(!isdigit(s[i]))ret=0;
    }
    return ret;
}
bool check(string s)
{
    int i=0;
    string a,b,c,d,e;
    a=b=c=d=e="";
    for(;i<s.size();i++)
    {
        if(s[i]=='.')
        {
            i++;
            break;
        }
        a+=s[i];
    }
    for(;i<s.size();i++)
    {
        if(s[i]=='.')
        {
            i++;
            break;
        }
        b+=s[i];
    }
    for(;i<s.size();i++)
    {
        if(s[i]=='.')
        {
            i++;
            break;
        }
        c+=s[i];
    }
    for(;i<s.size();i++)
    {
        if(s[i]==':')
        {
            i++;
            break;
        }
        d+=s[i];
    }
    for(;i<s.size();i++)
    {
        e+=s[i];
    }
    if(a!=""&&b!=""&&c!=""&&d!=""&&e!="")
    {
        if(a[0]=='0'&&a!="0"||b[0]=='0'&&b!="0"||c[0]=='0'&&c!="0"||d[0]=='0'&&d!="0"||e[0]=='0'&&e!="0")return 0;
        if(all_digit(a)&&all_digit(b)&&all_digit(c)&&all_digit(d)&&all_digit(e))
        {
            if(a.size()<=3&&b.size()<=3&&c.size()<=3&&d.size()<=3&&e.size()<=5)
            {
                int aa=s_to_i(a),bb=s_to_i(b),cc=s_to_i(c),dd=s_to_i(d),ee=s_to_i(e);
                if(0<=aa&&aa<=255 && 0<=bb&&bb<=255 && 0<=cc&&cc<=255 && 0<=dd&&dd<=255 && 0<=ee&&ee<=65535)
                {
                    return 1;
                }
                else return 0;
            }
            else return 0;
        }
        else return 0;
    }
    return 0;
}
map<string,int>m;
int main()
{
    freopen("network.in","r",stdin);
    freopen("network.out","w",stdout);
    int n;
    cin>>n;
    string s,t;
    for(int i=1;i<=n;i++)
    {
        cin>>s>>t;
        if(!check(t))
        {
            puts("ERR");
            continue; 
        }
        if(s=="Server")
        {
            if(m[t]!=0)
            {
                puts("FAIL");
            }
            else
            {
                m[t]=i;
                puts("OK");
            }
        }
        else if(s=="Client")
        {
            if(m[t]==0)
            {
                puts("FAIL");
            }
            else
            {
                cout<<m[t]<<endl;
            }
        }
    } 
    return 0;
}

小熊的果篮

先咕着

代码

害嗨嗨

最后修改:2023 年 04 月 23 日
v我50吃疯狂星期四