网易互娱第三批 笔试记录
/*-----------------------------
第一题
------------------------------*/
#include <iostream>
#include <vector>#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
vector<vector<int>> record;
void count(int num, int index) {
string s = to_string(num);
for (int i = 0; i < s.size(); i++) {
if (s[i] == '0')
continue;
else
record[index][s[i] - '0'] ++;
}
}
int main() {
int m;
cin >> m;
record = vector<vector<int>>(m, vector<int>(10, 0));
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
//cout << a << ',' << b << endl;
int sum = 0;
int seq = 0;
count(a, i);
count(b, i);
while (b != 0) {
int temp = a * (b % 10);
//cout << temp <<endl;
count(temp, i);
temp = temp * pow(10, seq);
seq++;
sum += temp;
b /= 10;
}
count(sum, i);
}
vector<int> res(10, 0);
for (int i = 0; i < m; i++) {
for (int j = 1; j <= 9; j++) {
res[j] += record[i][j];
if (j == 9)
cout << record[i][j] << endl;
else
cout << record[i][j] << ' ';
}
}
int maxIndex = 1;
for (int i = 2; i <= 9; i++) {
if (res[i] > res[maxIndex])
maxIndex = i;
}
cout << maxIndex << endl;
return 0;
}
/*-----------------------------
第二题
------------------------------*/
#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <climits>
using namespace std;
char ass[6] = { 'A', 'S', 'D', 'F', 'G', 'H' };
vector<string> dic;//用于存放所有的组合
vector<bool> visited(6, false);
void permutation(string s) {
if (s.size() == 6) {
dic.push_back(s);
return;
}
for (int i = 0; i < 6; i++) {
if (visited[i] == false) {
visited[i] = true;
s += ass[i];
permutation(s);
s = s.substr(0, s.size() - 1);
visited[i] = false;
}
}
return;
}
int cal(string s1, string s2) {//计算S2排列下的S1花费
unordered_map<char, int> grip;
for (int i = 0; i < s2.size(); i++) {
grip.insert(make_pair(s2[i], i));
}
int cost = 0;
int index = 0;
for (int i = 0; i < s1.size(); i++) {
int cur = grip[s1[i]];
if (cur > index)
cost += cur - index;
else
cost += index - cur;
index = grip[s1[i]];
}
return cost;
}
int main() {
int m;
cin >> m;
getchar();
permutation("");
for (int i = 0; i < m; i++) {
string s;
getline(cin, s);
int res = INT_MAX;
for (int j = 0; j < dic.size(); j++) {
res = min(res, cal(s, dic[j]));
}
cout << res << endl;
}
return 0;
}
#include <vector>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <climits>
using namespace std;
char ass[6] = { 'A', 'S', 'D', 'F', 'G', 'H' };
vector<string> dic;//用于存放所有的组合
vector<bool> visited(6, false);
void permutation(string s) {
if (s.size() == 6) {
dic.push_back(s);
return;
}
for (int i = 0; i < 6; i++) {
if (visited[i] == false) {
visited[i] = true;
s += ass[i];
permutation(s);
s = s.substr(0, s.size() - 1);
visited[i] = false;
}
}
return;
}
int cal(string s1, string s2) {//计算S2排列下的S1花费
unordered_map<char, int> grip;
for (int i = 0; i < s2.size(); i++) {
grip.insert(make_pair(s2[i], i));
}
int cost = 0;
int index = 0;
for (int i = 0; i < s1.size(); i++) {
int cur = grip[s1[i]];
if (cur > index)
cost += cur - index;
else
cost += index - cur;
index = grip[s1[i]];
}
return cost;
}
int main() {
int m;
cin >> m;
getchar();
permutation("");
for (int i = 0; i < m; i++) {
string s;
getline(cin, s);
int res = INT_MAX;
for (int j = 0; j < dic.size(); j++) {
res = min(res, cal(s, dic[j]));
}
cout << res << endl;
}
return 0;
}
/*-----------------------------
第三题
------------------------------*/
没有理清思路