cf1561D Up the Strip(D1D2)

cf1561D Up the Strip(D1&&D2)

题意:

一个长度为n的赛道,一开始在n的位置,你要前往到1,每次移动你有两种方式:

  1. 在1和x-1之间选择一个整数y,并从位置x移动到位置x-y
  2. 在2和x之间选择一个整数z,从位置x移动到位置⌊xz⌋\lfloor \frac{x}{z} \rfloorzx

问有多少移动方法:
问题D1:n的数据范围是2e5
问题D1:n的数据范围是4e6

D1

题解:

对于第一个转移,任何一个状态都可以转移到x,因为是线性递推的
而对于第二个转移,我们可以发现⌊xz⌋\lfloor \frac{x}{z} \rfloorzx在一个区间内值是稳定不变的,这不就是整除分块
因为z∈[2,x],所以整除分块l的初始值为2
知道l,根据整除分块可知r=i/(i/l)r=i/(i/l)r=i/(i/l)
对于这一整个区间i∈[l,r],他们的值⌊ni⌋\lfloor \frac{n}{i} \rfloorin的值是一样,所以可以这一整段区间的值,都可以由dp[n/i]转移过来
所以有转移方程:
dp[x]=∑i=1x−1dp[i]+∑dp[xl]\sum_{i=1}^{x-1}dp[i]+\sum dp[\frac{x}{l}]i=1x1dp[i]+dp[lx]
前者我用树状数组维护
复杂度:nnn\sqrt{n}nn

代码:

// Problem: D1. Up the Strip (simplified version)
// Contest: Codeforces - Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))
// URL: https://codeforces.com/contest/1561/problem/D1
// Memory Limit: 128 MB
// Time Limit: 6000 ms
// Data:2021-08-25 00:01:00
// By Jozky
#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef LOCALstartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{
#ifdef LOCALendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 2e5 + 9;
ll a[maxn];
ll f[maxn];
ll n, mod;
ll lowbits(ll x)
{return x & (-x);
}
void update(int pos, ll val)
{for (int i= pos; i < maxn; i+= lowbits(i)) {a[i]= (a[i] + val) % mod;}
}
ll query(int pos)
{ll val= 0;for (int i= pos; i; i-= lowbits(i)) {val= (val + a[i]) % mod;}return val;
}
int main()
{//rd_test();cin >> n >> mod;for (int i= 1; i <= n; i++) {if (i == 1) {f[i]= 1;update(i, f[i]);continue;}f[i]= query(i - 1);int r;for (int l= 2; l <= i; l= r + 1) {r= i / (i / l);int R= min(r, i);int len= R - l + 1;f[i]= (f[i] + 1ll * len * f[i / l] % mod) % mod;}update(i, f[i]);}printf("%lld\n", f[n] % mod);return 0;//Time_test();
}

D2

题解:

这个题的数据大了20,很明显nnn\sqrt{n}nn过不了
现在对于4e6的数据,很明显我们要优化成nlog⁡nn\log{n}nlogn的做法
对于一个数i,那么某种倍数j,会让[i∗j,i∗j+i)[i*j,i*j+i)[ij,ij+i)这个范围内都可以移动到i位置
当然还要注意边界情况:i∗j<=n且j∗i+i<=n+1i*j<=n且j*i+i<=n+1ij<=nji+i<=n+1
转移方程为:
dp[i]=∑j=i+1ndp[j]+∑i=1i∗j<=n∑k=i∗ji∗j+j−1dp[k]\sum_{j=i+1}^{n}dp[j]+\sum_{i=1}^{i*j<=n} \sum_{k=i*j}^{i*j+j-1} dp[k]j=i+1ndp[j]+i=1ij<=nk=ijij+j1dp[k]
枚举倍数的时间复杂度是O(logn)O(log n)O(logn)
总复杂度是nlog⁡nn\log{n}nlogn

代码:

