# 63 条题解

• @ 2017-10-31 16:21:13

简单易懂的模拟(。・д・。)

``````#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int m,n,sum=0,error,cs=1,now=1;
int nc[105];
int dc[1005];
int search(int k)
{
while(cs<=n)
{
error=0;
for(int i=1;i<=m;++i)
if(nc[i]!=k)
error++;
if(error==m)
{
sum++;
if(now<=m)
{
nc[now]=k;
now++;
}
else
{
for(int i=1;i<=m-1;++i)
nc[i]=nc[i+1];
nc[m]=k;
}
}
cs++;
search(dc[cs]);
}
return sum;
}
int main()
{
std::ios::sync_with_stdio(false);
memset(nc,-1,sizeof(nc));
memset(dc,0,sizeof(dc));
cin>>m>>n;
if(n==0)
{
cout<<"0";
return 0;
}
if(m==0)
{
cout<<n;
return 0;
}
for(int i=1;i<=n;++i)
cin>>dc[i];
search(dc[1]);
cout<<sum;
return 0;
}
``````
• @ 2021-09-04 15:16:15
``````#include <bits/stdc++.h>
using namespace std;

int n,m,x,ans,l,r,a[1005],b[1005];
int main()
{
cin>>m>>n;
l=0;r=0;
for(int i=1; i<=n; i++){
cin>>x;
if(a[x]==0){
ans++;
r++;
b[r]=x;
a[x]=1;
if (r>m){
l++;
a[b[l]]=0;
}
}
}
cout<<ans;
return 0;
}
``````
• @ 2018-06-02 20:13:55

#include <iostream>
#include <cstring>
using namespace std;
int m[1500],n[1500];
int main(int argc, char** argv)
{
//freopen("d1.in","r",stdin);
//freopen("r1.out","w",stdout);
int m1,n1,k=0,o=0;
cin>>m1>>n1;
for(int i=1;i<=n1;i++)
{
cin>>n[i];
}
memset(m,-1,sizeof(m));
for(int j=1;j<=n1;j++)
{
int tt=1;
for(int l=o;l<m1+o;l++)
{
if(n[j]==m[l])
{
tt=0;
break;
}
}
if(tt)
{
int oo=1;
for(int ll=o;ll<m1+o;ll++)
{
if(m[ll]==-1)
{
m[ll]=n[j];
oo=0;
k++;
break;
}
}
if(oo)
{
m[m1+o]=n[j];
o++;
k++;
}
}
}
cout<<k;
return 0;
}

• @ 2017-10-31 14:43:51

