JZM 的套题(暴力,DP)
J
Z
M
\rm JZM
JZM 即将奔赴
N
O
I
\rm NOI
NOI 考场,为了让同学们赶上自己的千分之一水平,刻意出了两道水题给同学们练练。
1.曾经的代码
J
Z
M
\rm JZM
JZM 小学一年级的时候曾写过一份代码,来判断一个数是不是 3 的倍数,一般来说,只需要判断
x
%
3
x\%3
x%3 是多少,但是,
J
Z
M
\rm JZM
JZM 精益求精,又求出了
x
x
x 每一位上的数字和
y
y
y ,观察
y
%
3
y\%3
y%3 的值……最终他把
x
x
x 和
y
y
y 加起来得到了
N
N
N 。
此时,灯突然黑了,意识到了不妙,
J
Z
M
\rm JZM
JZM 马上按了一下 Ctrl + s ,顺便把
N
N
N 都记了下来。果然,下一秒,电脑屏幕就黑了,整栋楼停电。
J
Z
M
\rm JZM
JZM 没法好好地在黑暗中演算,于是想你询问,对于每个
N
N
N ,能够得到它的最小
x
x
x 是多少,或者告诉他不存在。
一共
T
≤
5000
T\leq5000
T≤5000 组数据 ,每组数据一个数
N
∈
[
1
,
1
0
18
]
N\in [1,10^{18}]
N∈[1,1018] 。
题解
好熟悉啊,有一种见到
A
B
C
T
1
\rm ABC~T1
ABC T1 和
D
i
v
2
T
1
\rm Div2~T1
Div2 T1 的亲切感。
我们发现答案和
N
N
N 相差不超过
9
∗
18
9*18
9∗18 ,直接暴力枚举得了。
开了两秒时限,只要不是写的太烂都能过。
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 100005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
int n,m,i,j,s,o,k;
LL sol(LL nm) {
LL as = nm;
while(nm) as += nm%10,nm /= 10;
return as;
}
int main() {
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
int T = read();
while(T --) {
LL N = read();
bool flag = 0;
for(LL i = max(1ll,N-18*9);i <= N;i ++) {
LL as = sol(i);
if(as == N) {
printf("%lld\n",i);
flag = 1; break;
}
}
if(!flag) printf("-1\n");
}
return 0;
}
2.童年的积木
J
Z
M
\rm JZM
JZM 在玩
N
N
N 块积木,每块有一个高度
a
i
a_i
ai ,两块积木能够拼接在一起,当且仅当
gcd
>
1
\gcd>1
gcd>1。
J
Z
M
\rm JZM
JZM 一阵乱拼,竟拼出了最长的一个上升序列,现在问你它的长度是多少。
题解
如果把每个数向下一位能接的数连边,一定会是个
D
A
G
\rm DAG
DAG ,那么我们优化一下,把每个数的所有质因数处理出来,然后优化建图,从大的数开始进行
D
P
\rm DP
DP ,也是比较简单的。
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 100005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
int n,m,i,j,s,o,k;
int a[MAXN];
int dp[MAXN];
int pr[MAXN],cp;
vector<int> p[MAXN];
bool f[MAXN];
int main() {
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
for(int i = 2;i <= 100000;i ++) {
if(!f[i]) {
for(int j = i;j <= 100000;j += i) {
p[j].push_back(i);
if(j > i) f[j] = 1;
}
}
}
int T = read();
while(T --) {
n = read();
for(int i = 1;i <= 100000;i ++) dp[i] = 0;
for(int i = 1;i <= n;i ++) {
a[i] = read();
}
sort(a + 1,a + 1 + n);
int ans = 0;
for(int i = n;i > 0;i --) {
int dpp = 0,le = p[a[i]].size();
for(int j = 0;j < le;j ++) {
dpp = max(dpp,dp[p[a[i]][j]]);
}
dpp ++;
ans = max(ans,dpp);
for(int j = 0;j < le;j ++) {
dp[p[a[i]][j]] = max(dp[p[a[i]][j]],dpp);
}
}
printf("%d\n",ans);
}
return 0;
}
JZM 的套题(暴力,DP)的更多相关文章
- Educational Codeforces Round 15 套题
这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告
写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...
- 【2019.8.12 慈溪模拟赛 T1】钥匙(key)(暴力DP)
暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反 ...
- Codeforces 1205C Palindromic Paths (交互题、DP)
题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...
- [POJ3612] Telephone Wire(暴力dp+剪枝)
[POJ3612] Telephone Wire(暴力dp+剪枝) 题面 有N根电线杆,初始高度为h[i],要给相邻的两根连线.可以选择拔高其中一部分电线杆,把一根电线杆拔高\(\Delta H\)的 ...
- 第46套题【STL】【贪心】【递推】【BFS 图】
已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...
- Luogu P1436 棋盘分割 暴力DP
我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组.... 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和. 然后初始化时用 ...
- hdoj1028;他们说这题叫dp...
#include<cstdio> #include<string> #include<iostream> #include<vector> #inclu ...
随机推荐
- 漏洞修复之Oracle系列
Oracle 11g CVE-2012-1675(远程投毒)漏洞修复. 数据库版本 Oracle 11g 11.2.0.4.0非RAC 漏洞编号 CVE-2012-1675 漏洞介绍 Oracle允许 ...
- 使用SSH连接Windows Server 2019 Core
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月7日. 一.说明 Windows Server 2019 Core,是纯命令行的Windows Server版本,没有办法使用GU ...
- 19.Tomcat多实例部署及负载均衡、动静分离
Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...
- rosbag遍历数据出错:(unicode error) 'utf-8' codec can't decode byte 0xcd in position 31: invalid continuation byte
主题: 前言 针对ros系统记录的bag文件,可以使用python的rosbag包,按照不同起止时间和topic进行提取. 然而,有的topic可以使用rosbag读取,但是不能遍历,存在解码错误.原 ...
- 【Pr】基础流程
新建工程 1.打开Pr 2.点击"新建""项目" 3.在电脑磁盘上新建好项目想要存放的位置,比如Demo1,为了便于管理,我先新建了一个Demo文件夹,再在里边 ...
- mysql备份数据库linux
备份数据库 问题描述: 我们用的是mysql,以今天遇到的情况为例,我们是在两台服务器上要搭相同的平台,部署完成后页面报错,发现是数据库的问题,我们打开数据库查看,确实数据库中少建一个wind数据 ...
- js--js实现基础排序算法
前言 文本来总结常见的排序算法,通过 JvavScript 来实现 正文 1.冒泡排序 算法思想:比较相邻两个元素的大小,如果第一个比第二个大,就交换它们.从头遍历到尾部,当一轮遍历完后,数组最后一 ...
- C4C UI Design背景色
- PHP生成图形验证码
在建站过程中,很多时候都会需要用户验证验证码等操作,比如:注册.登录.发表评论.获取资源等等,一方面可以验证当前用户的行为是否是爬虫.机器人等情况,给网站数据统计产生影响:另一方面可以防止用户大量刷取 ...
- Nacos 的安装与服务的注册
Nacos 的安装与服务的注册 我们都知道naocs是一个注册中心,那么注册中心是什么呢? 什么是注册中心? 它类似与一个中介角色(不收费的良心中介), 在微服务中起纽带的作用,它提供了服务和服务地址 ...