// Problem: D1. Up the Strip (simplified version)
// Contest: Codeforces - Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))
// URL: https://codeforces.com/contest/1561/problem/D1
// Memory Limit: 128 MB
// Time Limit: 6000 ms
// Data:2021-08-25 00:01:00
// By Jozky
#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef LOCALstartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{
#ifdef LOCALendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 5e6 + 9;
ll a[maxn];
ll f[maxn];
int n;
ll mod;
ll lowbits(ll x)
{return x & (-x);
}
void update(int pos, ll val)
{for (int i= pos; i < maxn; i+= lowbits(i)) {a[i]= (a[i] + val) % mod;}
}
ll query(int pos)
{ll val= 0;for (int i= pos; i; i-= lowbits(i)) {val= (val + a[i]) % mod;}return val;
}
ll sum[maxn];
int main()
{//rd_test();cin >> n >> mod;f[n]= 1ll;sum[n]= 1ll;for (int i= n - 1; i >= 1; i--) {f[i]= sum[i + 1];for (int j= 2; j * i <= n; j++) {ll l= i * j;ll r= min(1ll * j * i + j, 1ll * n + 1);f[i]= (f[i] + sum[l] - sum[r]) % mod;}sum[i]= (sum[i + 1] + f[i]) % mod;}printf("%lld\n", f[1] % mod);return 0;//Time_test();
}

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

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

相关文章

Asp.Net Core中的静态文件-12

目录本文出自《从零开始学 ASP.NET CORE MVC》目录 推荐文章&#xff1a;配置 ASP.NET Core 请求(Request)处理管道Asp.Net Core 中的静态文件在这个视频中我们将讨论如何使 ASP.NET Core 应用程序&#xff0c;支持静态文件&#xff0c;如 HTML&#xff0c;图像&#xff0c;CSS…

2018 ICPC Asia Jakarta Regional Contest

2018 ICPC Asia Jakarta Regional Contest 题号题目知识点难度AEdit DistanceBRotating GearCSmart ThiefDIcy LandEArtilleries and Defensive WallsFPopping BalloonsGGo Make It CompleteHLexical Sign SequenceILie DetectorJFuture GenerationKBoomerangsLBinary String

在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

在.net core开发过程中&#xff0c;使用最多的就是注入方法。但是在.net core使用PetaPoco时&#xff0c;PetaPoco还不支持进行注入方式进行处理一些问题。今天对PetaPoco进行了一些扩展&#xff0c;可以很方便的将PetaPoco进行注入操作&#xff0c;使用和EF很相似&#xff0c;…

F-Pairwise Modulo

d数组是来算&#xff08;x整除y&#xff09;*y中y比x小的数 s数组是算&#xff08;x整除y&#xff09;*y中y比x大的数 &#xff08;x整除y&#xff09;*y 看x对于前面大于他的数是枚举&#xff0c;对于前面小于他的数是d树状数组储存。 d中 x整除y表示x中有多少个y 所以 …

2020 ICPC NAC

2020 ICPC NAC 题号题目知识点难度AAnother Coin Weighing PuzzleBMini BattleshipCBomasDAll KillEGrid GuardianFHopscotch 50GICPC CampHLetter WheelsIEditing ExplosionJLunchtime Name RecallKRooted SubtreesLTomb Raider

【微服务学习】Polly:熔断降级组件

何为熔断降级“熔断器如同电力过载保护器。它可以实现快速失败&#xff0c;如果它在一段时间内侦测到许多类似的错误&#xff0c;会强迫其以后的多个调用快速失败&#xff0c;不再访问远程服务器&#xff0c;从而防止应用程序不断地尝试执行可能会失败的操作&#xff0c;使得应…

A - Junk-Mail Filter HDU - 2473

只是这样合并&#xff0c;分割点的时候就不能分了。 这样合并再加上虚拟节点&#xff0c;那么每个你要求的节点就的下面就不连其他节点了&#xff0c;这样就可以进行删除操作了 #include<iostream> #include<algorithm> #include<cstdio> #include<cstr…

为什么不要使用 async void

问题在使用 Abp 框架的后台作业时&#xff0c;当后台作业抛出异常&#xff0c;会导致整个程序崩溃。在 Abp 框架的底层执行后台作业的时候&#xff0c;有 try/catch 语句块用来捕获后台任务执行时的异常&#xff0c;但是在这里没有生效。原始代码如下&#xff1a;public class …

2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018)

2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018) 题号题目知识点难度AAccess PointsBBrexit NegotiationsCCircuit Board DesignDDate PickupEEquality ControlFFastest SpeedrunGGame DesignHHard DriveIInflationJJinxed BettingKKleptogr…

LCA。。。