平易近人的朴素代码(｡・`ω´･)

``````#include<iostream>
#include<cstring>
using namespace std;
int a[1000];int b[100];
int main()
{  int m,n,i,k,sum=0,l=0,u=0;
memset(a,-1,sizeof(a)); memset(b,-1,sizeof(b));
cin>>m>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n;i++)
{ for(k=0;k<m;k++)
{ if(a[i]!=b[k])
l++;      }
if(l==k)
{ sum++;
b[u]=a[i];
u++;
if(u==m)
u=0;      }
l=0;    }
cout<<sum;
return 0;}
``````
• @ 2017-10-21 10:00:27

pascal,用循环队列实现

var
m,n:longint;
ram:array[0..127]of longint;//内存
a:longint;
i,h,t,ans:longint;
function search:boolean;//查找是否在内存中
var k:longint;
begin
search:=false;
k:=h;
while k<>t do
begin
if ram[k]=a then exit(true);
inc(k);if k=m then k:=0;
end;
if ram[t]=a then exit(true);
end;
begin
h:=0;t:=0;ans:=1;
ram[t]:=a;//首次读入
for i:=2 to n do
begin
if not(search) then
begin
inc(ans);
inc(t);
if t=m then t:=0;
if t=h then inc(h);
if h=m then h:=0;//调整队列
ram[t]:=a;
end;
end;
writeln(ans);
end.

• @ 2017-10-09 16:27:24
``````#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<iomanip>
#include<cmath>
#include<stack>
#include<cstring>
#define maxa 1000+100
#define inf 300
#define FOR(i,x,y) for(i=x;i<=y;++i)
using namespace std;
int a[maxa];
int main()
{
int m,n;
vector<int >  s;
cin>>m>>n;
int i;
FOR(i,1,n)
{
cin>>a[i];
}
int ans = 0;
FOR(i,1,n)
{
if(s.size()<m){
if(count(s.begin(),s.end(),a[i])==0){
s.push_back(a[i]);
ans++;
}
}
else if(s.size()==m)
{
if(count(s.begin(),s.end(),a[i])==0){
s.erase(s.begin());
s.push_back(a[i]);
ans++;
}
}
}
cout<<ans<<endl;
}

``````
``````#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<iomanip>
#include<cmath>
#include<stack>
#include<cstring>
#define maxa 1000+100
#define inf 300
#define FOR(i,x,y) for(i=x;i<=y;++i)
using namespace std;
int a[maxa];
int s[maxa];
bool check(int l,int r,int t)
{
int i;
FOR(i,l,r-1)
if(s[i]==t)
return true;
return false;
}
int main()
{
int m,n,l,r;
l = r = 1;
cin>>m>>n;
int i;
FOR(i,1,n)
{
cin>>a[i];
}
int ans = 0;
FOR(i,1,n)
{
if(r-l<m){
if(!check(l,r,a[i])){
s[r++] = a[i];
ans++;
}
}
else if(r-l==m)
{
if(!check(l,r,a[i])){
l++;
s[r++] = a[i];
ans++;
}
}
}
cout<<ans<<endl;
}

``````
• @ 2017-09-27 18:37:31
``````//在查找上搞了个小优化
#include<iostream>
using namespace std;
int a[1010],d[1010];
int main()
{
int n,m,i,now=0,num,ans=0;
cin>>m>>n;
for(i=1;i<=n;i++)
{
cin>>num;
if(d[num])
continue;
if(now<m)
{
now++;
ans++;
a[now]=num;
d[num]=1;
}
else
{
ans++;
now++;
d[a[now-m]]=0;
a[now]=num;
d[num]=1;

}
}
cout<<ans;
return 0;
}
``````
• @ 2017-09-02 11:50:18

var m,n,k1,k2,i,s,ans:longint; a,b:array [0..1001] of longint;
begin
k1:=1; k2:=0;
for i:=1 to n do
begin
if a[s]=0 then
begin
if k2-k1+1<m then
begin
inc(k2);
b[k2]:=s;
a[s]:=1;
end else
begin
inc(k2);
b[k2]:=s;
inc(k1);
a[b[k1-1]]:=0;
a[s]:=1;
end;
inc(ans);
end;
end;
writeln(ans);
end.

• @ 2017-07-13 01:18:35

哈？竟然又碰到这种水题？？？

``````#include<iostream>
#include<vector>
using namespace std;
int main(void){
vector<int>memory;
int Capacity,wordsNum,word,count=0;
cin>>Capacity>>wordsNum;
for(int i=0;i<wordsNum;i++){
int flag=0;
cin>>word;
for(const auto p:memory){
if(p==word){
flag=1;
break;
}
}
if(flag){
}
else{
count++;
memory.push_back(word);
if(memory.size()>Capacity){
memory.erase(memory.begin());
}
}
}
cout<<count<<endl;
}
``````
• @ 2016-10-15 10:43:02
``````var
i,m,n,x,j,k:longint;
b:boolean;
a:array[0..1000] of longint;
begin
for i:=1 to n do
begin
for j:=0 to m do
if a[j]=x then b:=false;
if b then
begin  a[k mod m]:=x; inc(k);end;
end;
writeln(k);
end.
``````
• @ 2018-12-12 22:34:36
``````#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
queue<int> q;
int book[1001];
int ans=0,n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>m>>n;
for(int i=0;i<n;i++)
{
int cur;
cin>>cur;
if(book[cur]==0)
{
q.push(cur);
book[cur]=1;
ans++;
if(q.size()>m)
{
book[q.front()]=0;
q.pop();
}
}
}
cout<<ans<<endl;
return 0;
}
``````
• @ 2018-09-27 21:10:40

队列题
var
a:array[1..100001]of boolean;
b:array[1..100001]of longint;//定义队列
begin
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
if not(a[c]) then//判断是否在内存中
begin
a[c]:=true;//进内存
inc(ans);
b[tail]:=c;//入队列
inc(tail);//
if ans>m then//满了就出队列
begin
end;
end;
end;
write(ans);
end.

• @ 2018-09-27 21:10:09

队列题
var
a:array[1..100001]of boolean;
b:array[1..100001]of longint;//定义队列
begin
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
if not(a[c]) then//判断是否在内存中
begin
a[c]:=true;//进内存
inc(ans);
b[tail]:=c;//入队列
inc(tail);//
if ans>m then//满了就出队列
begin
end;
end;
end;
write(ans);
end.

• @ 2018-09-27 20:55:36

var
a:array[1..100001]of boolean;
b:array[1..100001]of longint;
begin
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
if not(a[c]) then
begin
a[c]:=true;
inc(ans);
b[tail]:=c;
inc(tail);
if ans>m then
begin
end;
end;
end;
write(ans);
end.

• @ 2018-09-27 20:55:10

简单的队列问题。
var
a:array[1..100001]of boolean;//检查是否在内存中
b:array[1..100001]of longint;//队列数组
begin
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
if not(a[c]) then//判断是否在队列中
begin
a[c]:=true;
inc(ans);
b[tail]:=c;
inc(tail);
if ans>m then//将队列首移除队列
begin
end;
end;
end;
write(ans);
end.

• @ 2018-05-09 10:58:24

简单的模拟，用queue当词典

``````#include <iostream>
#include <queue>

using namespace std;

bool hasword(int wd, queue<int> que)
{
int k;
while(!que.empty())
{
k = que.front();
que.pop();
if (wd == k)
return true;
}
return false;
}

void pushone(int word, queue<int> &que, int len)
{
if (que.size() < len)
que.push(word);
else // ==
{
que.pop();
que.push(word);
}
}

int main()
{
ios::sync_with_stdio(false);

int m, n, word;
cin >> m >> n;
queue<int> q;
int res = 0;

for (int i = 1; i <= n; i++)
{
cin >> word;
if(!hasword(word, q))
{
pushone(word, q, m);
res++;
}
}

cout << res;
return 0;
}
``````
• @ 2018-03-25 15:27:49

简单队列线性处理。用时6分钟
时间复杂度O(1)

``````#include<iostream>
#include<queue>
using namespace std;
bool book[100000];
int main()
{
int m,n,temp,cnt=0;
queue <int> q;
cin>>m>>n;
for(int i=0;i<n;i++)
{
cin>>temp;
if(book[temp]==0)
{
if(q.size()<m)
{
q.push(temp);
book[temp]=1;
cnt++;
}
else
{
book[q.front()]=0;
q.pop();
q.push(temp);
book[temp]=1;
cnt++;
}
}
}
cout<<cnt;
return 0;
}

``````
• @ 2017-11-15 15:32:50

#include<bits/stdc++.h>
using namespace std;
int main(){
vector <int> a;
int n,m,word,ans=0;
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>word;
if(find(a.begin(),a.end(),word)==a.end()){
a.push_back(word);
ans++;
if(a.size()>m)
a.erase(a.begin());
}
}
cout<<ans;
return 0;
}

• @ 2017-11-15 15:31:57

#include<bits/stdc++.h>
using namespace std;
int main(){
vector <int> a;
int n,m,word,ans=0;
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>word;
if(find(a.begin(),a.end(),word)==a.end()){
a.push_back(word);
ans++;
if(a.size()>m)
a.erase(a.begin());
}
}
cout<<ans;
return 0;
}

• @ 2017-11-06 21:33:39

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
queue<int>q;//开一个m的队列
bool f[1005];//定义布尔型数组，判断真假
int main()
{
int m,n,x,ans=0;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);//读入
if(f[x]==0&&q.size()<m)//标记内存中没有的为假
{
f[x]=1;//标记为真
q.push(x);//入队
ans++;//记录查询次数
}
else//内存中有则为真
if(f[x]==0)
{
f[q.front()]=0; //压入新元素则标记为假
q.pop();//弹出最早入队元素
q.push(x);//入队
f[x]=1;//标记为真
ans++;//记录查询次数
}
}
printf("%d",ans);//输出
return 0;//撒花
}

ID
1774

4

3053

1220

40%

7