2024.3.15 学习日志

文章讲述了作者在编程比赛中解决字符串匹配问题的过程,初始代码的性能不佳,因时间复杂度过高而失败,通过回顾和优化认识到使用更高效的方法,如优先向右或向下选择,最终学习到了关于算法和时间复杂度的重要教训。
摘要由CSDN通过智能技术生成

期间放了4天假。

今天下午打vp。

T1第一眼不会,先写了T2。

然后T2过了样例,因为OJ炸了,导致没办法测,就以为自己过了。

回过来写了T1,发先其实每次1,只会移动到现在的2倍位置,于是就切掉了。

OJ终于好哩,但遗憾的是T2 TLE。

发现自己写的是假O(N),实际上 string 的时间复杂度导致我的代码变成了O(N^2)。

之后写了两份也没能优化出来。

就结束了。

晚上。

讲评过后,发现自己就是个。

可以知道,只有一次向下的机会。

于是我们每次要么向右,要么向下。

每次选择较小的走。

相同的时候优先向右。

向下过了一次就只能向右了。

code:

#include<bits/stdc++.h>
//#define int long long
#define debug puts("原始人,启洞!");
using namespace std;
const int N = 2e5 + 10;
char a[N], b[N];
string ans;
int main() {
//	freopen(".in", "r", stdin);
//	freopen(".out", "w", stdout);
	int T;
	cin >> T;
	while(T--){
		int n, res = 0;
		cin >> n;
		ans = "";
		scanf("%s%s", a + 1, b + 1);
		// for(int i = 1; i <= n; i++) cout << a[i];cout << endl;
		// for(int i = 1; i <= n; i++) cout << b[i];
		int i;
		for(i = 1; i < n; i++){
			if(a[i + 1] > b[i]){
				ans += a[i + 1];
				break;
			}else if(a[i + 1] < b[i]){
				ans += a[i];
				res = 0;
			}else if(a[i + 1] == b[i]){
				ans += a[i];
				res++;
			}
		}
		if(i == n) ans += a[i];
		for(; i <= n; i++){
			ans += b[i];
		}
		cout << ans << endl << res + 1 << endl;
	}
    return 0;
}//by hwl

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值