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 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 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/
发表评论 取消回复