题解【CF886B】Vlad and Cafes

本题是模拟题。

我们可以用b数组记录每个数字在a数组中出现的最后位置,然后从0到2·10^5依次寻找最后一次出现最早的数(注意是0!),最后统计输出即可。

AC代码:

 1 #include <bits/stdc++.h>//万能头文件
 2 
 3 using namespace std;//使用标准名字空间
 4 
 5 inline int read()//快速读入
 6 {
 7     int f=1,x=0;
 8     char c=getchar();
 9 
10     while(c<'0' || c>'9')
11     {
12         if(c=='-')f=-1;
13         c=getchar();
14     }
15 
16     while(c>='0' && c<='9')
17     {
18         x=x*10+c-'0';
19         c=getchar();
20     }
21 
22     return f*x;
23 }
24 
25 int n,a[200005]/*输入数组*/,b[200005]/*存储最后一次出现的位置*/,m=200000007/*出现最早的位置*/,ans/*答案*/;
26 
27 int main()
28 {
29     n=read();//输入
30 
31     for(register int i=1; i<=n; i++)
32     {
33         a[i]=read();
34 
35         b[a[i]]=i;//记录a[i]出现的最晚位置
36     }
37 
38     for(register int i=0; i<=200000; i++) //枚举最后一次出现最早的数,注意是从0开始!
39     {
40         if(b[i]>0 && b[i]<m)//如果这个数出现过且位置比当前最小值还小
41         {
42             m=b[i];//记录最小位置
43 
44             ans=i;//记录答案
45         }
46     }
47 
48     printf("%d",ans);//输出答案
49 
50     return 0;//结束
51 }

原文地址:https://www.cnblogs.com/xsl19/p/10450232.html