本人晚上调题已发疯,求助

问题就是,我把题目的样例不按换行输入后,输出的答案是正确的!!!
然后我复制,再输入,就只能输出1!!!!!!!!!!!!
发现我n能输入,a数组全都没有输入!!!
发疯代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int a[200005];
bool flg;
int lst[200005];

int main(){
	cin>>n;
	/*for(int i=1;i<=n;i++){
		cin>>a[i];
		cout<<a[i];
	}*/
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(!a[i]){
			flg=1;
		}
	}
	/*for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;*/
	if(!flg){
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;i++){
		lst[a[i]]=i;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[lst[a[i]]]==ans){
			ans=a[lst[a[i]]]+1;
		}
	}
	cout<<ans;
	return 0;
	//cout<<"我是奶龙~"<<endl;
	//cout<<"我才是奶龙~"<<endl; 
}
/*

*/

图片如下:
image
image
image
样例1复制输入结果:
image

样例1手打无换行输入结果:
image

所以换行到底怎么了??????????为什么换行不能输入空格可以???????????
是我的电脑的问题还是代码的问题??????????
而且我手打样例输入的3个样例结果都是对的,代码如果解决了这个诡异的问题提交上去应该可以AC啊。。。

1 个赞

不用这么复杂

1 个赞

这题样例格式不对,要手打才行

1 个赞

哈喽 @CZF2919

1 个赞

不解决直接交,样例有\EOF,数据没有

1 个赞

哈喽 @冯俊骁

1 个赞

哈喽 @徐淏宸1

1 个赞

710的czf

7??的FJX

哈喽 @我命由我不由天

707

哦哦

现在改一下需求:WA60求助!!!

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int a[200005];
bool flg;
int lst[200005];

int main(){
	cin>>n;
	/*for(int i=1;i<=n;i++){
		cin>>a[i];
		cout<<a[i];
	}*/
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(!a[i]){
			flg=1;
		}
	}
	/*for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;*/
	if(!flg){
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;i++){
		lst[a[i]]=i;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[lst[a[i]]]==ans){
			ans=a[lst[a[i]]]+1;
		}
	}
	cout<<ans;
	return 0;
	//cout<<"我是奶龙~"<<endl;
	//cout<<"我才是奶龙~"<<endl; 
}
/*

*/

image
这里的问题

@杨思越 你这个逻辑没搞通啊

image
那么,这里的条件应该是if(ans==a[i]&&i==lst[a[i]]),首先判断a[i]是否等于ans,而且要判断他是不是最后出现的

我是这样想的
lst数组就是每个a[i]出现的最后位置,直接遍历就行,因为后面的会覆盖前面的
就是假如a[i]=x,a[j]=x,i<j
那么先lst[a[i]]=i,再lst[a[j]]=j,由于值相同,会覆盖掉
所以lst[a[i]]表示的是a[i]最后出现的位置
a[lst[a[i]]表示的是遍历最后一个位置
呃呃呃呃

wait a mininute

那请问你有判断你现在的点i一定是lst[a[i]]吗?

他只有遍历到lst[a[i]]才算是遍历到最后一个点。so要满足i遍历到lst[a[i]]而且ans==a[i]才是满足情况的