2021天梯赛L1出现的问题

本来L1就很简单,但是L1最后一道题以及L1倒数第三道题怎么也拿不完满分
所以我想赛后把这两道题回顾一下,看看能不能看出问题。

L1倒数第三道题:

吉老师什么什么的【总分:15 得分:14】

题目大意:
吉老师觉得做简单题和签到题没有意义,所以如果他看到了签到题或者简单题就会直接跳过,然后去做难题,如果难题做完了,才去做简单题(这个就像我同学座位旁边的大佬就是这样,L1直接不做、从L2开始,不愧是珠峰争鼎!)
而这个吉老师辨别一个题是否是简单或签到题的方法就是看题目描述中是否有"easy"或者"qiandao"(这里要区分大小写)。如果是Easy就不是简单题了。当时没看到,导致我看样例都有点懵。
输入格式:
第一行输入N、M两个正整数,其中N表示一共有N道题,M表示从开始到现在吉老师已经做了M道题
接下来N行输入,各题目的描述
输入格式:
输入吉老师现在在做的那道题的描述,如果已经全部做完就输入“Wo Ak le”(这里可能不一样,但是不影响题目)


解题思路:
因为这道题是字符串,然后比赛是可以用python提交答案的,所以借着学了一点点python,果断写python。后来发现确实用python可以很人性化的解题,但是我怎么做都有一个点过不了。
而python里面用两个列表,一个列表保存简单题的题目描述,另一个保存难题的题目描述

  • 如果m小于难题的数量,就输入难题中第m个的题目描述
  • 如果m大于或等于了难题的数量,m减去难题的数量
    • 接着用m和简单题的数量比较,如果m大于或等于简单题的数量了就输出AK
    • 否则输入简单题中第m个题目的描述

代码:

n,m=input().split()
n=int(n);m=int(m)
easy=[]
diff=[]
while n!=0:
    n-=1
    s=input()
    if 'easy' in s or 'qiandao' in s:
        easy.append(s)
    else :
        diff.append(s)
if m<len(diff) :
    print(diff[m-1])
else :
    m-=len(diff)
    if m >= len(easy) :
        print('Wo Ak le')
    else :
        print(easy[m])

L1最后一道题

乘法什么的(名字乱取的,主要是不记得了)【总分:20 得分:16】

题目大意:
我想要的到一个长度为n的序列,而这个序列的生成规则如下:

  • 初始确定两个数 a 1 a1 a1 a 2 a2 a2以及n的取值;
  • 第三个数是由a1*a2得来的,如果乘积小于10就直接放到第三个位置,如果大于10就要把乘积的每一位数放在后面,比如:如果a1=3,a2=6,乘积是18,那么第三位数字就是1、第四位数字就是8。接着就是第二个数乘以三个数,而此时会用到刚刚添加进去的1,所以第五位数字就是3,依次类推。

最终输出这个前n项数字就行了。


输入格式:
第一行输如a1,a2以及n


输出格式:
输入一行长度为n的序列,每个数字之间一个空格


解题思路:
我最初使用的是队列和向量来模拟这个过程,结果有两个点答案错误一个点超时
后来我换成双指针来做,结果没有了超时,但是任然有两个点过不了。后面问杨学长,结果是当相乘的时候,乘积有零要注意,会引起什么也添加不了,那么答案就错误了。
那么最后也就是一个指针负责正常推进,一个指针负责后面添加数,最后添加到n的时候就结束循环,然后输出序列就行了。


代码:

#include<iostream>
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int N = 1e6+5;
int a[N],n;
int main(){
	cin>>a[0]>>a[1]>>n;
	for(int i=0,j=2;j<n;++i){
		int tmp=a[i]*a[i+1];
		if(tmp<10) res[j++]=tmp;
		else{
			stack<int>t;
			while(tmp){
				t.push(tmp%10);
				tmp/=10;
			}
			while(t.size()){
				a[j++]=t.top();
				t.pop();
			}
		}
	}
	for(int i=0;i<n;++i){
		cout<<a[i];
		if(i!=n-1) cout<<' ';
	}
	return 0;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值