网易秋招c++研发工程师9.8题解
编程题:第一题简单不写了;格式终于调好了
第二题:
给定一个N*M的矩阵,在矩阵中每一块有一块牌子,假定刚开始的时候所有牌面向上。 现在对于每个块进行如下操作: >翻转某个块中的牌子,并且与之相邻的其余八张牌也会翻转; XXX XXX XXX 如上矩阵所示,翻转中间那块时,这九块都翻转一次。请输出在对矩阵中每一块进行如上操作后,牌面向下的个数。 输入描述: 第一行为测试用例数t,(1<=t<=100000) 接下来t行,每行2个整数N,M(1<=N,M<=1,000,000,000) 输出牌面向下的块的个数。 示例: 输入: 5 1 1 1 2 3 1 4 1 2 2 输出: 1 0 1 2 0
第三题:
香槟塔:很高的香槟塔,A发出两种指令,指令1是向X层倒入体积V的香槟,
指令2是询问第k层香槟体积为多少 输入描述:
第一行为n,m表示香槟塔的总层数和指令数。
第二行为n个整数a,表示每层香槟塔的容量。
第三行到第2+m行有两种输入,一种是“1 k”表示询问第k层当前有多少香槟
另一种是“2 x y”表示往x层倒入体积v的香槟。
1<=n,m<=200000;1<=a,v<=1000000000.
示例:
输入:
1 2
8
2 1 9
1 1
输出:
8
示例:
输入:
5 4
1 2 2 10 1
1 3
2 2 5
2 4 3
1 4
输出:
0
4
第二题
#include <bits/stdc++.h>
using namespace std;
int main(){
int num;
long long N, M;
cin >> num;
while (num--)
{
cin >> N >> M;
if (N == 1)
M < 2 ? cout << 1 << endl : cout << M - 2 << endl;
else if (M == 1)
N < 2 ? cout << 1 << endl : cout << N - 2 << endl;
else
cout << N*M - 2 * M - 2 * N + 4 << endl;
}
return 0;
} 第三题
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m;
while (cin >> n >> m)
{
vector<long long> v;
vector<long long> vtemp;
long long v0;
while (n--) {
cin >> v0;
v.push_back(v0);
vtemp.push_back(0);
}
int flag;
while (m--)
{
cin >> flag;
if (flag == 1)
{
cin >> flag;
cout << vtemp[flag - 1] << endl;
}
else if (flag == 2)
{
int x;
long long y;
cin >> x >> y;
while (y)
{
if (v[x - 1] > vtemp[x - 1])
{
if (y > v[x - 1] - vtemp[x - 1])//倒冒了
{ y -= (v[x - 1] - vtemp[x - 1]);
vtemp[x - 1] = v[x - 1];
x == vtemp.size() ? y = 0 : x++;
}
else
{
vtemp[x - 1] += y;
y = 0;
}
}
else if (v[x - 1] == vtemp[x - 1])//这层满了
x == vtemp.size() ? y = 0 : x++;
}
}
}
}
return 0;
} 
查看30道真题和解析