HDU 1004(順便補充map的用法)
阿新 • • 發佈:2018-12-31
if (a[k].num>max)
{
max = k;
}
這裡直接存的是max是k的值
應該是存max,num最大的值
然後存關於這個s所在的位置正解應該是
if (a[k].num>max)
{
max = a[k].num;
ans=k;
}
AC過的程式碼但是就是很奇怪了,我自己測試的時候會出現問題
比如
輸入
5
red
red
blue
blue
blue
輸出
red
這也能ac就是很奇怪了
恩這道題的正解應該用map來寫就會很方便了。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
struct color{
int num=0;
string cc;
};
color a[10001];
int main()
{
//freopen("t.txt","r",stdin);
int n, m;
string s;
while (cin >> n&&n)
{
bool em;
int k;
//memset(a, 0, sizeof(a));
int j = 0;
int max = 0;
int ans=0;
for (int i = 0; i < n; i++)
{
cin >> s;
em = true;
if (i == 0)
{
a[0].cc = s;
a[0].num++;
j++;
}
//判斷已有的存不存在
for (k = 0; k < j; k++)
{
em = true;
if (s == a[k].cc)
{
a[k].num++;
if (a[k].num>max)
{
max = a[k].num;
ans=k;
}
em = false;
break;
}
}
//不存在就存下了
if (em&&k){
a[j].cc = s;
a[j].num++;
j++;
//if (a[j].num > max)
//max = j;
}
}
cout << a[ans].cc << endl;
}
return 0;
}
後來大佬和我說恩沒有清零num所以會這樣,但是這樣的程式碼竟然可以AC神奇;emmm
這是修改後沒問題能AC的
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
struct color{
int num=0;
string cc;
};
color a[10001];
int main()
{
//freopen("t.txt","r",stdin);
int n, m;
string s;
while (cin >> n&&n)
{
bool em;
int k;
//memset(a, 0, sizeof(a));
int j = 0;
int max = 0;
int ans=0;
for (int i = 0; i < n; i++)
{
a[i].num=0;
cin >> s;
em = true;
if (i == 0)
{
a[0].cc = s;
j++;
}
//判斷已有的存不存在
for (k = 0; k < j; k++)
{
em = true;
if (s == a[k].cc)
{
a[k].num++;
if (a[k].num>max)
{
max = a[k].num;
ans=k;
}
em = false;
break;
}
}
//不存在就存下了
if (em&&k){
a[j].cc = s;
a[j].num++;
if (a[j].num>max)
{
max = a[j].num;
ans=j;
}
j++;
}
}
cout << a[ans].cc << endl;
}
return 0;
}
總結一下:還是自己的邏輯不清晰。emmmm
這下面是用map寫的AC的:
//map的使用
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
int n;
string s;
int max,ans;
while(cin>>n&&n)
{
map<string,int>color;//每次重新輸入重置
max=0;//同理如上
for(int i=0;i<n;i++)
{
cin>>s;
color[s]++;
}
for(map<string,int>::iterator it=color.begin();it!=color.end();++it)
{
if(it->second > max) {//數字部分
max=it->second;
s=it->first;
}
}
cout<<s<<endl;
}
return 0;
}
順便補充一下map的知識——以下基本來自搜狗百科emmm
map搜狗百科