前提・実現したいこと
Paizaの「レベルアップ問題集」の「Bランクレベルアップメニュー」での解答にC++のmapを使った解答が乗っていたのですが、C言語でmapを作成することは可能でしょうか?また作成するにはどんな知識が必要でしょうか?
C言語で私が解いた回答は60点で100点には届きませんでした。
https://paiza.jp/works/mondai/prob60/sort_add_9
発生している問題・エラーメッセージ
エラーメッセージはございません。
該当のソースコード
C++
1#include <iostream> 2#include <map> 3#include <vector> 4#include <algorithm> 5using namespace std; 6 7int main() { 8 int n; 9 cin >> n; 10 map<string, int> SD; 11 for (int i = 0; i < n; ++i) { 12 string s; 13 int d; 14 cin >> s >> d; 15 SD[s] += d; 16 } 17vector<pair<int, string>> DS; 18 for (auto iter = SD.begin(); iter != SD.end(); ++iter) { 19 DS.push_back(make_pair(iter->second, iter->first)); 20 } 21 sort(DS.begin(), DS.end(), greater<pair<int,string>>()); 22 for (int i = 0; i < DS.size(); ++i) { 23 cout << DS[i].second << ' ' << DS[i].first << endl; 24 } 25}
C
1#include <stdio.h> 2#include <string.h> 3 4#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0) 5 6int main(void) 7{ 8 int n; 9 scanf("%d", &n); 10 11 12 char s[20][n]; 13 int d[n]; 14 for (int i = 0; i < n; i++) { 15 scanf("%s%d", s[i], &d[i]); 16 //printf("%s %d\n", s[i], d[i]); 17 } 18 //printf("\n"); 19 20 int d_ans[n]; 21 char s_ans[20][n]; 22 int now = 0; 23 24 for (int i = 0; i < n; i++) { 25 for (int j = 0; j < n; j++) { 26 if (i != j && strcmp(s[i], s[j]) == 0) { 27 d_ans[j] = d[i] + d[j]; 28 strcpy(s_ans[j], s[j]); 29 now++; 30 } else if (j && strcmp(s[i], s[j]) != 0) { 31 d_ans[j] = d[j]; 32 strcpy(s_ans[j], s[j]); 33 } else { 34 d_ans[i] = d[i]; 35 strcpy(s_ans[i], s[i]); 36 } 37 } 38 } 39 40 for (int i = 0; i < n - now/2; i++) { 41 for (int j = n - now/2 - 1; j > i; j--) { 42 if (d_ans[j - 1] < d_ans[j]) { 43 swap(int, d_ans[j - 1], d_ans[j]); 44 char t[20]; 45 strcpy(t, s_ans[j - 1]); 46 strcpy(s_ans[j - 1], s_ans[j]); 47 strcpy(s_ans[j], t); 48 } 49 } 50 } 51 52 //printf("%d\n", n - now/2); 53 for (int i = 0; i < n - now/2; i++) { 54 printf("%s %d\n", s_ans[i], d_ans[i]); 55 } 56 57 return 0; 58 59} 60
試したこと
C言語の初心者なのでhash法をどのように改造したらよいか分かりませんでした。
補足情報(FW/ツールのバージョンなど)
piaza.ioを使用。
回答3件
あなたの回答
tips
プレビュー