Noj - 在线强化训练4

NOJ(Online Judge)是一个基于网络的开放式程序设计和算法训练平台,它提供丰富的题库,支持多种语言,能够测试算法的时间和空间复杂度。NOJ的出现极大地方便了程序员和算法爱好者的学习和思考,也成为校内ACM、OI竞赛的重要训练工具和数据来源。本文将结合NOJ-在线强化训练4这道题来介绍NOJ的使用方法、功能和实际应用。

一、NOJ的使用方法

1. 注册账号

首先,访问NOJ网址(https://www.luogu.com.cn/),在右上角找到注册按钮,进入注册页面,填写相关信息并提交。注册成功后,可用新注册的账号登录NOJ。

2. 寻找题目

NOJ的题库十分丰富,给出了ACM、OJ等各种不同类型的题目,可以从题库搜索中找到自己感兴趣或想要练习的题目。找到题目后,可以查看题目的详细信息、输入输出格式、样例输入输出等内容,还可以在线提交代码并查看评测结果。

3. 提交代码

在题目页面中,可以提交自己的代码。NOJ支持多种语言,如C++、Java、Python等,只需在代码编辑框中输入代码,点击提交按钮,系统会进行评测,判断代码的正确性和时间空间复杂度。评测结果会在评测记录中显示,并给出详细的评测信息。

二、NOJ的功能介绍

1. 题库

NOJ的题库提供了丰富的题目资源,包括数学、图论、字符串、贪心、搜索、动态规划等多个分类,同时还提供了各种难度的题目。

2. 编辑器

NOJ的代码编辑器支持多种语言,包括C++、Java、Python等,同时支持语法高亮、自动补全等功能,方便编写代码。

3. 评测记录

NOJ的评测记录可以查看所有提交的代码的评测结果和详细信息,同时还可以下载代码、查看代码提交时间、评测用时等信息。

4. 排名

NOJ提供了排名系统,能够根据提交的代码数量、通过的题目数量等信息对用户进行排名。同时还提供了排名赛功能,让用户可以参加多人在线比赛,比赛排名也在该页面显示。

三、题目案例:NOJ-在线强化训练4

下面以NOJ-在线强化训练4这道题为例,介绍如何使用NOJ解决问题。

题目链接:https://www.luogu.com.cn/problem/AT3879

题目描述:

给出两个字符串S和T,每次操作可以将S中某个位置的字符删除。求至少需要多少次操作才能使S变成T的子串。如果无法变成,输出-1。

输入格式:

第一行输入一个字符串S,长度不超过100000。

第二行输入一个字符串T,长度不超过10000。

输出格式:

一个整数表示需要的最小操作次数。

样例输入:

babab

ba

样例输出:

1

解题思路:

该题可以使用双指针法解决,设左右指针分别为l和r,初始都指向S串的左端点。S中对应T子串中的字符可以留在S中,其余字符需要删除。每次将右指针r向右移动一位,同时删除S中l~r之间第一个不属于T子串的字符,即S[l~r]中第一个不在T中的字符。若可得到子串T,则更新result=min(res, r-l+1)。

代码实现:

C++代码:

```C++

#include

using namespace std;

int main(){

string s,t;

cin>>s>>t;

int l=0,r=0,len=t.size();

int res=s.size()+1;

while(r if(s[r]==t[r-l]){

r++;

}

else{

while(l<=r&&s[r]!=t[r-l]){

l++;

}

if(l>r){

r++;

}

else{

res=min(res, r-l+1);

r++;

}

}

}

if(res==s.size()+1){

cout<<-1< }

else{

cout< }

return 0;

}

```

Java代码:

```Java

import java.util.*;

public class Main {

public static void main(String []args){

Scanner scan = new Scanner(System.in);

String s = scan.nextLine();

String t = scan.nextLine();

int l=0,r=0,len=t.length();

int res=s.length()+1;

while(r if(s.charAt(r)==t.charAt(r-l)){

r++;

}

else{

while(l<=r&&s.charAt(r)!=t.charAt(r-l)){

l++;

}

if(l>r){

r++;

}

else{

res=Math.min(res, r-l+1);

r++;

}

}

}

if(res==s.length()+1){

System.out.println(-1);

}

else{

System.out.println(res);

}

}

}

```

Python3代码:

```Python

s = input().strip()

t = input().strip()

l = r = ans = 0

while r < len(s):

if s[r] == t[r-l]:

r += 1

else:

while l<=r and s[r]!=t[r-l]:

l += 1

if l > r:

r += 1

else:

ans = min(ans, r-l+1) if ans != 0 else r-l+1

r += 1

print("-1" if ans == 0 else ans)

```

总结:

NOJ网站提供了丰富的题目资源,可以通过这个平台来更好地练习编程和算法,提高编程与算法水平。NOJ的使用方法简单、易用,通过题目的训练,可以很好的理解算法思想,熟悉常见算法的实现,达到提升自己编程和算法技能的目的。同时,NOJ也为ACM比赛提供了一个良好的训练平台。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(93) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部