uestc summer training #2

A

增广

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1000000 + 10;
vector<int> g[MAXN];
int a[MAXN], b[MAXN], sz[MAXN], cnt[MAXN];
bool mg[MAXN], vis[MAXN];
int n, m;
bool dfs(int u, int f = -1)
{if (g[u].empty())  //如果当前数没有位置是成对的(a[i+1]=a[i]+1)当然不可能缝
        {return false;}//第一种情况 for (auto &p : g[u])  //枚举当前数每个成对的位置if (p != f){if (!vis[p + 1] || cnt[u + 1] == 1) //如果当前这对后面的位置没有被缝并且后面的数数量为1
                        {mg[p] = vis[p] = vis[p + 1] = 1;  //缝起来 返回trueif (f != -1){mg[f] = 0;}return true;}}for (auto &p : g[u])if (p != f){if (dfs(u + 1, p + 1)){mg[p] = vis[p] = vis[p + 1] = 1;if (f != -1){mg[f] = 0;}return true;}}return false;
}
int main()
{scanf("%d", &n);m = 0; //m是当前数组的数量for (int i = 0, p(-1); i < n; ++ i){int x;scanf("%d", &x);if (x == p)  //p是上一个加入的数
                {sz[m - 1] ++; //如果现在加入的和上一个相同就给上一个sz++
                }else            //不同的话 加入当前数更新p
                {p = x;a[m] = x;sz[m ++] = 1;}}n = m;for (int i = 0; i < n; i++){b[i] = a[i];}sort(b, b + n);for (int i = m = 0; i < n; i++)  //初始化m进行离散化操作if (i == 0 || b[i] > b[m - 1]){b[m++] = b[i];}for (int i = 0; i < n; ++ i)  //离散化
        {a[i] = lower_bound(b, b + m, a[i]) - b;cnt[a[i]] ++;  //计数 计算每种数的数量
        }//        for (int i = 0; i < n; i++)//        {//                cout << a[i] << " ";//        }//        cout << endl;for (int i = 0; i + 1 < n; ++ i){if (a[i] + 1 == a[i + 1]) //如果后一个是前一个+1就建一条有向边
                {g[a[i]].push_back(i);  //记录每一对可以缝的位置前面的哪个
                }}int ret = n - 1; //答案(缩点之后缝之前的答案 这里claris姐姐写错了 应该是n-1)for (int i = m - 1; i >= 0; -- i) //从大到小尝试是否可以缝当前的数
        {if (dfs(i))  //如果返回true即可以缝的话 答案减少一个
                {-- ret; //对于每一种数 最多只能缝一次 所以最多-1
                }}printf("%d", ret);
}
View Code

B

签到题

D

模拟题

F

给你一个中序遍历 和每个点的权值 问你存不存在一颗树使得每个节点的祖先和它的权值是互质的

解:

质因数分解+分治模拟

因为中序遍历有个特点 如果一个点是一个子树的根的话 左儿子都在左边 右儿子都在右边

所以要求互质的是一段区间 用GCD来做的话肯定会超时 我们给每个合数一个leftprime表示该合数质因数分解后最小的质数

首先我们从左到右枚举 维护每个质数所到的最右边 更新每个合数的答案 再反过来从右到左做一次

