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]];
		}
	}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值