树链剖分 #include<cstdio> #include<iostream> #include<cstring> using namespace std; const int N5e510;int h[N],e[2*N],ne[2*N],idx0; void add(int u,int v){e[idx]v,ne[idx]h[u],h[u]idx;return;}int siz[N],de[N],son[N],top[N],fa[N],id[N],num; …

张队长主讲这堂 .NET Core技术培训公开课,太原你约不约

这堂.NET Core技术培训课&#xff0c;你不能错过各位开发者朋友们想必也能体会到&#xff0c;现在市面上关于.NET Core的培训课程少之又少&#xff0c;其中有质量有内容的课程更是凤毛麟角&#xff0c;良师难遇&#xff0c;一课难求。但是现在&#xff0c;机会来了。中微云孵邀…

L :WeChat Walk

详见代码 #include<cstdio> #include<iostream> #include<cstring> #include<vector> #include<map> #include<algorithm> #include<cmath> using namespace std; typedef long long ll; const int N2e510;int h[N],e[N<<1],…

微软推出新语言Bosque,超越结构化程序设计

微软近期推出了一款全新的编程语言 Bosque&#xff0c;该语言参考了 TypeScript 的语法与类型&#xff0c;还有 ML 和 Node/JavaScript 的语义。作者微软计算机科学家 Mark Marron 致力于消除编程过程中出现的各种复杂情况&#xff0c;创造出了他认为超越主流结构化程序设计的 …

Acwing202. 最幸运的数字

Acwing202. 最幸运的数字 题意&#xff1a; 现在给定一个正整数 L&#xff0c;请问至少多少个 8 连在一起组成的正整数&#xff08;即最小幸运数字&#xff09;是 L 的倍数。 题解&#xff1a; x个8连在一起组成的正整数可写作8(10x−1)/98(10^x-1)/98(10x−1)/9。现在要求…

Black and white

在1-n&#xff0c;1-m里选nm-1个边&#xff0c;不形成环的话那就可以补全图形。。。还是不懂 #include<iostream> #include<cstring> using namespace std; const int N6000; typedef long long ll; int l[N],r[N],A[N*N]; int ma[N][N],dis[NN]; int n,m,a,b,c,…

Sumdiv POJ - 1845

Sumdiv POJ - 1845 题意&#xff1a; 求ABA^BAB的所有约数之和mod 9901(1<A,B<5e7) 题解&#xff1a; 我们先将A分解质因子&#xff0c;表示为&#xff1a;p1c1∗p2c2∗......∗pncnp_{1}^{c_{1}}*p_{2}^{c_{2}}*......*p_{n}^{c_{n}}p1c1​​∗p2c2​​∗......∗pn…

vue 实验报告8 基于Nuxt.js开发一个Vue程序,实现登录和注册切换

一、步骤&#xff1a; 保证node.js版本在14以上 1. 全局安装create-nuxt-app: npm install -g create-nuxt-app2.9.x 2. 创建项目: create-nuxt-app my-nuxt-demo 选项这么选&#xff1a; 然后输入&#xff1a; cd my-nuxt-demo 3. 创建登录和注册页面: 在/pages目录下创建logi…

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法

以下方法来自于微软github开源项目WinForms:dotnet/winforms - Using the Classic WinForms Designer in WinForms Core, 请放心使用 .目前.net core下的 Windows Forms的可视化设计器(Designer)尚不可用&#xff0c;后续的Visual Studio 2019 Update才会支持该部分的功能。不过…

P2480 [SDOI2010]古代猪文(数论好题)

P2480 [SDOI2010]古代猪文 题意&#xff1a; 给你n和g&#xff0c;求g∑d∣nCndmodpg^{\sum_{d|n}C_{n}^{d}}\bmod pg∑d∣n​Cnd​modp p999911659 题解&#xff1a; 这个一个综合性很强的数论题 涉及到欧拉定理&#xff0c;Lucas定理&#xff0c;中国剩余定理&#xff0c…

ASP.NET Core开发者成长路线图

来源: MoienTajik/AspNetCore-Developer-Roadmap.2019年ASP.NET Core开发者指南:你可以在下面找到一张图&#xff0c;该图展示了你可以选取的路径及你想学习的库&#xff0c;从而成为一名 ASP.NET Core 开发者。“作为 ASP.NET Core 开发者&#xff0c;我接下来应该学习什么&am…