网易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骗分跑了(只有十几分钟去写了)
#笔试##网易#