第1题     铅笔     时限:1s 空间:256m
 
 
 
桌面有n个盒子,第i个盒子有a[i]支铅笔。
 
 你想要得到尽量多的铅笔,但是如果某两个盒子有相同数量的铅笔,那么你是不能同时拥有这两个盒子的。
 
 问你最多可以得到多少支铅笔。
 
  
 
 
  
  
输入格式
 
   
  第一行,一个整数n。 1<=n<=50。
 
  第二行,n个整数,第i个整数是a[i]。 1<=a[i]<=10。
 
   
   
  
  
  
输出格式
 
   
  一个整数。
 
   
   
  
  
  
输入/输出例子1
 
  输入:
 
  4
 
  5 2 5 3
 
   
   
  输出:
 
  10
 
   
   
  
  
  输入/输出例子2
 
  输入:
 
  3
 
  5 5 5
 
   
   
  输出:
 
  5
 
  #include<bits/stdc++.h>
using namespace std;
long long n,t,a[1000005],s; 
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>t;
    	a[t]=1;
	}
    for(int i=1;i<=50;i++){
    	if(a[i]==1)s+=i;
	}
	cout<<s;
    return 0;
}
 
  第2题     号码牌     时限:5s 空间:256m
 
   
   
张老师班上有 N 位同学参加秋季运动会,老师为同学们定制了比赛专属号码牌,编号为 1∼N。
 
    
 
   生产号码牌的商家发货后,张老师发现号码牌少了 1 个号码,但是统计后发现,确实有 N 个号码牌,且所有号码牌的编号都在 [1,N]的范围内,但是有一个号码被错误的印刷成了另一个号码。
 
    
 
   请编程帮老师找出这些号码牌中,缺失的号码和被错误印刷了 2次的号码。
 
    
   
   
    
    
输入格式
 
     
    第 1 行读入整数 N,代表号码牌的数量;
 
     
 
    第 2行读入 N 个号码,用空格隔开。
 
     
     
    
    
    
输出格式
 
     
    输出 2 个整数,用空格隔开,第 1 个整数,代表缺失的号码,第 2 个整数代表被印刷了 2 次的号码。
 
     
     
    
    
    
输入/输出例子1
 
    输入:
 
    6
 
    2 1 5 2 4 6
 
     
     
    输出:
 
    3 2
 
     
     
    
    
    样例解释
 
     
    数据范围
 
     
 
    对于 100%的测试数据,满足 5≤N≤100000;
 
     
 
    所有测试点均满足读入的 N 个号码牌的数值均在 [1,N] 的范围内,且缺失的号码牌及被错误印刷 2次的号码牌均是唯一的。
 
    #include<bits/stdc++.h>
using namespace std;
long long n,a[100000+5],b[100000+5],x,x1;
int main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
    	scanf("%lld",&a[i]);
    	b[a[i]]++;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++){
		if(b[i]==0)x=i;
		if(b[i]==2)x1=i;
	}
	cout<<x<<" "<<x1;
    return 0;
}
 
    第3题     侦察     时限:1s 空间:256m
 
     
     
小红通过简单的计算就求出了密码打开了沙盘,于是双方使用沙盘进行了攻城模拟。现在小红有n个侦察兵,要从两支部队选派2个侦察兵去侦察小蓝部队驻守的城市。为了使得侦察兵能更好配合完成工作,小红认为这2个侦察兵所在的部队编号必须相差为m。
  现在已知n个侦察兵的部队编号,请问小红有多少不同的选择方案(同一部队的不同士兵视为同一方案)?
 
      
     
     
      
      
输入格式
 
       
      第1行,2个整数n,m(2<=n<=100000,1<=m<=50)。
 
      第2行,n个整数,第i个整数表示第i个侦察兵的部队编号(1<=部队编号<=1000)。
 
       
       
      
      
      
输出格式
 
       
      一个整数,表示不同的方案数。
 
       
       
      
      
      
输入/输出例子1
 
      输入:
 
      5  6
 
      1  7  2  8  12
 
       
       
      输出:
 
      2
 
       
       
      
      
      
