• 洛谷 P1540 机器 (简单模拟) (stl容器)


    1.朴素算法

    完全没必要把新数赋给word【0】然后所有数往后移一位,

    把【0】位想象成动态的才是较优解法

    维护一个“内存”数组,

    从前往后循环插数,

    多的直接覆盖掉,

    每次覆盖答案加一

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    
    const int MAXN = 1100;
    int txt[MAXN];
    int word[MAXN / 10]; 
    int ans = 0;
    
    
    int main()
    {
    	memset(txt, -1, sizeof(txt));//初始化
    	memset(word, -1,sizeof(word));
    	
    	int m, n;
    	cin>>m>>n;
    	
    	for(int i = 0; i < n; i++)
    	{
    		cin>>txt[i];
    	}
    	
    	int flag = 0;
    	
    	for(int i = 0; i < n; i++)
    	{
    		bool exct = false;
    		
    		for(int j = 0; j < m; j++)//查存在
    		{
    			if(word[j] == txt[i])
    			{
    				exct = true;
    				break;
    			}	
    		}
    		
    		if(!exct)//循环插数
    		{
    			word[flag++] = txt[i];
    			ans ++;
    			if(flag == m)
    				flag = 0;
    		}
    		
    	}
    	cout<<ans<<endl;
    	return 0;
    }

    2.stl容器

    find 查询 erase删除开始位 size查是否溢出 

    操作便利直观

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
    	vector <int> word;//申请容器
    	
    	int m, n, tmp, ans = 0;
    	cin>>m>>n;
    	
    	for(int i = 0; i < n; i++)
    	{
    		cin>>tmp;
    		if(find(word.begin(), word.end(), tmp) == word.end())//如果没查到 
    		{
    			word.push_back(tmp); //向后插入
    			ans ++;
    		}
    		if(word.size() > m) //插入后若溢出
    		{
    			word.erase(word.begin()); //删除头部
    		}
    	}
    	
    	cout<<ans<<endl;
    	
    	return 0;
    }
    



  • 相关阅读:
    POJ 2253 Frogger
    C++map函数的用法
    蓝桥杯 幂方分解
    蓝桥杯 危险系数
    POJ 2234 Matches Game
    POJ 1852 Ants
    POJ 1144 Network
    POJ1419 Graph Coloring
    poj 2573 Bridge(有A、B、C、D四个人,要在夜里过一座桥……)
    小知识(输出源文件的标题和目前执行行的行数)
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270656.html
Copyright © 2020-2023  润新知