首页 > TAG信息列表 > 100010

CF1719C Fighting Tournament 题解

思路 根据题意,很容易看出,每个人都完成一次比赛后,即完成 \(n-1\) 轮之后,力量值最大的人会留在第一的位置,且在第 \(n-1\) 轮完成后,除了力量值最大的人,其他人的胜场数都不会再增加了。所以问题的关键是求所有人都完成一轮,即前 \(n-1\) 轮比赛之前的答案。 考虑将所有询问离线处理,并按

P5318 【深基18.例3】查找文献

原题地址:P5318 【深基18.例3】查找文献 根据描述和样例 分析如下: 先对 边 u->v 排一个序,满足字典序的需求 dfs和bfs 都要记录当前点是否已经被访问过了,若之前没被访问过,继续dfs或bfs。防止出现重复访问 代码如下: #include<iostream> #include<cstring> #include<vector> #inc

仙人掌&园方树

1. 仙人掌 无向连通图,每条边要么不在环里,要么只在一个环里。 2. 圆方树 仙人掌 \(G=(V,E)\) 的圆方树 \(T=(V_T,E_T)\) 为满足以下条件的无向图: \(V_T=R_T∪S_T\),\(R_T=V\),\(R_T∩S_T=∅\),其中 \(R_T\) 集合表示圆点,\(S_T\) 集合表示方点; \(∀e∈E\),若 \(e\) 不在任何简单环中,

AcWing 1307. 牡牛和牝牛

题目传送门 一、算法分析 初始化:f[0] = 1(f[0]表示不摆放1的情况,初始值这么设,能让整个递推过程的边界是正确的则可行) 结果:f[0] + f[1] + f[2] + ... + f[n] 通过s[i]记录f[0] + ... + f[i]的前缀和可以优化到\(O(n)\) 二、朴素版本 #include <bits/stdc++.h> using namespace

蓝桥试题 算法提高 最大连续子段和

