63 条题解
-
2伊人 LV 8 @ 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; }
-
12021-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; }
-
12018-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;
} -
12017-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;}
-
12017-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
readln(m,n);
h:=0;t:=0;ans:=1;
read(a);
ram[t]:=a;//首次读入
for i:=2 to n do
begin
read(a);
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. -
12017-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; }
-
12017-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; }
-
12017-09-02 11:50:18@
var m,n,k1,k2,i,s,ans:longint; a,b:array [0..1001] of longint;
begin
readln(m,n);
k1:=1; k2:=0;
for i:=1 to n do
begin
read(s);
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. -
12017-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; }
-
12016-10-15 10:43:02@
var i,m,n,x,j,k:longint; b:boolean; a:array[0..1000] of longint; begin readln(m,n);fillchar(a,sizeof(a),-1); for i:=1 to n do begin read(x);b:=true; 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.
-
02018-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; }
-
02018-09-27 21:10:40@
队列题
var
head,tail,c,m,n,i,ans:longint;
a:array[1..100001]of boolean;
b:array[1..100001]of longint;//定义队列
begin
readln(m,n);
head:=1;tail:=1;
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
read(c);
if not(a[c]) then//判断是否在内存中
begin
a[c]:=true;//进内存
inc(ans);
b[tail]:=c;//入队列
inc(tail);//
if ans>m then//满了就出队列
begin
a[b[head]]:=false;
inc(head);
end;
end;
end;
write(ans);
end. -
02018-09-27 21:10:09@
队列题
var
head,tail,c,m,n,i,ans:longint;
a:array[1..100001]of boolean;
b:array[1..100001]of longint;//定义队列
begin
readln(m,n);
head:=1;tail:=1;
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
read(c);
if not(a[c]) then//判断是否在内存中
begin
a[c]:=true;//进内存
inc(ans);
b[tail]:=c;//入队列
inc(tail);//
if ans>m then//满了就出队列
begin
a[b[head]]:=false;
inc(head);
end;
end;
end;
write(ans);
end. -
02018-09-27 20:55:36@
var
head,tail,c,m,n,i,ans:longint;
a:array[1..100001]of boolean;
b:array[1..100001]of longint;
begin
readln(m,n);
head:=1;tail:=1;
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
read(c);
if not(a[c]) then
begin
a[c]:=true;
inc(ans);
b[tail]:=c;
inc(tail);
if ans>m then
begin
a[b[head]]:=false;
inc(head);
end;
end;
end;
write(ans);
end. -
02018-09-27 20:55:10@
简单的队列问题。
var
head,tail,c,m,n,i,ans:longint;
a:array[1..100001]of boolean;//检查是否在内存中
b:array[1..100001]of longint;//队列数组
begin
readln(m,n);
head:=1;tail:=1;
fillchar(a,sizeof(a),false);
for i:=1 to n do
begin
read(c);
if not(a[c]) then//判断是否在队列中
begin
a[c]:=true;
inc(ans);
b[tail]:=c;
inc(tail);
if ans>m then//将队列首移除队列
begin
a[b[head]]:=false;//移除内存
inc(head);
end;
end;
end;
write(ans);
end. -
02018-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; }
-
02018-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; }
-
02017-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;
} -
02017-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;
} -
02017-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;//撒花
}