网易游戏8月27日笔试
AC情况:2/3
第一题:
#include <iostream>
#include<vector>
using namespace std;
int main() {
int T;
while(cin >> T){// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
int N, M;
// vector<vector<int>> m(M, vector<int>(M));
for(int t=0;t<T;t++){
cin>>N>>M;
vector<vector<char>> n(N, vector<char>(N));
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cin>>n[i][j];
}
}
// cout<<endl;
// cout<<"qw";
int start = 1;//start 代表的是最少需要start个基本模板才可以包括整个墙面
while(start*N<M) start+=2;
int changex = (start*N - M)/2, changey = (start*N - M)/2; //求的是“多余的边”的长度,就是start*N多出来的那部分
int real_x , real_y; //real_x 代表的是现在的位置,投影到基础模板上的位置,real_y同理
for(int row = 0;row < M;row++){
for(int col = 0;col < M;col++){
real_x = (row + changex)%N;
real_y = (col + changex)%N;
cout<<n[real_x][real_y];
}
cout<<endl;
}
cout<<endl;
}
}
} 第二题: #include <iostream>
#include<vector>
#include<unordered_map>
using namespace std;
int countArea(vector<int> &v1, vector<int> &v2){
int maxx0 = max(v1[0], v2[0]);
int minx1 = min(v1[2], v2[2]);
int maxy0 = max(v1[1], v2[1]);
int miny1 = min(v1[3], v2[3]);
if(maxx0 >= minx1 || maxy0 >= miny1) return 0;
int S1 = (v1[3]-v1[1])*(v1[2]-v1[0]), S2 = (v2[3]-v2[1])*(v2[2]-v2[0]);
int S3 = (minx1 - maxx0)*(miny1 - maxy0);
return S1+S2 - S3;
}
int main() {
int T;
while(cin >> T){// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
int N;
for(int t = 0;t<T;t++){
cin>>N;
vector<vector<int>> map(N, vector<int>(4));
for(int i=0;i<N;i++){
for(int j=0;j<4;j++){
cin>>map[i][j];
}
}
unordered_map<int, int> cnt;
int res = 0;
for(int k=0;k<N;k++){
for(int p=k+1;p<N;p++){
if(cnt.count(p) || cnt.count(k)) continue;
int area = countArea(map[k], map[p]);
if(area != 0){
cnt[p] = 0;
cnt[k] = 0;
res += area;
}
}
}
cout<<res<<endl;
}
}
} 第三题没思路,就是手势解锁的可能次数那个,希望董的大佬说一下思路……
OPPO公司福利 1059人发布
