20241019

news/2024/10/19 19:09:14

这两天的题和今天的考试题。都是城外的
今天考试爆蛋了。

  • 【探险队】
    题意:
    思路:发现这是个基环树森林,考虑怎么做。发现如果是一条链的话很好做,直接一选一不选就行了,那就可以先这样把基环树都搞成一个个环。然后想到对于一个环可能它之前连着个链,然后最后一个被选了,这就导致环上这个点选不了,但是我们并不知道,所以我们考虑如果有这种情况的话就直接把这个环接着遍历掉就行了,然后发现可能这个环上可能还连着别的链,这么直接做的话可能导致不优,所以考虑遇到下一个入度大于一的时候就不继续遍历了,让下一个没有入度的链头或者一整个环再做,发现不劣。然后考虑遍历纯环的时候便历的第一个选不选。发现偶数的时候没有任何关系,但是奇数就不一样了,如果第一个选了,那选到最后一个的时候会发现最后一个选的和第一个挨着,就不对了,所以把第一个设成不选。其实纯环的时候就是环上节点个数除二下取整。这道题好像之前见过一个很类似的题。
    代码:
#include <iostream>
#include <cstdio>using namespace std;
const int N = 3e5 + 10;int n, ans;
int to[N], in[N];
bool vis[N];void dfs (int u, int flag) {if(vis[u]) return;vis[u] = 1;if(flag) ans++;if(~to[u]) in[to[u]]--;if(~to[u])if(flag || !in[to[u]]) dfs(to[u], flag ^ 1);
}int main () {freopen("explore.in", "r", stdin);freopen("explore.out", "w", stdout);scanf("%d", &n);for(int i = 1; i <= n; ++i)scanf("%d", &to[i]), in[to[i]]++;for(int i = 1; i <= n; ++i)	if(!in[i]) dfs(i, 1);for(int i = 1; i <= n; ++i)if(!vis[i]) dfs(i, 0);printf("%d\n", ans);return 0;
}

-【大数据处理】
题意:


思路:考虑建一棵线段树。改变节点颜色就是改变那个叶子节点上的颜色。每个节点就代表这个节点代表的这段染了什么颜色。显然可能不是一个,然后再记一个更新到当前节点的这段最少用多少次染色。再考虑向上合并的过程,发现如果它的两个子节点的颜色有交集的话那就直接记录他们的交集就行了,这样显然是最优的,那染色次数就是左+右-1,如果没有交集的话那就直接向上传递并集就行了。这题动态开点线段树很好做。
代码:

#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdio>using namespace std;
const int N = 1e6 + 10;int k, n, m;
int tot, rt, ans;
int c[N], v[N], s[N];
struct Seg { 	int l, r; vector <int> v;
} t[N << 2];void modify (int &rt, int l, int r, int L, int R, int k) {if(!rt) rt = ++tot;if(l >= L && r <= R) {t[rt].v.push_back(k);return;}int mid = (l + r) >> 1;if(L <= mid) modify(t[rt].l, l, mid, L, R, k);if(R > mid) modify(t[rt].r, mid + 1, r, L, R, k);
}void solve (int rt) {if(t[rt].v.size()) return;solve(t[rt].l), solve(t[rt].r);set_intersection(t[t[rt].l].v.begin(), t[t[rt].l].v.end(), t[t[rt].r].v.begin(), t[t[rt].r].v.end(), back_inserter(t[rt].v));if (t[rt].v.empty()) {ans++;set_union(t[t[rt].l].v.begin(), t[t[rt].l].v.end(), t[t[rt].r].v.begin(), t[t[rt].r].v.end(), back_inserter(t[rt].v));return;}
}int main () {freopen("data.in", "r", stdin);freopen("data.out", "w", stdout);cin >> k >> n >> m;s[0] = -1, k = (1 << k);for(int i = 1; i <= n; ++i)cin >> v[i] >> c[i], s[i] = s[i - 1] + v[i];for(int i = 1; i <= n; ++i) {int x = i;while(i < n && c[x] == c[i + 1]) i++;modify(rt, 0, k - 1, s[x - 1] + 1, s[i], c[i]);}solve(rt);cout << ans + 1 << endl;return 0;
}
  • 【ATM】
    题意:

    思路:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

网站没后台怎么修改内容?

如果网站没有后台管理系统,修改内容通常需要直接编辑网站的文件。以下是一些常见的方法:直接编辑HTML/CSS/JS文件:如果网站是静态的,即主要由HTML、CSS和JavaScript文件组成,可以直接在服务器上找到这些文件并进行编辑。 使用FTP客户端(如FileZilla)连接到服务器,下载需…

无缝轮播图

## vue3 无缝轮播图 <template><!-- @touchend="handleTouchEnd" --><!-- @touchstart="handleTouchStart" --><div class="carousel-conainer"><divclass="carousel-list":style="{ transform: `tra…

如何制作DIY一个低成本高性能的遥控玩具坦克?

前言 小学一年级的时候,第一次在深圳沙井的商场看到了遥控挖掘机,每次去那个商场我都会默默地去看一看挖土机玩具,那时就萌生了一个梦想,长大了一定要买一个遥控挖掘机。时光荏苒,儿时的梦想,如今依然记得,现在有能力买挖掘机,但是却没有了买一台挖掘机玩具的想法了。随…

【GIC】GICv3 基本规则

本章介绍了符合GICv3架构的中断控制器的基本操作。它还描述了不同的编程接口。 一.中断类型SPI(Shared Peripheral Interrupt)--共享外设中断​ 这是一个全局外设中断,可以路由到指定的PE,或路由到一组PE中的一个。PPI (Private Peripheral Interrupt)--私有外设中断​ …

直线与圆的最值问题(高二)

直线与圆的最值问题专题:直线+圆 \(\qquad \qquad\) 题型:最值问题 \(\qquad \qquad\) 难度系数:★★★题目 已知\(P\)为圆\(C:x^2+y^2=1\)上的动点,直线\(l_1:kx-y-3k=0\)恒过定点\(A\),\(Q\)为直线\(l_2:x-y+3=0\)上的动点,则\(|PA|+3|PQ|\)的最…

网站后台模板前台修改?网站后台的界面如何修改?

需求分析:明确需要修改的具体内容,包括文本、图片、颜色、布局等。 功能开发:如果是简单的文本或图片修改,确保后台有相应的编辑功能。 对于样式调整,可以增加一个CSS编辑器或者提供样式选择器。 布局调整则需要更复杂的拖拽组件支持。测试:在不同设备和浏览器上测试修改…

网站模板的logo框架修改?后台修改网站内容?

确定Logo位置打开网站模板的HTML文件,找到放置Logo的HTML元素。通常这个元素会有一个特定的类名或ID,如<div id="logo">或<div class="logo">。调整CSS样式在CSS文件中找到与Logo相关的样式规则。这些规则可能包括宽度、高度、背景图像、边距…

网站模板怎么修改字体?公司网站地图怎么修改?

修改网站模板中的字体通过CSS修改打开网站模板的CSS文件。 查找与字体相关的样式规则,如 font-family, font-size 等。 修改这些属性以应用新的字体设置。例如:body {font-family: Arial, sans-serif;font-size: 16px; }使用内联样式如果模板不支持外部CSS文件,可以在HTML标…