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进程及…

OpenHFT Java Lang项目

OpenHFT / Java Lang从Apache 2.0库开始&#xff0c;提供Java Chronicle使用的低级功能&#xff0c;而无需持久存储到文件中。 这允许对数据进行可序列化和反序列化&#xff0c;以及对本机空间&#xff08;堆外&#xff09;中的内存的随机访问。它支持使用对象池写入和读取可枚…

spring cloud-spring boot 文档信息

官网&#xff1a; spring boot springcloud 学习资源 使用IDEA创建SpringBoot项目 Spring Boot教程 https://blog.csdn.net/forezp/article/details/70341818 Spring Cloud教程 http://blog.csdn.net/forezp/article/details/70148833 Spring Cloud教程 http://blog.csdn.net…

python基础学习笔记(十三)

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

OD debug matlab,OllyDebug基本使用方法

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

设计模式:策略

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

css 学习整理

1、 background-attachment :fixed 属性防止背景图片这种滚动&#xff0c;它默认值是 scroll&#xff0c;也就是说&#xff0c;在默认的情况下&#xff0c;背景会随文档滚动2、font-weight 属性设置文本的粗细&#xff08;关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字…

php抓取网页中的内容

以下就是几种常用的用php抓取网页中的内容的方法。1.file_get_contentsPHP代码代码如下:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

本地搭建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…

php中的thumb函数,phpcms v9 thumb(缩略图) 函数说明

打开phcmsc/libs/functions/global.func.PHP文件&#xff0c;找到如下代码&#xff1a;$width_t || $height>$height_t) return $imgurl;$newimgurl dirname($imgurl_replace)./thumb_.$width._.$height._.basename($imgurl_replace);if(file_exists($upload_path.$newimgu…

CSS3 选择器——属性选择器

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

设计模式:生成器

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

Hadoop(5)--java编写hdfs程序

1、hdfs系统会把用到的数据存储在core-site.xml中由hadoop.tmp.dir指定&#xff0c;而这个值默认位于/tmp/hadoop-${user.name}下面&#xff0c; 由于/tmp目录在系统重启时候会被删除&#xff0c;所以应该修改目录位置。 修改core-site.xml(在所有站点上都修改) <property&g…

oracle10g服务安装图解,Oracle 10G服务器安装图解

Oracle 10G服务器安装图解Oracle 10g 在window 下的安装概述1.数据库概述Oracle 应用服务器 10g 是集成的、基于标准的软件平台&#xff0c;Oracle Application Server 10g 是继 Oracle9i Application Server (Oracle9iAS) Release 2.0 version 9.0.2 和 version 9.0.3 之后的最…

Java 7试用资源

Java 7为完成使用后需要关闭的资源&#xff08;例如文件&#xff0c;流&#xff0c;数据库连接和套接字&#xff09;提供了更好的资源管理。 这种语言构造称为try-with-resources语句。 完成这项工作的机制称为AutoCloseable接口。 Java 7资源类均实现此接口。 该接口的签名如下…

css平行四边形与菱形变换

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

redis 启动配置文件加载报错 service redis does not support chkconfig

# chkconfig:2345 90 10 # description:Redis is a persistent key-value database 网上资料 上面的注释的意思是&#xff0c;redis服务必须在运行级2&#xff0c;3&#xff0c;4&#xff0c;5下被启动或关闭&#xff0c;启动的优先级是90&#xff0c;关闭的优先级是10。 附录&…

Android 获取ROOT权限原理解析

一、 概述本文介绍了android中获取root权限的方法以及原理&#xff0c;让大家对android玩家中常说的“越狱”有一个更深层次的认识。二、 Root的介绍1. Root 的目的可以让我们拥有掌控手机系统的权限&#xff0c;比如删除一些system/app下面的无用软件&#xff0c;更换开…

oracle事务提交前更新机制,Oracle 事务机制 批量添加,修改,更新

---------------------------------------------------------------------------------------------2011-12-14编辑-------------------------------------------------------------------------------------------------------------------using (OracleConnection oc new Or…

webpack实用配置

注意&#xff1a;以下内容是在vue-cli脚手架的基础上进行添加&#xff01; 1、单个文件抽离 webpack.base.conf.js里边的webpackConfig{}里边对入口文件进行配置&#xff0c;输入你想要抽离的文件&#xff0c;比如vux这个ui框架很大&#xff0c;很有必要抽离 entry: {app: ./sr…