输入/输出例子2
 
      输入:
 
      6  8
 
      1  1  9  9  2  8
 
       
       
      输出:
 
      1
 
       
       
      
      
      样例解释
 
       
      样例1解释:第1个侦察兵可以跟第2个侦察兵搭档,第3个侦察兵可以跟第4个侦察兵搭档,所以有2种不同选择方案。
 
      #include<bits/stdc++.h>
using namespace std;
int main(){
    int n,k;
    cin>>n>>k;
    int a[n+1];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    int len=unique(a+1,a+n+1)-a;
    int count=0;
    for(int i=1;i<len;i++){
        for(int j=i+1;j<=len;j++){
            if(a[j]-a[i]==k){
                count++;
                break;
            }
        }
    }
    cout<<count;
    return 0;
}
 
      第4题     战功     时限:1s 空间:256m
 
       
       
通过侦察,小红已经基本了解了对方的兵力部署情况,现在派遣特种部队进攻小蓝的模拟城市。通过几十分钟的攻守战模拟,小红的特种部队顺利攻下了小蓝的A城。在战斗中,每个模拟士兵都立下不小战功。现在小红想根据每个士兵的战功排名来论功行赏。
    例如有四名士兵,战功值分别为50、80、50、30分,则80分的士兵为第一名,50分的两名士兵均为第二名,30分的士兵为第四名。
请你编写一个程序,计算每个士兵在这种排名方式之下的名次。
 
        
       
       
        
        
输入格式
 
         
        第一行为一个整数n,表示参战的士兵数,1<=n<=1000000,第二行为n个整数,表示每位士兵的战功值(战功值<=1000000)。
 
         
         
        
        
        
输出格式
 
         
        一行,表示每位士兵的名次,一个空格隔开。
 
         
         
        
        
        输入/输出例子1
 
        输入:
 
        4
 
        50 80 50 30
 
         
         
        输出:
 
        2 1 2 4
 
        #include<bits/stdc++.h>
using namespace std;
long long n,a[1000005],b[1000005],maxx=0,minn=1000005,xx=1,x;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[a[i]]++;
		maxx=max(maxx,a[i]),minn=min(minn,a[i]);
	}
	for(int i=maxx;i>=minn;i--){
		if(b[i]>=1){
			x=b[i];
			b[i]=xx;
			xx+=x;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<b[a[i]]<<" ";
	}
	return 0;
}
 
        第5题     社团交集     时限:5s 空间:256m
 
         
         
HJ小学信息学社团每个同学都有且仅有一个数字编号(1~1000),现在帅气的吴老师准备举办n个学习项目,信息学社团的每个同学都参加项目且可以参加多个项目。问:同时参加所有项目的同学有哪些?请从小到大输出他们的编号。
 
         
         
          
          
输入格式
 
           
          第一行有1个正整数n(1<=n<=100)表示有n个学习项目。
 
          接下来的n行每行第一个整数ki(1<=ki<=1000)表示第i个项目的同学人数,后面有ki个正整数,表示项目中同学的编号(不超过1000)。
 
           
           
          
          
          
输出格式
 
           
          输出同时参加所有项目的同学的编号,从小到大。
 
           
          
          
          输入/输出例子1
 
          输入:
 
          3
 
          5 6 2 8 3 9
 
          4 1 2 3 6
 
          4 6 8 2 1
 
           
           
          输出:
 
          2  6
 
          #include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005],b[100005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>m;
		for(int j=1;j<=m;j++){
			cin>>a[i];
			b[a[i]]++;
		}
	}
	for(int i=1;i<=1000;i++){
		if(b[i]==n)cout<<i<<" ";
	}
    return 0;
}
 
          第6题     优秀的作品     时限:5s 空间:256m
 
           
           
博爱小学举办书法大赛,学校一共收到了 N 个同学的作品,并给作品编号 1∼N。
 
           这 N幅作品被放到了学校的展厅展览,并请全校同学进行公开投票。投票结束,学校收到了 M张投票,每张投票投给了 1幅参赛的作品;学校预计评比出一等奖、二等奖、三等奖 各 1名;
 
           由于可能存在多个优秀作品得票数相同的情况,因此最终实际获奖名额可能会比预计多,这种情况下,学校会增加相应奖项等级的获奖名额。
 
           比如,如果有 3位同学得票数并列第 1,这种情况学校会颁发出 3 个一等奖。
 
           请编程统计出一等奖、二等奖、三等奖获奖作品的编号。
 
            
           
           
            
            
