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)的更多相关文章

  1. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  2. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  3. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  4. 【2019.8.12 慈溪模拟赛 T1】钥匙(key)(暴力DP)

    暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反 ...

  5. Codeforces 1205C Palindromic Paths (交互题、DP)

    题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...

  6. [POJ3612] Telephone Wire(暴力dp+剪枝)

    [POJ3612] Telephone Wire(暴力dp+剪枝) 题面 有N根电线杆,初始高度为h[i],要给相邻的两根连线.可以选择拔高其中一部分电线杆,把一根电线杆拔高\(\Delta H\)的 ...

  7. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  8. Luogu P1436 棋盘分割 暴力DP

    我的天,,,,,n=8,k<=15,,,这怕不是暴力DP+高维数组.... 开一个五维数组f[k][i][j][p][q]表示从(i,j)到(p,q)中分成k个矩形最小的平方和. 然后初始化时用 ...

  9. hdoj1028;他们说这题叫dp...

    #include<cstdio> #include<string> #include<iostream> #include<vector> #inclu ...

随机推荐

  1. c++ 乘法逆元

    主要参考:OI-WIKI 为什么要逆元 当一个题目让你求方案数时常要取余,虽然 \((a+b)\% p=(a\% p+b\% p)\%p\) \((a-b)\% p=(a\% p-b\% p)\%p\ ...

  2. 【转载】k8s入坑之路(2)kubernetes架构详解

    每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...

  3. 并发编程原理学习:synchronized关键字

    概述 关键字synchronized可以修饰方法或者以同步代码块的形式来进行使用,它主要确保多个线程在同一时刻只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性. 同步代码块 ...

  4. awk运用三维数组进行插值获得任意经纬度处的水层沉积层地壳厚度

    awk三维数组与插值 目的:给定经纬度,获得该点地下的冰层水层沉积层和地壳的厚度 实现:awk一行命令 下载Crust1.0模型 该数据集的详细介绍见官网. 解压后有几个文件:crust1.vp,cr ...

  5. [pwn基础] Linux安全机制

    目录 [pwn基础] Linux安全机制 Canary(栈溢出保护) 开启关闭Cannary Canary的种类 Terminator canaries(终结者金丝雀) Random cannarie ...

  6. SAP 实例 1 Images in HTML

    REPORT zharpo_010 NO STANDARD PAGE HEADING. TABLES : t001. TYPE-POOLS: slis. DATA : w_repid LIKE sy- ...

  7. CSS进阶内容——布局技巧和细节修饰

    CSS进阶内容--布局技巧和细节修饰 我们在之前的文章中已经掌握了CSS的大部分内容,但仍有一些内容我们没有涉略,这篇文章就是为了补充前面没有涉及的内容,为我们的知识做出补充并且介绍一些布局技巧 当然 ...

  8. java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader.findCla ...

  9. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  10. Stream流中的常用方法foeEach和Stream流中的常用方法filter

    延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用.(除了中介方法外,其余方法均为延迟方法) 终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似Stri ...