程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ 3633 Alices present

ZOJ 3633 Alices present

編輯:C++入門知識

這個應該算是ZOJ的水題了吧!只可惜比賽的時候雖然想到了用STL裡的map,但是因為對map不熟悉所以沒用map搞,於是比賽的時候沒有A掉這道題。有時間要學習整理一下STL一些常用的東西了。
題意:Alice將她的娃娃排成了一排,她要選一段(連續的)娃娃作為禮物送給Marisa,她不希望這些娃娃裡有重復的,所以要變一個程序檢查是否有重復的,如果沒有則輸出“OK”,否則輸出最先出現重復的娃娃編號。
思路:用STL的map的find()判斷是否有重復。
[cpp] 
#include<cstdio> 
#include<map> 
 
using namespace std; 
 
int num[555555]; 
 
map <int,int> mp; 
 
int main() 

    int n,m,u,v; 
    while(scanf("%d",&n)==1) 
    { 
        int i; 
        for(i=1;i<=n;i++) 
        { 
            scanf("%d",&num[i]); 
        } 
        scanf("%d",&m); 
        while(m--) 
        { 
            scanf("%d %d",&u,&v); 
            mp.clear(); 
            for(i=v;i>=u;i--) 
            { 
                if(!mp.count(num[i]))//count()用來查找元素num[i],如果找到返回1,如果沒找到則返回0; 
                //if(mp.end()==mp.find(num[i]))//find()用來查找元素num[i],如果找到返回指向該元素的迭代器,如果沒找到則返回指向map末尾的迭代器;end()返回指向map末尾的迭代器。 
                    mp[num[i]]=1; 
                else 
                    break; 
            } 
            if(i<u) 
                printf("OK\n"); 
            else 
                printf("%d\n",num[i]); 
        } 
        printf("\n"); 
    } 
    return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved