codeforce 2A Winner
来源:互联网 发布:单片机蓝牙原理 编辑:程序博客网 时间:2024/04/29 19:53
点击打开链接codeforce 2A
思路:模拟
分析:
1 题目要求的在游戏结束后最大的点的值的玩家,或者具有相同点值的情况下最早出现大于等于max的玩家。
2 很明显由于名次是一直在改变的,所以我们无法预测最后的max和已经最先出现大于等于max的玩家。所以这里我们采用做两次的模拟,第一次先算出max并且把最后点是max的玩家标记为1;第二次模拟找到标记为1的玩家里面最先出现大于等于max的玩家,然后输出即可。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>using namespace std;#define MAXN 1010#define N 50int n , pos;int vis[MAXN];int p[MAXN];char input[MAXN][N];char name[MAXN][N];map<string , int>mp;int main(){ int max , cnt; while(scanf("%d%*c" , &n) != EOF){ /*第一次输入*/ for(int i = 0 ; i < n ; i++) scanf("%s %d%*c" , input[i] , &p[i]); /*第一次模拟*/ max = 0 , pos = 0; for(int i = 0 ; i < n ; i++){ int flag = -1; for(int j = 0 ; j < pos ; j++){ if(!strcmp(name[j] , input[i])){ flag = j; break; } } if(flag == -1) strcpy(name[pos++] , input[i]); mp[input[i]] += p[i]; } /*做标记*/ memset(vis , 0 , sizeof(vis)); for(int i = 0 ; i < pos ; i++) max = max < mp[name[i]] ? mp[name[i]] : max; for(int i = 0 ; i < pos ; i++){ if(max == mp[name[i]]) vis[i] = 1; } /*第二次模拟*/ mp.clear(); for(int i = 0 ; i < n ; i++){ mp[input[i]] += p[i]; int tmp = 0; for(int i = 0 ; i < pos ; i++){ if(tmp < mp[name[i]]){ tmp = mp[name[i]]; cnt = i; } } /*找到最先出现的玩家*/ if(tmp >= max && vis[cnt]) break; } printf("%s\n" , name[cnt]); } return 0;}
- codeforce 2A Winner
- CF 2A Winner
- codeforces 2A Winner
- CODEFORCES 2A-Winner
- coderforce 2A-Winner
- codeforces 2A. Winner
- Codeforces 2A Winner
- codeforces 2A Winner
- codeforces 2-A Winner
- codeforces 2A.Winner
- Codeforces 2A. Winner
- 2A - Winner
- Codeforces 2A :winner
- CodeForces 2A-Winner
- 【codeforces#2A】Winner
- cf 2a Winner
- cf #2 A. Winner
- 2A. Winner
- js跨域访问
- 天猫11 自动 顶红包 VC 实现
- apped
- VBScript 小笔记
- 配准的时候控制点的数目该如何确定?
- codeforce 2A Winner
- C++静态(static)成员 静态(static)成员函数总结
- RVDS v2.2破解
- KVM launcher
- 神枪手都是子弹喂出来的
- javascript跨域有两种情况
- Geodatabase的基础知识(之二)
- Geodatabase的基础知识(之一)
- 操作系统开发 - 正在研究kvm