练习:
题目描述:
学校有一个在线学习系统,没门课程由N个页面组成(0< N<= 10000)个页面组成,学生从第一页开始按顺序学到最后一页提交学习记录。
系统会记录每页停留的时间(单位秒),当学生提交时会分析时间是否满足要求,分析规则如下:
每分钟(60秒)之内学完的页面不能大于4页。
例如系统记录到某学生页面停留时间如下:
10 120 10 20 10 10 50
该学生第一分钟学完1页,第二分钟学完0页,第三分钟学完5页,第四分钟学完1页,则判定为不满足要求。
输入描述:
输入数据包含多个学生的提交记录,第一行是整数表示记录个数,每个记录占一行,每行的第一个数是N,表示页面数,然后是每个页面的学习时间。
输出描述:
对于每组输入数据,满足输出1,不满足输出0,每组输出占一行。
输入
5
2 10 10
4 10 15 20 30
5 10 10 10 10 10
6 10 20 20 70 10 10
8 10 120 10 10 10 10 10 10
输出
1
1
0
1
0
思路:统计每一分钟,翻过的页数,超过60秒时,将时间与60取模,且页数归0,小于60就累加页数,大于4就返回0,否则返回1
#include <bits/stdc++.h>
using namespace std;
bool judge(vector<int> a) {
int sum = 0, page = 0;
for(int x : a) {
sum += x;
if(sum > 60) {
sum %= 60;
page = 0;
}
page++;
if(page > 4) return 0;
}
return 1;
}
int main() {
int t;
cin >> t;
while(t--) {
int n, sum = 0, page = 0;
vector<int> a;
cin >>n;
for(int i = 0; i < n; i++) {
int x;
cin >>x;
a.push_back(x);
}
cout << judge(a) <<endl;
}
return 0;
}
2021华为秋招笔试题-软件 9.09 参考
1.完美序列
示例1:
输入:
3 2 1 1 2 3
输出:
1
说明:前三个玩具形成“完美序列”。
示例2:
输入:
3
1 2 3
3 2 1
6
1 2 1 2 3 3
5 4 3 2 1 1
输出:
1
#
2.最长的水沟
最长的水沟
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e3 + 10;
int n, m;
int graph[N][N];
int flag[N][N];
int path[N][N];
int dx[] = { -1, 0, 0, 1 };
int dy[] = { 0, 1, -1, 0 };
int dfs(int x, int y) {
if (path[x][y] > 1) return path[x][y];
int bf = path[x][y];
for (int k = 0; k < 4; ++k) {
int nx = x + dx[k], ny = y + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && flag[nx][ny] == 0 && graph[x][y] > graph[nx][ny]) {
flag[nx][ny] = 1;
path[x][y] = max(path[x][y], bf + dfs(nx, ny));
flag[nx][ny] = 0;
}
}
return path[x][y];
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> graph[i][j];
flag[i][j] = 0;
path[i][j] = 1;
}
}
int ans = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
flag[i][j] = 1;
ans = max(ans, dfs(i, j));
flag[i][j] = 0;
}
}
cout << ans << endl;
return 0;
}
3.最大异或和
最大异或路径
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int name[100005], weight[100005], l[100005], r[100005];
int ans;
void dfs(int p, int now){
now ^= weight[p];
ans = max(now, ans);
if (l[p] > 0){
dfs(l[p], now);
}
if (r[p] > 0){
dfs(r[p], now);
}
}
void solve(){
int n;
cin >> n;
for (int i = 1; i <= n; i++){
int x;
cin >> x;
cin >> weight[x] >> l[x] >> r[x];
}
ans = 0;
for (int i = 1; i <= n; i++){
dfs(i, 0);
}
cout << ans << endl;
}
int main(){
solve();
return 0;
}