1、题目名称:小张的手速大比拼
题目
在很久很久以前,小张找到了一颗有 N 个节点的有根树 T 。 树上的节点编号在 1 到 N 范围内。 他很快发现树上的每个节点 i 都有一个对应的整数值 V[i]。 一个老爷爷对他说,给你一个整数 X, 如果你能回答我的 M 个问题,他就给张浩扬购买一些零食。 对于每个问题 Q[i], 请你找到 在 T 中以节点 Q[i] 为根的子树中的所有节点(包括 Q[i])中, 有没有两个节点 A, B (A != B) 的值 V[A] ^ V[B] 的异或和为 X。 如果有这样的两个节点, 请你输出 YES。 否则你需要输出 NO 表示没有节点符合上面的条件。
不太懂
2、题目名称:坐公交
题目
公交上有N 排凳子,每排有两个凳子,每一排的凳子宽度不一样。有一些内向和外向的人按照顺序上车。 外向的人(0 ):只会选择没人的一排坐下,如果有很多排符合要求,他会选择座位宽度最小的坐下。 内向的人( 1 ):只会选择有 人的一排坐下,如果有很多排符合要求,他会选择座位宽度最大的坐下。 数据保证存在合理。输出每个人所在的排。
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct Item {
int index;
int length;
Item(int i, int len) : index(i), length(len) {}
};
struct Compare {
bool operator()(const Item& a, const Item& b) {
return a.length > b.length;
}
};
int main() {
int n;
cin >> n;
vector<Item> items;
for (int i = 1; i <= n; i++) {
int len;
cin >> len;
items.push_back(Item(i, len));
}
sort(items.begin(), items.end(), [](const Item& a, const Item& b) {
return a.length < b.length;
});
string s;
cin >> s;
int pos = 0;
priority_queue<Item, vector<Item>, Compare> pq;
for (int i = 0; i < n * 2; i++) {
if (s[i] == '0') {
++pos;
cout << items[pos - 1].index << " ";
pq.push(items[pos - 1]);
} else {
Item curr = pq.top();
pq.pop();
cout << curr.index << " ";
}
}
return 0;
}
3、题目名称:三而竭
题目
一鼓作气再而衰三而竭。 小艺总是喜欢把任务分开做。 小艺接到一个任务,任务的总任务量是n 。 第一天小艺能完成 x 份任务。 第二天能完成x/k... 第 t 天能完成 x/(k^(t-1)) 。 小艺想知道自己第一天至少完成多少才能完成最后的任务。
【输入描述】
第一行输入整数 n,k 。
【输出描述】
输出 x x的最小值。
【输入样例】
59 9
【输出样例】
54
# 请关闭中文输入法,用英文的字母和标点符号。
# 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
# 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
# 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
# 模版代码提供基本的输入输出框架,可按个人代码习惯修改
class Solution:
def __init__(self) -> None:
pass
def solution(self, n):
result = None
# TODO: 请在此编写代码
k = n[1]
n = n[0]
x = (n * (k-1) // k) + 1
while True:
summ = 0
t = 1
while True:
task = x//(k**(t-1))
if task >= 1:
summ += task
else:
break
t += 1
if summ >= n:
break
else:
x += 1
result = x
return result
if __name__ == "__main__":
n = [int(item) for item in input().strip().split()]
s = Solution()
result = s.solution(n)
print(result)
4、题目名称:争风吃醋的豚鼠
题目
N个节点两两建边。 不存在 3 个节点相互之前全部相连。 (3 个节点连接成环 ) 最多能建立多少条边?
将数据分成2组数据相乘即可,同组内所有数据都与另一组相连可能最大数,同组内不可相连。
说明:由于A1跟A2都与BX相连,则A1跟A2相连就会有闭环A1A2BX
4个点时 A1 B1 A2 B2有
A1->B1 A1->B2
A2->B1 A2->B2
共4条
5个点时 A1 B1 A2 B2 A3有
A1->B1 A1->B2
A2->B1 A2->B2
A3->B1 A3->B2
共6条
#include <stdio.h>
#include <stdlib.h>
void solution(int n) {
int a=n/2;
int b=n-a;
printf("%d",a*b);
}
int main() {
int n;
scanf("%d", &n);
solution(n);
return 0;
}