输入格式
 
             
            第 1行读入 2 个整数 N 和 M,分别代表参赛作品的数量和投票的数量;
 
            第 2行读入 M 个整数,第 i 个整数 Ai 代表了第 i张投票投给了编号为 Ai 的作品。
 
             
             
            
            
            
输出格式
 
             
            输出 3 行,每行输出若干整数,用空格隔开;
 
            第 1 行输出一等奖获奖作品的编号,第 2 行输出二等奖获奖作品的编号,第 3行输出三等奖获奖作品的编号;
 
            如果某个奖项有多个作品获得,那么该奖项的获奖作品编号按照编号值从小到大的顺序输出。
 
             
             
            
            
            
输入/输出例子1
 
            输入:
 
            8 15
 
            3 3 3 4 4 4 6 6 8 8 7 7 5 1 2
 
             
             
            输出:
 
            3 4
 
            6 7 8
 
            1 2 5
 
             
             
            
            
            
输入/输出例子2
 
            输入:
 
            10 16
 
            6 5 7 2 2 1 1 7 4 2 2 7 7 2 4 4
 
             
             
            输出:
 
            2
 
            7
 
            4
 
             
             
            
            
            样例解释
 
             
            3 号作品和 4 号作品各获得 3票,并列第 1,评选为一等奖;
 
            6 号作品、8 号作品、7 号作品各获得 2 票,并列第 2 ,评选为二等奖;
 
            5 号作品、1 号作品、2 号作品各获得 1 票,并列第 3 ,评选为三等奖;
 
            数据范围
 
            对于 100%的数据,6≤N,M≤100000,1≤Ai≤N;
 
            测试数据确保统计后一等奖、二等奖、三等奖至少各有 1 人。
 
            #include<bits/stdc++.h>
using namespace std;
long long n,m,t,a[100005],maxx1,maxx2,maxx3; 
int main(){
	scanf("%lld%lld",&m,&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&t);
		a[t]++;
	}	
	for(int i=1;i<=m;i++){
		maxx1=max(maxx1,a[i]);
	}
	for(int i=1;i<=m;i++){
		if(a[i]!=maxx1){
			maxx2=max(maxx2,a[i]);
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]!=maxx1&&a[i]!=maxx2){
			maxx3=max(maxx3,a[i]);
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]==maxx1){
			cout<<i<<" ";
		}
	}
	cout<<'\n';
	for(int i=1;i<=m;i++){
		if(a[i]==maxx2){
			cout<<i<<" ";
		}
	}
	cout<<'\n';
	for(int i=1;i<=m;i++){
		if(a[i]==maxx3){
			cout<<i<<" ";
		}
	}
    return 0;
}
 
            第7题     餐饮服务质量打分     时限:1s 空间:256m
 
             
             
假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并如下格式输出餐饮服务质量调查结果。
 
             Grade  Count   Histogram
 
             1       5          *****
 
             2       10        **********
 
             3       7          *******
 
             ···
 
              
             
             
              
              
输入格式
 
               
              40个数。
 
               
               
              
              
              
输出格式
 
               
              11行。Grade、Count、Histogram和各个数据都占一个制表符(8位)。
 
              输出格式:printf("%-8d%-8d",i,a[i]);
 
               
               
              
              
              输入/输出例子1
 
              输入:
 
              5 7 9 8 7 6 8 9 10 7
 
              9 5 8 10 9 6 8 5 9 7
 
              6 10 5 9 8 9 7 7 9 8
 
              8 6 9 9 9 8 8 7 9 5
 
               
               
              输出:
 
              Grade      Count      Histogram
 
              1       0       
 
              2       0       
 
              3       0       
 
              4       0       
 
              5       5       *****
 
              6       4       ****
 
              7       7       *******
 
              8       9       *********
 
              9       12        ************
 
              10        3       ***
 
              #include<bits/stdc++.h>
