第一题Accepted,很直接的想法,有Z就是一个0,有n就是一个1.
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
int N;
string str;
cin>>N;
cin>>str;
map<char,int> mp;
for(char mem:str){
if(mem=='z'){
if(!mp.count(mem))
mp.insert(pair<char,int>('z',1));
else
mp['z']++;
}
if(mem == 'n'){
if(!mp.count(mem))
mp.insert(pair<char,int>('n',1));
else
mp['n']++;
}
}
while(mp['n']){
cout<<1<<" ";
mp['n']--;
}
while(mp['z']){
cout<<0<<" ";
mp['z']--;
}
return 0;
}
第二题Accepted。题意是输入了一个乘法表,要根据乘法表的数据来推算乘法表的因数是哪些。并且这个乘法表的对角线被删除了,因为对角线开方就直接得到了因数。然后再纸上推导了一下:
有了一个元素的值,就可以根据乘积找到所有因数。但是出现了一点问题:1、测试用例的数据大小应该使用long long醒来存储 2、测试用例55之后的数据量非常大,导致超时了。解决办法是存储已经计算过的因数,遇到相同的乘积就直接返回对应的因数
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
inline long long GetA1(long long a1a2, long long a2a3, long long a1a3) {
long long a3 = abs(sqrt((a2a3*a1a3) / a1a2));
return a1a3 / a3;
}
int main(){
int N;
int tmp;
map<long long, long long> mp;
cin >> N;
vector<vector<long long>> matrix(N,vector<long long>(N));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> matrix[i][j];
}
}
if (N < 2)
cout << NULL;
long long a1 = GetA1(matrix[0][1], matrix[1][2], matrix[0][2]);
long long out;
for (int i = 0; i < N; i++) {
if (!i) {
cout << a1 << " ";
mp.insert(pair<long long, long long>(matrix[0][i],a1));
continue;
}
if(!mp.count(matrix[0][i])){
out = matrix[0][i] / a1;
mp.insert(pair<long long, long long>(matrix[0][i],out));
cout << out << " ";
}
else{
out = mp[matrix[0][i]];
cout << out << " ";
}
}
return 0;
}