杨思越
(灵珠敖丙)
1
问题就是,我把题目的样例不按换行输入后,输出的答案是正确的!!!
然后我复制,再输入,就只能输出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;
}
/*
*/
图片如下:



样例1复制输入结果:

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

所以换行到底怎么了??????????为什么换行不能输入空格可以???????????
是我的电脑的问题还是代码的问题??????????
而且我手打样例输入的3个样例结果都是对的,代码如果解决了这个诡异的问题提交上去应该可以AC啊。。。
1 个赞
杨思越
(灵珠敖丙)
13
现在改一下需求: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;
}
/*
*/
吴梓峤
(道海孤舟)
16

那么,这里的条件应该是if(ans==a[i]&&i==lst[a[i]]),首先判断a[i]是否等于ans,而且要判断他是不是最后出现的
杨思越
(灵珠敖丙)
17
我是这样想的
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]]表示的是遍历最后一个位置
呃呃呃呃
吴梓峤
(道海孤舟)
19
那请问你有判断你现在的点i一定是lst[a[i]]吗?
吴梓峤
(道海孤舟)
20
他只有遍历到lst[a[i]]才算是遍历到最后一个点。so要满足i遍历到lst[a[i]]而且ans==a[i]才是满足情况的