机器翻译


#include<bits/stdc++.h> using namespace std; int x,y,q,l,s,ans,b[100001],a[100001]; int main(){ cin>>x>>y; for(int i=1;i<=y;i++) { cin>>q; if(a[q]==0) { ans++; b[ans]=q; a[q]=1; if(ans>x) { l++; a[b[l]]=0; } } } cout<<ans; return 0; }
考试时:这道题很常规,常见的思路是将他们读入,达到m个就从第一个开始替换反正是按先后读入的。
考试后:然后这道题我只得了90分,具体原因如下:
一,我需要在它的长度大于m时再考虑替换,如果我不分情况,直接for循环1到m的话很简单,他会把本来是空位算作0,这时候你就无法读入0。换言之,只要是前期读入了0的数据,我都会出错,所以得90分只是我运气好。
然后在洛谷上搜才发现这道题我做过的,方法完全不一样,就是记录每一个长度下最后输入的一个值。将每个出现过的数做标记。当长度大于m时,再从长度为1开始将标记重新清零。
这道题很简单,但是一定要细心。
 
原文地址:https://www.cnblogs.com/xxmxxm/p/10938676.html