社区讨论
切水题爆零?
P1420最长连号参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @m315wgqi
- 此快照首次捕获于
- 2024/11/03 13:38 去年
- 此快照最后确认于
- 2025/11/04 15:28 4 个月前
前言:本体不是题解,是求助!!!
先来看题目,这题目一看就知道:欸,不就是我们亲爱的快慢指针吗,随随便便AC好吧。
我的思路是这么想的:由于这个题目给的范围太大,开这么大数组100%RE,然后就用 vector nums[n],输入完了再定义一个left和fast指针对吧,让然后就循环再定义两个函数用max比较对吧,最后输出。
这边就是第一次爆零的CODE:
CPP#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> nums(n);
for(int i = 0 ; i < n ; i ++){
cin >> nums[i];
}
int slow = 0, fast = 1;
int ans = 0, cnt = 0;
while(fast < n){
if(nums[fast] - nums[fast - 1] == 1){
cnt++;
fast++;
}
else{
ans = max(ans, cnt);
cnt = 0;
slow = fast;
fast++;
}
}
ans = max(ans, cnt);
cout << ans << endl;
return 0;
}
看来看去没看出来啥大毛病,放到编译器上一运行,欸?
CPP5
1 2 3 4 5
4
--------------------------------
Process exited after 3.579 seconds with return value 0 (15.62 ms cpu time, 604 KB mem used).
Press ANY key to exit...
怎么是4,于是想到一个投机取巧的办法:
CPP#include <iostream>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
vector <int> nums(n);
for(int i = 0 ; i < n ; i ++){
cin >> nums[i];
}
int slow = 0, fast = 1;
int ans = 0, cnt = 0;
while(fast < n){
if(nums[fast] - nums[fast - 1] == 1){
cnt ++;
fast ++;
}
else{
ans = max(ans, cnt);
slow = fast;
fast ++;
}
ans = max(ans, cnt);
}
ans = max(ans, cnt);
cout << ans + 1 << endl; //这边加1输出
return 0;
}
不错,拿到一个点,20分。但是还是没A。。。
求解必关!!!!!!!!!!!!!
回复
共 6 条回复,欢迎继续交流。
正在加载回复...