写管理系统有感+近日题部分题解
首先自我介绍一下,是一个弱校试图成为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; }
确实成功让我过了,但我仍有诸多疑问,比如到底是怎么把字符串去掉一个字符比较剩下字符串的,我想挖个坑等我以后变强了再来填(实在是菜)。
共勉。