首页 > 其他 > 详细

题解【Codeforces886B】Vlad and Cafes

时间:2019-02-28 14:44:32      阅读:165      评论:0      收藏:0      [点我收藏+]

本题是模拟题。

我们可以用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 }

 

题解【Codeforces886B】Vlad and Cafes

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!