zoukankan      html  css  js  c++  java
  • 洛谷 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;
    }
    



  • 相关阅读:
    Java(15) _Runtime类 内存方法
    Mysql(1)_ 基本sql语句
    Java(13)_ 用IO流复制文件
    Java(12)_switch语句
    Java(10) _无参构造方法调用问题
    Java(9) _强制类型转换
    Java(8)_符串常量赋值
    Java(7)_file类的常用方法
    Java(6)_ Runtime类调用exe程序
    Java(5) _类的定义
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270656.html
Copyright © 2011-2022 走看看