7 条题解

  • 1
    @ 2022-7-18 15:22:32

    image

    #include<bits/stdc++.h>
    using namespace std;
    struct stu{
    	string name;
    	int sc;
    }a[1000];
    bool cmp(stu a,stu b){
    	if(a.sc==b.sc)return a.name<b.name;
    	else return a.sc>b.sc;
    }
    int main(){
    	int n,m,s=0,b=0,h=0;
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)cin>>a[i].name>>a[i].sc;
    	sort(a+1,a+n+1,cmp);
    	for(int i=1;i<=n;i++){
    		if(a[i].sc==a[i-1].sc){
    			b++;
    			cout<<s<<":"<<a[i].name<<endl;
    			if(s<=m)h++;
    		}
    		else {
    			s++;
    			b++;
    			cout<<b<<":"<<a[i].name<<endl;
    			if(b<=m)h++;
    		}
    	}
    	cout<<h;
    }
    
    • -1
      @ 2022-7-17 20:43:19
      #include<bits/stdc++.h>
      using namespace std;
      int n,m,ans,cnt = 1,mc,tf = 1,num;//ans是最后有多少个人拿到奶茶,cnt计数用的,mc是名次,tf是同等分数的人
      struct P{
          string name;
         int id,score;
      }people[10000];
      bool cmp(P p1,P p2){//先判断分数是否相同
          if(p1.score!=p2.score) return p1.score>p2.score;//若可以比较直接返回
          else return p1.name<p2.name;//同分则比较字母序
      }
      int main(){
          cin >> m >> n;
          for(int i=1;i<=m;i++)
              cin>>people[i].name>>people[i].score;
          sort(people+1,people+m+1,cmp);
          while(cnt<=m)
          {   //最开始的people[0].score = 0
              if(people[cnt].score == people[cnt - 1].score)//如果和上一个分数相同,同分人数+1,能喝到奶茶的人+1,同时记录该人的名次
              {
                  tf ++;
                  num++;//喝奶茶的人数
                  people[cnt].id = mc;
              }else{//如果不同,名次加上上一次同分的人数,同时新的分数的人为1而不是0,记录该人名次
                  mc += tf;
                  people[cnt].id = mc;
                  tf = 1;
                  if(mc > n && ans == 0)ans = num;//判断现在的名次是否超过n,如果超过,此时num喝奶茶的人数还没有+1,已经不满足条件,直接记录答案
                  num ++;//至于ans == 0这个条件可以手动去掉找不同,和我的循环方式有关
              }
              ++cnt;//计数器+1
          }
          for(int i=1;i<=m;i++)
              cout<<people[i].id<<":"<<people[i].name<<endl;
          cout << ans;
          return 0;
      }
      
      • -1
        @ 2022-7-16 19:40:53
        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
        	int n,m,k=0,b,sum=0;
        	cin>>n>>m;
        	string s[n+1];
        	int a[n+1],p[n+1];
        	for(int i=1;i<=n;i++)
        	{
        		cin>>s[i]>>a[i];
        	}
        	for(int i=1;i<n;i++)
        	{
        		if(a[i]<a[i+1])
        		{
        			swap(a[i],a[i+1]);
        			swap(s[i],s[i+1]);
        		}
        	}
        	for(int i=1;i<=n;i++)
        	{
        		if(a[i]==a[i+1])
        		{
        			if(s[i][0]>s[i+1][0])
        			{
        				swap(a[i],a[i+1]);
        				swap(s[i],s[i+1]);
        			}
        			else 
        			if(s[i][0]==s[i+1][0])
        			{
        				if(s[i][1]>s[i+1][1])
        				{
        					swap(a[i],a[i+1]);
        					swap(s[i],s[i+1]);
        				}
        			}
        		}
        	}
        	for(int i=1;i<=n;i++)
        	{
        		
        		if(a[i]==b)
        		{
        			cout<<k<<":"<<s[i]<<endl;
        			p[i]=k;
        		}
        		else
        		{
        			cout<<i<<":"<<s[i]<<endl;
        			k++;
        			b=a[i];
        			p[i]=i;
        		}
        	}
        	for(int i=1;i<=n;i++)
        	{
        //		cout<<p[i]<<" ";
        		if(p[i]<=m)sum++;
        	}
        	cout<<sum;
        }
        
        • -2
          @ 2024-6-21 9:18:46

          Python

          m, n = map(int, input().split())
          
          counter = {
              name: int(stars) for name, stars in (input().split() for _ in range(m))
          } # 输入姓名+星数
          
          newdt = sorted(counter.items(), key=lambda item: (-item[1], item[0])) # 根据星数和姓名排序
          
          pre_stars = newdt[0][1] # 记录同排名的星数
          pre_rank = 1 # 记录同排名
          rank = 1 # 记录排名
          sum = 0
          
          for (name, stars) in newdt:
              if stars == pre_stars:
                  print(f"{pre_rank}:{name}")
              else:
                  print(f"{rank}:{name}")
                  pre_stars = stars
                  pre_rank = rank
              if n >= pre_rank:
                  sum += 1
              rank += 1
          
          print(sum)
          
          • -2
            @ 2023-4-10 19:04:57

            C++

            Florance

            #include <bits/stdc++.h>
            using namespace std;
            
            struct Node{ //s是名字,w是分数,n是排名
                string s; int w; int n;
            } a[1001];
            
            bool cmp(Node a, Node b) {
                if(a.w != b.w) return a.w > b.w; //如果分数不同,按分数排名序
                else return a.s < b.s; //否则按名字排序
            }
            
            int main()
            {
                int n, m;
                cin >> n >> m;
                for(int i = 0; i < n; i++) {
                    cin >> a[i].s >> a[i].w; //输入名字和分数
                }
                sort(a, a + n, cmp); //排序
                for(int i = 0; i < n; i++) { //处理同分时的排名
                    if(i == 0) a[i].n = i + 1;
                    else if(a[i].w == a[i - 1].w) a[i].n = a[i - 1].n;
                    else a[i].n = i + 1;
                    cout << a[i].n << ":" << a[i].s << endl; //输出
                }
                int ans = 0;
                for(int i = 0; i < n; i++) {
                    if(a[i].n <= m) ans+=1; //统计可以拿奶茶的人数
                }
                cout << ans;
                return 0;
            }
            
            • -2
              @ 2022-7-17 19:51:07
              using namespace std;
              struct p{
              	int a;
              	string id;
              	int ming;
              }sh[10000];
              int main(){
              	int n,m;
              	cin>>m>>n;
              	for(int i=1;i<=m;i++){
              		cin>>sh[i].id>>sh[i].a;
              	}
              	for(int i=1;i<m;i++){
              		for(int j=m;j>1;j--){
              			if(sh[j].a>sh[j-1].a)swap(sh[j],sh[j-1]);
              		}
              	}
              	int b=sh[1].a;
              	int geshu=1;
              	int mingci=1;
              	sh[1].ming=1;
              	for(int i=2;i<=m;i++){
              		if(sh[i].a==b){
              			geshu++;
              		}
              		else if(sh[i].a!=b||i==m){
              			mingci=mingci+geshu;
              			geshu=1;
              			b=sh[i].a;
              		}sh[i].ming=mingci;
              	}
              	for(int i=1;i<m;i++){
              		if(sh[i].a ==sh[i+1].a ){
              			if(sh[i].id>sh[i+1].id)swap(sh[i],sh[i+1]);
              		}
              	}
              	int f=0;
              	for(int i=1;i<=m;i++){
              		if(sh[i].ming<=n)f++;
              		cout<<sh[i].ming<<":"<<sh[i].id<<endl;
              	}
              	cout<<f;
              	return 0;
              }
              

              这惊人的长度

              • -2
                @ 2022-7-17 16:24:28
                using namespace std;
                const int N=10000;
                int n[N],m[N];
                string s[N];
                int main()
                {
                	int a,b,sum=1,num=1,h=0;
                	string p,o;
                	cin>>a>>b;
                	for(int i=0;i<a;i++)
                		cin>>s[i]>>n[i];
                	for(int i=1;i<a;i++)
                	{
                		for(int u=a-1;u>0;u--)
                		{
                			if(n[u]>n[u-1])
                			{
                				swap(n[u],n[u-1]);
                				swap(s[u],s[u-1]);
                			}
                		}
                	}
                	for(int i=0;i<a;i++)
                	{
                		if(n[i]!=n[i+1])
                		{
                			m[i]=sum;
                			if(sum<=b)
                			h++;
                			sum++;
                			num++;
                			if(sum<num)
                			sum=num;
                		}
                		else if(n[i]==n[i+1])
                		{
                			m[i]=sum;
                			num++;
                			if(sum<=b)
                			h++;
                		}
                	}
                	for(int u=1;u<=100;u++)
                	{
                	    for(int i=0;i<a;i++)
                	  {
                		if(m[i]==m[i+1])
                		{
                		    o=s[i];
                		    p=s[i+1];
                		    int len1=o.length(),len2=p.length();
                		    for(int k=0;k<len1-1;k++)
                		    {
                		    	int g=o[k],x=p[k];
                	           if(g<x)
                			   break;
                			   else if(g>x) 
                			   {
                			   	swap(s[i],s[i+1]);
                			   	break;
                			   }
                			}
                		}
                  	  }
                }
                    for(int i=0;i<a;i++)
                    {
                    	cout<<m[i]<<":"<<s[i]<<endl;
                	}
                	cout<<h;
                	return 0;
                }
                
                • 1

                信息

                ID
                736
                时间
                1000ms
                内存
                256MiB
                难度
                6
                标签
                递交数
                603
                已通过
                177
                上传者