FZU 2043 Social Network

题意

能拿出勇气挑战这种题,首先给你致敬。首先请确保你已经读懂了题面,我不会在这里翻译。我会说一些你可能没注意到的地方或者是这个题没有说明白的地方。

注意点

  • 数据是以空行分割的(也就是说保证没有多余空行),并且保证一行一命令,每个case的开头和结尾分别是启动和关机命令。但是,数据并没有保证没有多余空格,所以建议处理命令的时候过滤空格。
  • 关于消息机制,要知道当用户登录的时候显示的消息是未读消息,这一点题面说的很隐晦,而且还有一点,每次登陆和刷新之后,所有消息都会被读掉,也就是说上次显示过的消息,下次就不会显示。更为坑人的一点是,当两个人加为好友之后,一个人说话,系统会向另外一个人发通知,在加好友之前说过的话并不会推送到另外一个人那里。所以这里我们应该才用stack来实现这个消息系统,给每一个用户带一个stack,相当于收件箱,显示完就弹出,完全符合这个题的意图。
  • 关于个人界面的输出,这几乎是本题最大的坑点,首先你要注意排版,强烈建议跑完sample之后使用diff完全比较以防悲剧,同时,你很可能处理错了收件箱为空时的情况。
    你可能以为当收件箱为空时,输出应该是这样的:

    然而答案他却长这样:

    我想你应该知道咋改了。
  • 然后还有一个比较那啥的错误,就是你忘了实现refresh功能,你也没发现,因为sample没有。
  • 常规错误也要查一下,就是执行命令的判断不到位(你应该判断系统开机与否,用户注册情况,用户登录情况,用户重名情况)。

额外测试数据

不妨试一下这个数据。时间戳是我随便写的(因为没影响),如果你用了时间戳排序(虽然并没有需要),可能会有差异。

接下来上代码

模拟题的话注意点到位就不会错,其实代码本体的意义不大。

FZU 2159 WuYou

Proceed big numbers A and B,A and B have same digits(Both A and B have no prelude zeros),A contains uncertain digits marking ‘?’.Find a largest A to make A < B.

策略是先从前往后扫描一遍已知的数位,如果相等的话,放过当前位,如果当前位a>b这时停止扫描,纪录扫到的位置i,记录状态为1,如果当前位a<b这时停止扫描记录扫描到位置i,状态为2.

对与状态1,如果我们不能在i之前找到一个‘?’使这一位正好比b少1,那么无解,找到了的话,就记录这个新位置为i,跳到状态2。

对于状态2,只要令i左边的数位和B一样,右边的数位都是9就可以了。

都完成之后,做一下最终检查,注意只有一位数时首位可以为0,A!=B就可以了。

Scroll to top