2022USACO-DEC-Silver
题目链接
T1.Barn Tree
T2.Circular Barn
T3.Range Reconstruction
T1
下面均以\(1\)为根来进行分析。
算法思路:
首先,定义一个数组dis表示当前子树的干草数和与应有的干草数和的差值(多了为正,少了为负)。dis的求法就是裸的\(DFS\)。
接下来,进行\(DFS\)。
假设现在遍历到了以\(u\)为根的子树。
第一遍遍历\(u\)的所有孩子。如果当前孩子\(dis>=0\),则遍历以当前孩子为根的子树,并将该子树的所有多余干草全部干草上传到该孩子上,并将该孩子的干草上传到\(u\)上。
第二遍遍历\(u\)的所有孩子。如果当前孩子\(dis<0\),则遍历以当前孩子为根的子树,并将\(u\)的与\(-dis\)相等的干草全部干草下传到该孩子上,并在遍历以该孩子为根的子树。
代码实现
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long LL;
const int N = 2E5 + 5;
int n, u, v;
/*
up:pushup the things down:pushdown the things
*/
vector<LL> G[N], x, y, c;
LL h[N], ave, dis[N];
void newop(int from, int to, LL val) {
x.push_back(from);
y.push_back(to);
c.push_back(val);
}
void calc(int u, int f) {
dis[u] = h[u] - ave;
for (int v: G[u]) {
if (v == f) continue;
calc(v, u);
dis[u] += dis[v];
}
}
void dfs(int u, int f) {
for (int v: G[u]) {
if (v == f) continue;
if (dis[v] > 0) {
dfs(v, u);
newop(v, u, dis[v]);
}
if (dis[v] == 0) dfs(v, u);
}
for (int v: G[u]) {
if (v == f) continue;
if (dis[v] < 0) {
h[v] -= dis[v];
newop(u, v, -dis[v]);
dfs(v, u);
}
}
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%lld", h + i), ave += h[i];
ave /= n;
for (int i = 1; i < n; i++) {
scanf("%d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
calc(1, 0);
dfs(1, 0);
printf("%d\n", x.size());
for (int i = 0; i < x.size(); i++) printf("%lld %lld %lld\n", x[i], y[i], c[i]);
}
T2
算法思路
我们考虑如果一个人选择了\(4k\)型数,那么这个人必败。
归纳证明:
样例证明,\(4\)为必败态。
假设\(4, 8, \dots, 4k\)均为必败态。
那么\(4(k - 1)\)无法通过减去\(4m\)转移到另一个必败态,因为\(4m\)为合数。
证毕。
所以,\(4k\)必败。
那么对于\(4k+1\)型数,只需找到最大的\(4k+1\)型质数,减去即可,\(4k+3\)型数同理。
对于\(4k+2\)型数,只能转移到\(4k+2\)解决。
这个过程可以边做\(Eratosthenes\)筛,边用\(dp\)来解决。
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N = 1E5 + 5, M = 5E6 + 5;
long long t, n, a[N], m, dp[M];
bool flag[M];
void init() {
int one = 0, three = 0;
for (int i = 2; i * i <= M - 5; i++) {
if (flag[i] == 0) for (int j = i * i; j <= M - 5; j += i) flag[j] = 1;
}
for (int i = 1; i <= M - 5; i++) {
if (!flag[i]) {
if (i % 4 == 1) one = i;
else if (i % 4 == 3) three = i;
}
if (i % 2 == 0) dp[i] = dp[i - 2] + 1;
else if (i % 4 == 1) dp[i] = dp[i - one] + 1;
else if (i % 4 == 3) dp[i] = dp[i - three] + 1;
}
}
int main()
{
init();
scanf("%lld", &t);
while(t--) {
scanf("%lld", &n);
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
long long jj = LLONG_MAX, nn = LLONG_MAX;
for (long long i = 1; i <= n; i++) {
if (a[i] % 4 == 0) {
nn = min(nn, (dp[a[i]] / 2ll) * n + i);
}
else {
jj = min(jj, (dp[a[i]] / 2ll) * n + i);
}
}
if (jj < nn) printf("Farmer John\n");
else printf("Farmer Nhoj\n");
}
}
T3
算法思想
思想:暴力(是不是很惊讶?)
我们可以将\(a_1\)确定下来,直接赋值为\(0\)
我们考虑前\(i\)个都确定下来了,来确定第\(i + 1\)个。
第\(i + 1\)个只有两个选择:\(a_i - b_{i, i + 1}\)和\(a_i + b_{i, i + 1}\)。
依次用\(b_{j, i + 1}, j \in [1, i]\)判断即可。
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N = 305;
int n;
long long Distance[N][N], construction[N];
bool Validator(int u) {
for(int i = 1; i < u; i++) {
long long maximum = -0x3F3F3F3F3F3F3F3F, minimum = 0x3F3F3F3F3F3F3F3F;
for (int j = i; j <= u; j++) {
maximum = max(maximum, construction[j]);
minimum = min(minimum, construction[j]);
}
if (maximum - minimum != Distance[i][u]) return false;
}
return true;
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
scanf("%lld", &Distance[i][j]);
}
}
construction[1] = 1;
for (int i = 2; i <= n; i++) {
construction[i] = construction[i - 1] + Distance[i - 1][i];
if (Validator(i)) continue;
construction[i] = construction[i - 1] - Distance[i - 1][i];
}
for (int i = 1; i <= n; i++) {
if (i != n) printf("%lld ", construction[i]);
else printf("%lld", construction[i]);
}
return 0;
}
2022USACO-DEC-Silver的更多相关文章
- USACO翻译:USACO 2013 DEC Silver三题
USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...
- USACO翻译:USACO 2014 DEC Silver三题
USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...
- Week Three
2018.12.10 1.[BZOJ 4818][P 3702] 2.[AGC007 A] 3.[AGC007 B] 4.[AGC007 C] 5.[AGC007 D] 2018.12.11 1.[B ...
- USACO Apple Delivery
洛谷 P3003 [USACO10DEC]苹果交货Apple Delivery 洛谷传送门 JDOJ 2717: USACO 2010 Dec Silver 1.Apple Delivery JDOJ ...
- USACO Building Roads
洛谷 P2872 [USACO07DEC]道路建设Building Roads 洛谷传送门 JDOJ 2546: USACO 2007 Dec Silver 2.Building Roads JDOJ ...
- USACO Milk Routing
洛谷 P3063 [USACO12DEC]牛奶的路由Milk Routing 洛谷传送门 JDOJ 2334: USACO 2012 Dec Silver 3.Milk Routing JDOJ传送门 ...
- LOJ10199轻拍牛头
题目描述 原题来自:USACO 2008 Dec. Silver 今天是 Bessie 的生日,并且现在是聚会的游戏时间.Bessie 让编号为 1~N 的 N 头奶牛围成一个圈坐(所以除了最后一头牛 ...
- [USACO] 2017 DEC Bronze&Silver
link:http://www.usaco.org/index.php?page=dec17results Problem A(Bronze) 这是一道非常简单的判断重叠面积的题目,但第一次提交仍会出 ...
- Bzoj 3389: [Usaco2004 Dec]Cleaning Shifts安排值班 最短路,神题
3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 218 Solved: ...
- Bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 深搜,bitset
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 554 Solved: 346[ ...
随机推荐
- Java学习之路:运算符
2022-10-10 10:34:08 1 运算符 算术运算符:+, -, *, /, %, ++, -- 赋值运算符:= 关系运算符:>, <, >=, <=, ==, != ...
- ABC260 作战总结
ABC260 作战总结 今后开始写一些模拟赛外的其他比赛的总结(也许有题解?). 开场点到另一场\(\text{ARC}\)去了,耽误了点时间,切完前四题发现已经过了\(37\)分钟了,看来自己读题+ ...
- Docker安装MongoDB并使用Navicat连接
MongoDB简介: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...
- HTTP缺点有哪些,如何解决
前言 大家好,我是蜗牛,在上一篇中,我们介绍了不同版本的HTTP区别和发展背景,这篇文章我们来聊聊HTTP的缺点,HTTP缺点大致总结有以下三点: 通信使用明文(不加密),内容可能会被窃听. 不验证通 ...
- The XOR Largest Pair(字典树)
题目描述 在给定的 N 个整数 A1,A2,-,AN 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数 N. 第二行 N 个整数 Ai. 输出格式 一个整数表示答案. 样例 ...
- RDD(弹性分布式数据集)及常用算子
RDD(弹性分布式数据集)及常用算子 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据 处理模型.代码中是一个抽象类,它代表一个 ...
- 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...
- Java反应式编程(1)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把Java函数式编程的由来和最主要的核心知识点讲完了.包括比较难懂的Lambda表达式是怎么演变而来的也全部都撸了一遍.Lambda表达式这 ...
- C温故补缺(十六):未定义行为
未定义行为 在计算机程序设计中,未定义行为是指执行某种计算机代码 所产生的结果,这种代码在当前程序状态下的行为在其所使用的语言标准中没有规定. 以C语言为例,未定义行为指C语言标准未作规定的行为,同时 ...
- 1 c++编程基础
重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 1 c++揭开面纱 1.1 编程 ...