然后模拟树分治找到根递归地看能不能构造树

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double eps = 1e-8;
const int dir[8][2] = {{0, 1}, {1, 0}, {0, -1}, { -1, 0}, {1, 1}, {1, -1}, { -1, -1}, { -1, 1}};
const int mod = 1e9 + 7, gakki = 5 + 2 + 1 + 19880611 + 1e9;
const int MAXN = 1e6 + 5, MAXM = 1e5 + 5;
const int MAXQ = 100010;
//int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
/*inline void addedge(int u, int v, ll c)
{to[++tot] = v;nxt[tot] = Head[u];cost[tot] = c;Head[u] = tot;
}*/
inline void read(int &v)
{v = 0;char c = 0;int p = 1;while (c < '0' || c > '9'){if (c == '-'){p = -1;}c = getchar();}while (c >= '0' && c <= '9'){v = (v << 3) + (v << 1) + c - '0';c = getchar();}v *= p;
}
const int N = 10000000 + 5;
int MAXX = -1;
bool flagsum;
int ptot = 0;
int num[N];
int father[N];
int prime[N];
bool check[N];
int fanwei[N];
int leftprime[N];
int lans[N], rans[N];
void Euler()
{ll now;for (int i = 2; i <= MAXX; i ++){if (!check[i]){prime[ptot ++] = i;}for (int j = 0; j < ptot; j ++){now = 1LL * prime[j] * i;if (now > MAXX){break;}check[now] = 1;leftprime[now] = prime[j];if (i % prime[j] == 0){break;}}}
}
bool get_ans(int fa, int l, int r)
{int flag = 0;if (l > r){return true;}int aim;int len = (r - l - 1) / 2 + ((r - l - 1) & 1);for (int i = 0; i <= len; i++){aim = l + i;if (lans[aim] < l && rans[aim] > r){//cout << fa << " " << l << " " << r << " " << i << endl;//cout << lans[i] << " " << rans[i] << endl;flag = 1;flag = flag && get_ans(aim, l, aim - 1) && get_ans(aim, aim + 1, r);if (flag){father[aim] = fa;return true;}else{return false;}}aim = r - i;if (lans[aim] < l && rans[aim] > r){//cout << fa << " " << l << " " << r << " " << i << endl;//cout << lans[i] << " " << rans[i] << endl;flag = 1;flag = flag && get_ans(aim, l, aim - 1) && get_ans(aim, aim + 1, r);if (flag){father[aim] = fa;return true;}else{return false;}}}return false;
}
int main()
{ios_base::sync_with_stdio(0);cin.tie(0);int n;int cnt;read(n);for (int i = 1; i <= n; i++){read(num[i]);MAXX = max(MAXX, num[i]);}Euler();//        for (int i = 1; i <= 20; i++)//        {//                cout << i << " " << leftprime[i] << endl;//        }for (int i = 1; i <= n; i++){rans[i] = n + 1;}for (int i = 1; i <= n; i++){cnt = num[i];if (cnt == 1){continue;}//cout<<i<<"   ";if (check[cnt] == 0){//cout << "l "<<cnt << endl;lans[i] = max(fanwei[cnt], lans[i]);fanwei[cnt] = i;continue;}while (check[cnt]){//cout << "l " << cnt << endl;int primenow = leftprime[cnt];lans[i] = max(fanwei[primenow], lans[i]);fanwei[primenow] = i;while (cnt % primenow == 0){cnt /= primenow;}}if (cnt == 1){continue;}else{//cout << "l " << cnt << endl;lans[i] = max(fanwei[cnt], lans[i]);fanwei[cnt] = i;}}for (int i = 1; i <= N; i++){fanwei[i] = n + 1;}for (int i = n; i >= 1; i--){cnt = num[i];if (cnt == 1){continue;}//cout<<i<<"   ";if (check[cnt] == 0){//cout << "r "<<cnt << endl;rans[i] = min(fanwei[cnt], rans[i]);fanwei[cnt] = i;continue;}while (check[cnt]){//cout << "r "<<cnt << endl;int primenow = leftprime[cnt];rans[i] = min(fanwei[primenow], rans[i]);fanwei[primenow] = i;while (cnt % primenow == 0){cnt /= primenow;}}if (cnt == 1){continue;}else{//                        cout << "r "<<cnt << endl;//                        cout << cnt << endl;rans[i] = min(fanwei[cnt], rans[i]);fanwei[cnt] = i;}}//                for(int i=1;i<=n;i++)//                {//                        cout<<i<<" "<<lans[i]<<" "<<rans[i]<<endl;//                }flagsum = get_ans(0, 1, n);if (!flagsum){cout << "impossible" << endl;}else{for (int i = 1; i <= n; i++){cout << father[i];if (i != n){cout << " ";}}cout << endl;}return 0;
}
View Code

G

几何题

H

小的直接暴力 大的加给大的

I

背包DP  记录路径还需要一个二维数组

/*Huyyt*/
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef pair<int, int> PINT;
typedef long long ll;
typedef unsigned long long ull;
const double eps = 1e-8;
const int dir[8][2] = {{0, 1}, {1, 0}, {0, -1}, { -1, 0}, {1, 1}, {1, -1}, { -1, -1}, { -1, 1}};
const int mod = 1e9 + 7, gakki = 5 + 2 + 1 + 19880611 + 1e9;
const int MAXN = 1e6 + 5, MAXM = 1e5 + 5;
const int MAXQ = 100010, INF = 1e9;
//int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
/*inline void addedge(int u, int v, ll c)
{to[++tot] = v;nxt[tot] = Head[u];cost[tot] = c;Head[u] = tot;
}*/
inline void read(int &v)
{v = 0;char c = 0;int p = 1;while (c < '0' || c > '9'){if (c == '-'){p = -1;}c = getchar();}while (c >= '0' && c <= '9'){v = (v << 3) + (v << 1) + c - '0';c = getchar();}v *= p;
}
struct node
{int first, second, index;
} bag[505];
bool cmp(node a, node b)
{return (a.first - a.second) > (b.first - b.second);
}
int dp[505][10005];
int print[505][10005];
PINT before[505][10005];
stack<int> anser;
int main()
{ios_base::sync_with_stdio(0);cin.tie(0);int n, c;scanf("%d %d", &n, &c);for (int i = 1; i <= n; i++){scanf("%d %d", &bag[i].first, &bag[i].second);bag[i].index = i;}sort(bag + 1, bag + 1 + n, cmp);int ans = 0;for (int i = 1; i <= n; i++)for (int j = 0; j <= c; j++){dp[i][j] = -INF;}dp[0][0] = 0;PINT ed = make_pair(0, 0);for (int i = 1; i <= n; i++){for (int j = 0; j <= c; j++){if (dp[i - 1][j] > dp[i][j]){dp[i][j] = dp[i - 1][j];before[i][j] = make_pair(i - 1, j);print[i][j] = print[i - 1][j];}}for (int j = 1; j <= c; j++){if (j >= bag[i].second && j + bag[i].first - bag[i].second <= c){if (dp[i - 1][j - bag[i].second] != -INF){if (dp[i][j] < dp[i - 1][j - bag[i].second] + 1){dp[i][j] = dp[i - 1][j - bag[i].second] + 1;print[i][j] = bag[i].index;before[i][j] = make_pair(i - 1, j - bag[i].second);if (dp[i][j] > ans){ans = dp[i][j];ed = make_pair(i, j);}}}}}}int printnow;cout << ans << endl;for (; ed.first; ed = before[ed.first][ed.second]){if (printnow != print[ed.first][ed.second] && print[ed.first][ed.second] != 0){anser.push(print[ed.first][ed.second]);}printnow = print[ed.first][ed.second];}while (!anser.empty()){cout << anser.top() << " ";anser.pop();}return 0;
}
View Code

J

找规律题

我们可以通过打暴力程序对比发现每个2一轮一轮地模拟和一个一个地模拟得到的结果是一样的

但是直接把一个一个滚的模拟交上去会T7 需要再简化一下 

每当遇到一个二 找到它左边最近的0和右边最近的0位置分别为L与R

则这一段数列除了L+R-i这个位置变成0 其他位置都会变成1

K

概率题

转载于:https://www.cnblogs.com/Aragaki/p/9325999.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql有实例名这个概念,MySQL的一些概念笔记

1.MySQL Server、MySQL实例、MySQL数据库MySQL数据库指的是实际存在的物理操作系统文件的集合&#xff0c;也可以指逻辑数据的集合。为了访问、处理数据&#xff0c;我们需要一个数据库管理系统&#xff0c;也就是MySQL Server(也称为MySQL服务器)。MySQL实例指的是MySQL进程及…

python基础学习笔记(十三)

re模块包含对 正则表达式。本章会对re模块主要特征和正则表达式进行介绍。 什么是正则表达式 正则表达式是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串&#xff0c;可以匹配其自身。换包话说&#xff0c;正则表达式’python’ 可以匹配字符串’python’ 。你可以…

OD debug matlab,OllyDebug基本使用方法

OD是逆向过程中最好的动态调试工具&#xff0c;这次来记录学习笔记。(特别鸣谢石总)1、OD的工作界面最开始要学的就是界面的使用N了吧&#xff0c;这里分各个框来解释下&#xff1a;列举各个框用处&#xff1a;可以看到下面一框框东西&#xff1a;这些一时半会用不到&#xff0…

设计模式:策略

这次我想谈谈策略设计模式 。 通过这种方式&#xff0c;我开始撰写有关行为设计模式的文章。 这些模式表示对象之间的某些交互模式&#xff0c;以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。 当您的应用程序中有多个实现目的的实现时&#xff0c;应使用…

本地搭建WordPress (XAMPP环境)

1&#xff0c;XAMPP是一个流行的PHP开发环境&#xff0c;官网下载&#xff1a; https://www.apachefriends.org/zh_cn/index.html 然后安装。 官方介绍&#xff1a;XAMPP是最流行的PHP开发环境 XAMPP是完全免费且易于安装的Apache发行版&#xff0c;其中包含MariaDB、PHP和Pe…

CSS3 选择器——属性选择器

上一节在《CSS3选择器——基本选择器》中主要介绍了CSS3选择器的第一部分&#xff0c;这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器。属性选择器早在CSS2中就被引入了&#xff0c;其主要作用就是对带有指定属性的HTML 元素设置样式。使用CSS3属性选择器&#x…

设计模式:生成器

有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式&#xff0c;另一种是Builder设计模式。 在某些情况下&#xff0c;您甚至可以结合使用这两种模式。 但是在本文中&#xff0c;我想研究一下Builder设计模式 。 我需要说的第一件事是创造模式。 在什么情况…

css平行四边形与菱形变换

*以下技巧均源自于Lea Verou所著《CSS Secrets》 平行四边形 平行四边形的构造可以基于矩形通过skew()的变形属性进行斜向拉升得到&#xff08;skew所用的坐标系&#xff0c;纵向是X轴&#xff0c;横向是Y轴&#xff0c;与常见的坐标系相反&#xff09;。 <!DOCTYPE html&g…

设计模式:原型

创新设计模式之一是原型设计模式 。 尽管原型是创造模式&#xff0c;但它在概念上与其他模式有所不同。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone&#xff08;&#xff09;方法。 因此&#xff0c;让我们考虑一…

SecureCRT连接AWS EC2云主机密码登录

申请了亚马逊的EC2&#xff0c;要通过ssh 加密钥的形式登录&#xff0c;特别麻烦&#xff0c;而且感觉ssh登录AWS的云主机后好卡&#xff0c;这里是更改成用户名和密码的形式登录云主机&#xff0c;可以通过SecureCRT直接登录 1、首先通过ssh登录到EC2&#xff0c;类似于ssh -i…

母版页

一、母版页简介 使用 ASP.NET 母版页可以为应用程序中的页创建一致的布局。单个母版页可以为应用程序中的所有页&#xff08;或一组页&#xff09;定义所需的外观和标准行为。 母版之所以称为母版&#xff0c;就是将大部分网页上固定内容&#xff0c;比如导航栏&#xff0c;版…

openLayers 4 canvas图例绘制,canvas循环添加图片,解决图片闪烁问题

一、问题来源&#xff1a; 接触Openlayers 一段时间了&#xff0c;最近做了一个农业产业系统&#xff0c;项目中涉及到产业图例&#xff0c;最后考虑用canvas来绘制图例图像。当中带图片的图例移动时&#xff0c;图片会实现闪烁留白情况。闪烁是因为绘制图片本身的复杂性&#…

Java DB嵌入式模式

Java DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项&#xff1a; Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌入式模式下&…

清除浮动方法解析

清除浮动方法解析 清除浮动带来的额外影响 如果对于浮动不熟悉的同学&#xff0c;可以看看介绍float的文章。传送门&#xff1a;CSS float 我们知道&#xff0c;在一个父元素内如果遇到某个浮动元素&#xff0c;此时父元素的高度会发生塌陷。针对父元素高度塌陷的问题&#xff…

进程间的通信----管道

前提&#xff1a;本文是基于Linux系统下的学习 用户态的进程是如何组织的呢&#xff1f;所有的用户态进构成了一棵树。进程树。 进程树的树根是init.也就是1号进程。是用户态进程的祖宗进程。如何查看进程树&#xff1f;pstree 进程之间的关系 父子进程和兄弟进程查看进程的信息…

web项目启动时,自动执行代码的几种方式

在项目开发过程中&#xff0c;往往需要一些功能随着项目启动而优先启动&#xff0c;下面我总结几种方式&#xff08;非spring boot&#xff09; spring boot的参考 spring boot 学习之路9 (项目启动后就执行特定方法) 方式一&#xff1a; ServletContextListener监听器&#…

设计模式:状态

本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分&#xff0c;在其中我将提供有关需要应用该模式的情况&#xff0c;它所具有的利弊以及用法示例的信息。 有时&#xff0c;当对象的内部状态更改时&#…

[UWP]了解模板化控件(9):UI指南

[UWP]了解模板化控件(9)&#xff1a;UI指南 原文:[UWP]了解模板化控件(9)&#xff1a;UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性&#xff0c;用于在新建ControlTemplate时使用这些约定的属性。 譬如&#xff0c;修改HeaderedContentControl的Co…

Java的反射API

如果您曾经问​​过自己以下问题&#xff1a; –“如何在字符串中仅包含其名称的方法调用&#xff1f;” –“如何动态列出类中的所有属性&#xff1f;” –“如何编写一种将任何给定对象的状态重置为默认值的方法&#xff1f;” 然后您可能已经听说过Java的Reflection API…

linux服务器基本常识,服务器搭建-Linux基础知识

服务器搭建还是需要一些Linux知识的&#xff0c;这节就聊点基础的。文件权限操作查看权限Linux中每个文件对每个用户来说都有对应的权限&#xff0c;在任一路径中输入ll就可以查看这些信息&#xff1a;rootip-*** /usr/local # lltotal 32Kdrwxr-xr-x 2 root root 4.0K Jan 14 …