写管理系统有感+近日题部分题解

  首先自我介绍一下,是一个弱校试图成为acmer的大一。

  现在是2021年1月16日晚,我今天过得很自闭,起因是学校要求我们写一个类似学生信息管理系统的东西,我们组定的是订餐管理系统,讨论很完美,代码实现很艰难。到现在为止依然无法下手,结构体和函数都学得拉胯从没有写过题,指针更是摸鱼,好吧又开始从头学了呗。总之,开始还债,看了一下午,不知所云。

  最近抖机灵的题写得比较多(思维题),让我在这条路上越走越远。

  http://www.fjutacm.com/Problem.jsp?pid=1168(骨牌铺方格)

  http://www.fjutacm.com/Problem.jsp?pid=1717(武士之魂2:不是假发是桂!)

  特别是1717这道题,矩形走到对立点,我越看越熟悉,后面想起就是高中排列组合课上讲过的,直接公式结束。

  http://www.fjutacm.com/Problem.jsp?pid=1871(获取敌情)

  同样的,题目意思很明确,但我一开始没有注意到最后输出结果要是字典序最小,也没有考虑到有相同字符的情况,wa了后才发现样例都没过(眼瞎),后面跑去问学长,获得板子题代码+1

  大概意思就是因为贪心,所以把字符串反转后与原来的比较,若S>S',则将S的尾读进数组,反之则读S的头,相等则无所谓随便读一个。

int N;
char S[N+1];

void solve()
{
    int a = 0, b = N - 1;
    
    while (a <= b)
    {
        bool left = false;
        for (int i = 0; a + <=b; i++)
        {
            if(S[a + i] < S[b - i])
            {
                left = true;
                break;
            }
            else if(S[a + i] >S[b - i])
            {
                left =false;
                break;
            }
        }
        
        if(left) putchar(S[a++]);
        else putchar(S[b--]);
    }
    
    putchar("\n");
}

  依然有些困惑,然后又开始磨磨磨,又到处搜索,得到下面这份代码

#include<cstdio>
#include<cstring>
char str[1005],ttr[1005];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        scanf("%s",&str);
        ttr[n]=0;
        int s=0,t=n-1;
        for(int i=0;i<n;++i)
        {
            int l,r;
            for(l=s,r=t;s<=t&&str[l]==str[r];l++,r--);
            {
                if(str[l]<str[r])
                {
                    ttr[i]=str[s++];
                }
                else
                {
                    ttr[i]=str[t--];
                }
            }    
        }
        printf("%s\n",ttr);
    }
    return 0;
 } 

  确实成功让我过了,但我仍有诸多疑问,比如到底是怎么把字符串去掉一个字符比较剩下字符串的,我想挖个坑等我以后变强了再来填(实在是菜)。

  共勉。

 

posted @ 2021-01-16 21:19  Zoey的小窝  阅读(101)  评论(0)    收藏  举报