关于map的概念与习题

来源:互联网 发布:中日韩 影响力 知乎 编辑:程序博客网 时间:2024/06/03 22:43

map的概念:申明非原创请戳点击打开链接

pta

点击打开链接

#include<iostream>#include <map>#include <stdio.h>#include <string.h>using namespace std;int b[55];int main(){    int n,i,m,l=0;    map<long long int,int>M;//map<string,int>这个构造比较慢,所以改了,不然超时    long long s1,s2,ans;    scanf("%d",&n);   getchar();   while(n--){   scanf("%lld %lld",&s1,&s2);   M[s1]++;M[s2]++;   }   int t=0;   map<long long int,int>::iterator it;   for(it=M.begin();it!=M.end();it++)   if(t<it->second){   t=it->second;   ans=it->first;   }for(it=M.begin();it!=M.end();it++){if(t==it->second){l++;if(ans>it->first)ans=it->first;}}if(l==1)printf("%lld %d\n",ans,t);   else   printf("%lld %d %d\n",ans,t,l);    return 0;}
pta   利用了map内部的有序性

点击打开链接

#include<iostream>#include <map>#include <stdio.h>#include <string.h>using namespace std;int main(){    int n,m,i,j,l=0,tem;    map <int,int>M;scanf("%d",&n);    for(i=0;i<n;i++){   scanf("%d",&m);   if(m!=i||m==0)   M[m]=i;   }map<int,int>::iterator it;while(M.size()>1){for(it=M.begin();it!=M.end();it++){if(M[0]!=0){tem=M[0];M[0]=M[tem];M[tem]=tem;M.erase(tem);l++;}else{if(it->first!=it->second){M[0]=it->second;M[it->first]=0;l++;}}}}printf("%d\n",l);    return 0;}
pta   QQ账户的申请与登录

点击打开链接

#include<iostream>#include <map>#include <stdio.h>#include <string.h>#include <string>using namespace std;int b[55];int main(){    int n,i,m,l=0;    string s1,s2;    char c;    map<string,string>M;    cin>>n;   getchar();   while(n--){   cin>>c>>s1>>s2;   if(c=='N'){   if(M.find(s1)==M.end()){   M[s1]=s2;   cout<<"New: OK"<<endl;   }elsecout<<"ERROR: Exist"<<endl;}    else if(c=='L'){   if(M.find(s1)==M.end())   cout<<"ERROR: Not Exist"<<endl;   else if(M[s1]==s2)   cout<<"Login: OK"<<endl;   else   cout<<"ERROR: Wrong PW"<<endl;   }   }       return 0;}

点击打开链接

#include<iostream>#include <map>#include <stdio.h>#include <string.h>using namespace std;int main(){    int n,k,m,p,i,j,l=0;    long long int s1,s2;    char ss1[20],ss2[20];    map <long long int,int>M;scanf("%d %d",&n,&k);    while(n--){   s1=0;   scanf("%s %d",ss1,&m);   for(i=0;i<18;i++){   if(ss1[i]=='x')   ss1[i]='9'+1;   s1=s1*11+(ss1[i]-'0');   }   if(!M[s1]){   if(m <k)m=k;M[s1]=m;}else{if(m <k)m=k;M[s1]+=m;}   }   scanf("%d",&p);   for(j=0;j<p;j++){   scanf("%s",ss2);   s2=0;   for(i=0;i<18;i++){   if(ss2[i]=='x')   ss2[i]='9'+1;   s2=s2*11+(ss2[i]-'0');   }   if(M.find(s2)==M.end())   printf("No Info\n");   else   printf("%d\n",M[s2]);   }    return 0;}

关于解决冲突有线性和二次方,以后再来补,到饭点啦,啦啦啦



0 0
原创粉丝点击