7 条题解
-
1
#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
#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
#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
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
C++
#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
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
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
- 上传者