20161201(中间数)
代码1
现将数字从小到大排序得到values[],然后用vector<int> minNum,vector<int> maxNum 来表示每个数的比它小的数目和比它大的数目。若知道了minNum[i],那么minNum[i+1]是下面这么算的。
1 | if(values[i] == values[i+1]){ |
对于maxNum的计算也是类似。
1 | //freopen("D://input.txt","r",stdin); |
20161202(工资计算)
代码1
这题把不同税前工资分段的税后工资分段算出来就可以了,然后if else
1 | //freopen("D://input.txt","r",stdin); |
20161203(权限查询)
代码1
当记录角色有哪些权限时,使用unordered_map<string,unoredered_map<string,int>> roleToAuth,我们用unordered_map<string,set<string>> userToRole 来表示每个用户有哪些角色。
当查询的时候,我先查是否有这个用户,然后再查询是否有这个权限。
1 | //freopen("D://input.txt","r",stdin); |
注意28行,因为在输入每个角色的很多权限时,可能出现auth1:1 和 auth1:2这两个输入,这是要比较1和2中较大者作为auth1的等级,一开始没有考虑这点时90分,考虑了就100分。还有60行,我被user,auth,authName给弄晕了,本来应该根据user来查询的,我写成根据authName来查询,而且我还忘了输入cin了。
20161204(压缩编码)
代码1
假设输入有n个点,那么考虑范围就是[0, n*2-2],下面是递推公式。
其中W(i,j) 表示$a_i$ 到 $a_j$ 范围内的频率相加之和。
所以可以利用动态规划的方法,先算使得j-i=0的,再算j-i=3的,一直到j-i=n*2-2的。
1 | //freopen("D://input.txt","r",stdin); |
这道题告诉我一个很重要的事实:能不用vector就不用vector,直接中静态数组,这样就是20分的区别,因为这题用vector就恰好超时,丢掉了那20分。