2021-08-21 考试总结

总述

总分: 290;
排名: 3;
A题数: 2。

题目

T1-面试

题目
考试分数:100
分析

  • 首先,这是一道比较简单的题目,类似于桶排
  • 其次,要注意判断条件,不要弄混。

做法
核心code环节

//储存答案 string ans[4]= { "zhuAC", "failed", "offer", "sp offer" }; //处理方法(在线) for(int i=0;i<s.size();i++) { if(s[i]=='A') num[1]++; else if(s[i]=='B') num[2]++; else if(s[i]=='C') num[3]++; else num[4]++; } if(num[4]!=0 || num[3]>=2) cout<<ans[1]<<endl; else if(num[4]==0 && num[1]>=3) cout<<ans[3]<<endl; else cout<<ans[2]<<endl;

坑点

  1. 要清空计数器
  2. 要写好判断条件

T2-Excel计数法

题目
考试分数:50
分析

  • 首先,这是一道比较隐蔽的进制转换题(26进制);
  • 其次,为了方便,我们要像上一题一样储存答案
  • 最后,要处理好字母Z

做法
核心code环节

//储存,注意Z在0的位置 char s1[27]= { 'Z','A','B','C','D','E','F','G', 'H','I','J','K','L','M','N', 'O','P','Q','R','S','T', 'U','V','W','X','Y' }; //处理过程 string ans; while(n) { ans=s1[n%26]+ans;//因为是从个位开始,所以应添加在前面,相当于逆序输出。 int p=n; n/=26; if(p%26==0) n--;//是26的倍数,如果不减1,以后会一直为 Z。 }

坑点

  1. 处理字母Z
  2. p%26==0的情况;
  3. 逆序。

T3-纸牌游戏

题目
考试分数:100
分析

  • 首先,这是一道贪心题;
  • 其次,我们思考:怎样才能让留下的人尽可能多?当然是每个人取牌都取剩余牌数最少的人,这样的话我们只需再输入完后 s o r t sort sort一下就好;
  • 最后,我们思考:怎么判断游戏能不能继续?因为 s o r t sort sort了,所以第 i i i个人的牌一定小于第 i + 1 i+1 i+1个人的牌。这样,如果第 i i i各人剩余的牌数如果大于n-i,那就说明就算后面n-i个人都拿了第 i i i个人的牌,这个人也不会被淘汰。这样就可以求出答案为:n-i+1

做法
核心code环节

sort(a+1,a+n+1); for(int i=1;i<=n;i++) { if(a[i]>=n-i) {//因为已经排序,所以如果这一句成立,说明就算第a[i]个人的牌被后面的人拿了,也能再自己拿回来。后边的人就会无限进行游戏。 printf("%d",n-i+1); return 0; } }

坑点
本题的坑点只有一个: s o r t sort sort

T4-涨薪

题目
考试分数:40
分析

  • 首先,这是一道考察贪心+快速幂的题;
  • 其次,因为要 m m m年后发出的工资最多,所以应让当前工资更高的人 x x x y y y的名额;
  • 最后,如果 m m m等于1,那就要加上 C C C等级的工资。

做法
核心code环节

//快速幂 long long digui(long long a,long long b) { if(b==0) return 1; if(b%2==1) return (a*digui(a,b-1))%mod; else return (digui(a,b/2)*digui(a,b/2))%mod; } //从大到小排序 sort(a+1,a+n+1); reverse(a+1,a+n+1); //处理过程 for(int i=1;i<=x;i++) {//x个人工资每年翻三倍 ans=ans+digui(3,m)*a[i]; ans=ans%mod; } for(int i=x+1;i<=x+y;i++) {//y个人工资每年翻两倍 ans=ans+digui(2,m)*a[i]; ans=ans%mod; } if(m==1) for(int i=x+y+1;i<=n;i++) {//因为剩下的人在第二年就会被开除,所以只有当m=1时要加上他们的工资。 ans=ans+a[i]; ans=ans%mod; }

坑点
本题的坑点只有一个:剩下的人只有在第一年会结算工资

T5-富有数

题目
考试分数:0
分析

  • 首先,这是一道dp+map的题目;
  • 其次,因为题目中数字最大到 1 0 9 10^9 109,所以应用离散化或者map来记录次数
  • 最后,献上状态转移公式: d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] ∗ m p [ a [ i ] ] + d p [ i − 1 ] [ j ] dp[i][j]=dp[i-1][j-1]*mp[a[i]]+dp[i-1][j] dp[i][j]=dp[i1][j1]mp[a[i]]+dp[i1][j]

做法
核心code环节

for(int i=1;i<=ans;i++) { for(int j=1;j<=i;j++) { dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*mp[a[i]]; } }

坑点
本题的坑点就是处理富有数的个数


__EOF__

本文作者best_brain
本文链接https://www.cnblogs.com/best-brain/p/18006582.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   best_brain  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示