zoukankan      html  css  js  c++  java
  • CodeForces 368B. Sereja and Suffixes

    思路:这道题是对于一串数字,每给定一个位置,就指出从这个位置往右一直到最后一个元素之间有多少不重复的数字。
    涉及到数字重复问题,想到用map处理。再用动态规划,从后往前依次加一或者不变既可。

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<map>
    using namespace std;
    int a[100005];
    int dp[100005];
    map<int,int> mp;
    
    int main()
    {
        int n,m;
    //  int cnt = 0;
        cin>>n>>m;
        int pos;
        for(int i = 0;i<n;i++)
        {
            cin>>a[i];
        }
        dp[n-1] = 1;
        mp[a[n-1]] = 1;
        for(int i = n-2;i>=0;i--) //要从n-2开始,否则dp[n-1] = dp[n] = 0 那么出现的结果每一个都将少一。
        {
            if(mp[a[i]] == 0)
            {
    
                mp[a[i]] = 1;//标记已经用过的数字 
                dp[i] = dp[i+1]+1;
            }
            else
            {
                dp[i] = dp[i+1];
            } 
        }
        for(int i = 0;i<m;i++)
        {
            cin>>pos;
            cout<<dp[pos-1]<<endl; 
        }
        return 0;
    
    }
    
  • 相关阅读:
    python_捕获异常
    requests二次封装_捕获异常
    python_flask模块
    python_redis模块
    python_requests模块
    使用pstack和gdb调试死锁
    如何编写go代码
    GDB调试命令手册
    core文件相关
    shared_ptr的线程安全性
  • 原文地址:https://www.cnblogs.com/RioTian/p/13505525.html
Copyright © 2011-2022 走看看