网易9.23笔试(前三题代码
个人得分:
100 100 100 13
第一题:分奇偶判断即可
#include "bits/stdc++.h"
using namespace std;
int T;
int n;
vector<int> odd,even;
void work(){
odd.clear();
even.clear();
cin>>n;
for(int i=1,x;i<=n;i++){
cin>>x;
if(i%2 == 0) even.push_back(x);
else odd.push_back(x);
}
if(n % 2 == 1){
cout<<"YES"<<endl;
return;
}
sort(even.begin(), even.end());
sort(odd.begin(), odd.end());
if(n%2 == 0) odd.push_back(0x7fffffff);
for(int i=0;i<even.size();i++) {
if (odd[i] > even[i] || odd[i + 1] < even[i]) {
cout << "NO" << endl;
return;
}
}
cout<<"YES"<<endl;
}
int main(){
cin>>T;
while (T--){
work();
}
}
第二题:我的做法是全部sort一遍然后开一个map存
#include "bits/stdc++.h"
using namespace std;
int n;
string s[100005];
map<string,long long> mp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
sort(s[i].begin(), s[i].end());
mp[s[i]]++;
}
long long ans = 0;
for(auto &[k,v] : mp){
ans = ans + (v *(v-1)) / 2;
}
cout<<ans<<endl;
}
第三题:可以发现是一个杨辉三角,预处理一下逆元算一下权就可以了(需要一点点数论知识)
#include "bits/stdc++.h"
#define ll long long
using namespace std;
long long n;
const long long mod = 1e9+7;
long long x;
long long inv[100005],f[100005];
long long temp;
long long quick_pow(long long a , long long b , long long mod){
long long res = 1 ;
while( b ){
if( b&1 ) (res*=a)%=mod ;
(a*=a)%=mod ;
b >>= 1 ;
}
return res ;
}
void init(){
f[0] = 1;
inv[0] = 1;
for(long long i = 1 ; i <= n ;i++) f[i] = (f[i-1] * i) % mod;
for(long long i = 1 ; i <= n ;i++) inv[i] = quick_pow(f[i],mod-2,mod);
for(long long i = 1;i <= n;i++){
temp = (temp + ((f[n-1] * inv[i-1] % mod * inv[n-i]) % mod) * quick_pow(i,mod-2,mod) % mod)%mod;
}
}
int main(){
cin>>n;
init();
long long ans = 0;
for(int i=1;i<=n;i++){
cin>>x;
ans = (ans + (x * temp) % mod) % mod;
}
cout<<ans<<endl;
}
第四题:输出1骗分跑了(只有十几分钟去写了)
#笔试##网易#
字节跳动公司福利 1328人发布