这题真拿c写的话……真是好……
可以自己写快排,练练指针;
可以自己写文件读入,练练字符串文件输入;
……;
可是以上两个我都不会……
擦……
于是……
果断无耻的python了……
直接上代码……
话说这里借鉴了一个谁谁谁的enumerate的用法~
嗯……不难~
def calculate_name_score(name, n):
name_worth = sum(ord(letter)-64 for letter in name);
return name_worth*n
def main():
name_string = open("names.txt", "r").read();
name_list = [name.strip('"') for name in name_string.split(',')]
name_list.sort()
print(sum(calculate_name_score(name, index+1) for index, name in enumerate(name_list)))
if "__name__" == "__main__":
main()
加上一个据作者本人说超快的……什么……
C and C++ combined, slightly under 30 ms. It's actually easy to read
the input if you know how, then use STL sort:
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
vector<string> nm;
int main () {
FILE * f = fopen ("names.txt", "r");
nm.clear ();
while (not feof(f)) {
char str[100];
fscanf (f, "\"%[a-zA-Z]\",", str);
nm.push_back (string (str));
};
sort (nm.begin (), nm.end ());
long long int score = 0;
for (int i = 0; i < nm.size (); i ++) {
long long int sum = 0;
for (int j = 0; j < nm[i].size (); j ++) {
sum += nm[i][j] - 'A' + 1;
};
score += sum * (i + 1);
};
printf ("%I64d\n", score);
getchar ();
fclose (f);
};
竟然是斯洛伐克的……嘻嘻……