using namespace std;
int x,a[15];
int main(){
	for(int i=0;i<40;i++){
		cin>>x;
		a[x]++;
	}
	printf("Grade      count      Histogram\n");
	for(int i=1;i<=10;i++){
		printf("%-8d%-8d",i,a[i]);
		for(int j=0;j<a[i];j++)cout<<"*";
		cout<<'\n';
	}
	return 0;
}
 
              第8题     集卡册     时限:1s 空间:256m
 
               
               小胡喜欢收集奥特曼卡片,对每个奥特曼的技能,身高,体重都如数家珍。
 
               为了能把这些卡片带给小伙伴们炫耀,他还特地买了一本集卡册。集卡册一共能装 16 张卡片,每次出门他都会装满这本集卡册,但是有时粗心的小胡会放入两张相同的卡片。
 
               如下所示:
 
                
 
               
 
               上面每个大写字母代表一种卡片,其中第一张和第五张相同。
 
                
                
               
                
                
输入格式
 
                 
                输入 16个连续的大写字母,代表放入的 16 张卡片的种类。
 
                 
                 
                
                
                
输出格式
 
                 
                如果 16 张卡片各不相同,输出 different。
 
                如果有 2张卡片的种类一样,以由小到大的顺序输出 2 张相同卡片的编号, 2 个位置序号之间以空格隔开。
 
                 
                 
                
                
                
输入/输出例子1
 
                输入:
 
                BCDEGHJKLBAUIOPQ
 
                 
                 
                输出:
 
                1 10
 
                 
                 
                
                
                
输入/输出例子2
 
                输入:
 
                ABCDEFGHIJKLMNOP
 
                 
                 
                输出:
 
                different
 
                 
                 
                
                
                样例解释
 
                 
                【样例 1 解释】
 
                十六张卡片中第一张和第十张都是 B,所以答案是 1 10。
 
                【数据说明】
 
                相同的卡片最多只会有一种,且最多只有2 张。
 
                #include<bits/stdc++.h>
using namespace std;
string s;
long long s1=0,a[3];
bool f=0;
int main(){
	cin>>s;
	for(long long i=0;i<s.size();i++){
		for(long long j=i+1;j<s.size();j++){
			if(s[i]!=s[j]){
				f=1;
			}
			else {
				cout<<i+1<<" "<<j+1;
				return 0;
			}
		} 
	}
	if(f)printf("different");
    return 0;
}
 
                第9题     三连击     时限:1s 空间:256m
 
                 
                 
将 1,2,…,9共 9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!。
 
                  
                 
                 
                  
                  
输入格式
 
                   
                  三个数,A,B,C (A<B<C)。
 
                   
                   
                  
                  
                  
输出格式
 
                   
                  若干行,每行 3个数字。按照每行第一个数字升序排列。
 
                   
                   
                  
                  
                  
输入/输出例子1
 
                  输入:
 
                  1 2 3
 
                   
                   
                  输出:
 
                  192 384 576
 
                  219 438 657
 
                  273 546 819
 
                  327 654 981
 
                   
                   
                  
                  
                  输入/输出例子2
 
                  输入:
 
                  1 4 6
 
                   
                  输出:
 
                  No!!!
 
                  #include<bits/stdc++.h>
using namespace std;
long long a[1000005],s1,s2,s3,l,x1,x2,x3,s;
int main (){
    cin>>x1>>x2>>x3;
    for(int i=1;i<=1000/x3;i++){
        s1=i*x1,s2=i*x2,s3=i*x3; 
        if(s2>999||s3>999){
        	break;
		}
        for(int j=1;j<=3;j++){
            a[s1%10]++;
            s1/=10;
        }
        for(int j=1;j<=3;j++){
            a[s2%10]++;
            s2/=10;
        }
        for(int j=1;j<=3;j++){
            a[s3%10]++;
            s3/=10;
        }
        for(int j=1;j<=9;j++){
        	if(a[j]!=1){
				l=1;
				break;
			}
		}
        for(int j=1;j<=9;j++){
        	a[j]=0;
		}
        if(!l){
			cout<<i*x1<<' '<<i*x2<<' '<<i*x3<<'\n';
			s++;
		}
        else l=0;
    }
    if(!s)cout<<"No!!!";
    return 0;
}