此题为氵题(逃
就是读入每一头奶牛,并累计它们的产奶量,最后按照题意模拟即可,如果一些细节处不懂的可以留言!
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> m;
const string w[] = {"", "Bessie", "Elsie", "Daisy", "Gertie", "Annabelle", "Maggie", "Henrietta"};
struct S{ int a; string b; } x[10];
int cmp(S a, S b) {return a.a < b.a;}
int main() {
int n; cin>>n;
if (n == 1) {string x; cin>> x; cout << x; return 0;}
while (n--) {
string s; int e;
cin >> s >> e;
m[s] += e;
}
for (int i = 1; i <= 7; i++) x[i].a = m[w[i]], x[i].b = w[i];
sort(x + 1, x + 8, cmp);
int p = 1; while (x[p].a == 0) p++;
if (x[p].a == x[7].a) {puts("Tie"); return 0;} //无解
int s = 2;
while (x[s].a == x[s - 1].a && s < 7) s++;
cout << x[s].b << endl;
return 0;
}
但是大家会发现……
这个代码会WA一个点!
这个点就是新增的数据。
那么问题在哪里呢?
问题就出在没加特判。0属于最小的一个值,所以非零正整数中的最小的一个,如果出现了多个,那么结果就应该是Tie。
所以我们要对代码进行改进:
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, int> m;
const string w[] = {"", "Bessie", "Elsie", "Daisy", "Gertie", "Annabelle", "Maggie", "Henrietta"};
struct S{ int a; string b; } x[10];
int cmp(S a, S b) {return a.a < b.a;}
int main() {
int n; cin>>n;
if (n == 1) {string x; cin>> x; cout << x; return 0;}
while (n--) {
string s; int e;
cin >> s >> e;
m[s] += e;
}
for (int i = 1; i <= 7; i++) x[i].a = m[w[i]], x[i].b = w[i];
sort(x + 1, x + 8, cmp);
if (x[1].a == x[7].a) {puts("Tie"); return 0;} //无解
int s = 2;
while (x[s].a == x[s - 1].a && s < 7) s++;
if (x[s].a != x[s + 1].a) cout << x[s].b << endl;
else puts("Tie");
return 0;
}
//0属于最小的一个,所以只要是非零的最小值有两个就是Tie。
关于某大佬送的打表代码……
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n==10) cout<<"Henrietta"<<endl;
else if(n==1) cout<<"Annabelle"<<endl;
else if(n==2) cout<<"Tie"<<endl;
else if(n==15) cout<<"Gertie"<<endl;
else if(n==20) cout<<"Elsie"<<endl;
else if(n==30) cout<<"Elsie"<<endl;
else if(n==40) cout<<"Bessie"<<endl;
else if(n==60) cout<<"Bessie"<<endl;
else if(n==80) cout<<"Elsie"<<endl;
else if(n==100) cout<<"Annabelle"<<endl;
else cout<<"Tie"<<endl;
return 0;
}
这至少让我们知道了数据范围
真正的面向答案编程!!!
hhhhhhhhhhhhhh
我觉得是面向失业编程hhhh
hhh
大佬想问下unordered_map和普通的map有什么区别吗,之前一直用的都是map没用过unordered_map
听说……unordered_map是O(1)的,map是O(log n)的
暴力就完事了
嗯嗯,辛苦了,还来看我这垃圾题解hh
看看大佬题解, 康康有没有方便方法
阿巴
我给你换了一种写法:
Oh!Thanks!
这玩意更简洁,
大佬当时是不是没有想到(逃)可以不用排序,遍历找第二小的就可以啦
好的,谢谢!
我想到的思路,可惜不会实现,终于看到这样写的大佬了,膜拜
for(auto &t:mp)
for(auto t:mp)
//这两个有啥区别啊,请问下大佬
一个是引用,一个好像是拷贝,引用效率高一点
明白了,谢谢!
可以用map吗?感觉map不行啊
em……我试试看
主要是感觉map有点麻烦,可能是我不熟悉map吧
不太可以,map是根据第一键值排序的吧,除非重载,但是你重载还不如一个sort更舒服
em……我感觉我map用习惯了,
因为比较短,但是我感觉莫名其妙unordered_map会在我的Dev-C++上CE……这个打表是手动测试所有数据得来的吗
嗯嗯,是下面那个
xian de * teng的人得来的,话说你们怎么注意力都在打表上打表代码我咋看不懂呢?不明白这打表代码是啥意思?
hh就是根据n来输出答案,例如n=100的那个数据答案为Annabelle
哇塞,还可以这样,真的tql!!hh
联系y总,加大数据范围,hhh
呃呃呃以后别用这种方法AC题目,没有效果,这个代码
纯属娱乐,还是要用正解思路啊yxc:封禁用户我把你封了,你竟敢用打表欺骗同学!啊哈哈哈哈,这数据范围真的也是无敌了。真强啊,tql