简单dp 思路很清晰,注意事项及实现代码: 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 using namespace std; 4 int a[100010]; 5 int dp[100010]; 6 int ans=INT_MIN; 7 int n; 8 int main() 9 { 10 ios::sync_with_stdio(false); 11 cin>>n; 12

垃圾陷阱 && [NOIP2014 提高组] 飞扬的小鸟

#include<bits/stdc++.h> using namespace std; int d,n,dp[1010]; struct node{int t,f,h;} a[1010]; bool cmp(node aa,node bb){ return aa.t<bb.t; } int main() { scanf("%d%d",&d,&n); for(int i=1;i<=n;i++) { scanf("%d%d%d&

CodeForces 191C Fools and Roads

题目链接:CodeForces 191C Fools and Roads 题目大意: 给定一个\(N\)节点的数,然后有\(M\)次操作,每次从\(u\)移动到\(v\),问说每条边被移动过的次数。 题解: 用树上差分来统计,\(u\)走向\(v\),则\(u\)、\(v\)之间的路径上的边权都加\(1\),用差分数组表示就是\(diff[u]+1, diff[v]+1, diff[

POJ 3321 Apple Tree

题目链接:POJ 3321 Apple Tree 题目大意: 题解: \(dfs\)序的两个数组\(in\),\(out\)记录某结点进入和出来的时间,则对于一个结点\(u\),其子树中某一结点\(v\)满足\(in_u < in_v < out_v < out_u\)。 用树状数组存储各时间戳所对应的结点的状况,则\(getSum(out_u) - getSum(in_u - 1)\)所

【Codeforce 746 C】Bakry and Partitioning

https://codeforces.com/contest/1592/problem/C 分析 本题从“异或”的性质出发,已知一棵树若能符合题意地被分割成 i(2~k)个部分,那么它就可以被符合题意地分割成 i-2 个部分,则只需要考虑原来的树能否被符合题意地分割成 2 或 3 个部分。当 k=2 时,说明最多被分成 2 个部分,那么整棵树

bzoj #4238 loj #2881「JOISC 2014 Day3」电压

你知道 Just Odd Inventions 公司吗?这个公司的业务是「只不过是奇妙的发明 / Just Odd Inventions」。这里简称为 JOI 公司。 JOI 公司的某个实验室中有着复杂的电路。电路由 \(n\) 个节点和 \(m\) 根细长的电阻组成。节点编号为 \(1\) 到 \(n\) 。 每个节点可设定为两种电平之一

nflsoj 20034 #12458.「NOIP2021模拟赛0929知临」棋盘

小C有一个 $n $ 列的棋盘,一开始是空的,棋盘上可能会有一些障碍无法通过 小C要对它进行了 \(q\) 次操作,每次操作为以下三种操作之一 Add:在棋盘末尾加入了一行 Del:删除棋盘的第一行 Que: 询问:有一只马从当前棋盘的第一行第ii列出发,要到最后一行第jj列。每次只能向棋盘的下方走,询问合

lc 1943. 描述绘画结果

就是个差分数组,注意保存一下每个点的颜色即可   class Solution { public: long long d[100010]; vector<vector<long long > > ret; vector<vector<long long>> splitPainting(vector<vector<int>>& segments) { memset(d, 0, size

5683 道路拆除

5683 道路拆除 这个题也就是最短路径呗,挺好的,我猜猜,首先求一下最短路径然后把不是最短路径的边全部删去 很显然我猜错了 由起点开始到两个终点,很容易理解是最短路 接着想,直接最短路是行不通的,因为我们要求经过的次数,直接最短路过重复 那么怎么样子做到不重复? 于是就要跑三遍

nlfs 20034 #12440「NOIP2021模拟赛0923北大附」入教

HY 书院共有 \(n\) 名同学,你要将他们分为 \(m\) 个组。由于一些特殊的原因,每个同学只有 2 个组想去. 现在你想把他们安排到组里,然后进行入教活动。 入教活动需要在组内细分成活动队,每一个活动队恰好包含两个人,每个人最多参加一个活动队。不难发现对于每一个组,要么每个人都可以参

【leetcode1696】跳跃游戏

https://leetcode-cn.com/problems/jump-game-vi/submissions/ 分析 dp[i]表示跳跃到第i位时的最大得分,则转移方程为 dp[i]= (从dp[i-k]到dp[i-1]的最大值) +nums[i],采取单调队列维护区间最大值。 class Solution { public: int dp[100010]={0},q[100010]={0}; int maxRes

随机化数组

随机化数组的方法 来源于Problem - B - Codeforces (Unofficial mirror site, accelerated for Chinese users) 当时用随机化数组的方法过了,记录一下,以后可能用到 #include<bits/stdc++.h> using namespace std; struct tnode{ int a[5]; }e[500050]; int zhan[10010],tot,zhan1[

数据结构第六次实验报告

7-2 二叉树加权距离 (100 分) 二叉树结点间的一种加权距离定义为:上行方向的变数×3 +下行方向的边数×2 。上行方向是指由结点向根的方向,下行方向是指与由根向叶结点方向。 给定一棵二叉树T及两个结点u和v,试求u到v的加权距离。 输入格式: 第1行,1个整数N,表示二叉树的结点数,(1≤N

[ AGC002 E ] Candy Piles

题目 Atcoder 思路 代码 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 100010; int n, m, a[N]; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a +

Solution -「YunoOI 2017」由乃的 OJ

Description Link. 起床困难综合症 上树。 Solution 线段树维护,树剖上树。 具体题解有空再写,我要去睡觉了。 #include<bits/stdc++.h> typedef unsigned long long ULL; struct node { ULL one,zero; node(ULL A=0,ULL B=0) { one=A; zero=B; } }nodes[400010],exnodes[400

高精度【模板】

最近蒟蒻刚学了高精算法,来发个模板吧!------------高精加(HAA)【模板】 1 #include<bits/stdc++.h> 2 using namespace std; 3 string x,y; 4 int a[100010],b[100010],c[100010],xa,xb,xc; 5 /*数组大小根据题目数据范围大小确定 6 此模板只适用于0≤x,y≤10^5的情况*/

【题解】P1439 【模板】最长公共子序列

P1439 【模板】最长公共子序列 题解 f[]维护当前最长的公共子序列,f[i]是这条子序列的第i个数在a中的位置。易知f[]是递增的。 对于b的第i个数b[i],找到其在a中的位置mp[b[i]],如果mp[b[i]]大于f[len],说明b[i]这个数可以加到当前最长子序列后面。 不然的话要想把b[i]这个数加到子序

Codeup——616 | 问题 B: 序列合并

题目描述 有两个长度都为N的序列A和B,在A和B中各取一个数相加可以得到N2个和,求这N2个和中最小的N个。 输入 第一行一个正整数N(1 <= N <= 100000)。 第二行N个整数Ai,满足Ai <= Ai+1且Ai <= 109 第三行N个整数Bi,满足Bi <= Bi+1且Bi <= 109 输出 输出仅有一行,包含N个整数,从小到大

[模板]LCA&LIS

(LIS模板)AT2827 LIS 假设有序列s: dp[i]表示以s[i]为结尾的上升子序列的最大长度.O(N2),TLE #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; int n, s[100010], dp[100010], ans; int main() { scanf("%

PAT B1040 有几个PAT (25分)

#include <cstdio> #include <cstring> int main(){ char c[100010]; scanf("%s", c); int P[100010], T[100010]; int temp = 0; for(int i=0; i<strlen(c); i++){ if(c[i] == 'P'){ temp++; }else if(c[i] == 'A�

【PAT甲级、C++】1032 Sharing (25分)

我知道这么写暴力法肯定会有问题,但还是尝试了下,果然最后两个测试点不通过 # include <iostream> using namespace std; int AddrNow[100010]; char Info[100010]; int AddrNxt[100010]; int N; int main() { int start1, start2; cin >> start1 >> start2 >> N;