test20180919 递归问题
题意
定义
\[
f(n)=\left\{
\begin{array}{}
1 & n=1\\
f(n-f(f(n-1)))+1 & n>1
\end{array}
\right.
\]
\(g(n)\) 为满足\(f(m) = n\)的最大的\(m\)。
给出\(n\),求\(g(n) \mod 998244353\),和\(g(g(n)) \mod 998244353\)。
对100%的数据,\(n \leq 10^9\)
分析
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff;
const ll MAXN=1e6+7,lim=1e6,mod=998244353;
ll f[MAXN]={3,1,2,2};
ll ans1=5,ans2=11;
ll n;
int main()
{
// freopen("recursion.in","r",stdin);
// freopen("recursion.out","w",stdout);
read(n);
if(n==1)
{
puts("1 1");
return 0;
}
if(n==2)
{
puts("3 5");
return 0;
}
for(int i=3;i<=lim;++i)
{
for(int j=f[0]+1;j<=min(lim,f[0]+f[i]);++j)
f[j]=i;
ll up=min(f[i]+f[0],n),down=f[0]+1;
if(down>n)
break;
(ans1 += (ll)(up - down + 1) * i)%=mod;
if((up + down)&1)
{
(ans2 += (up + down) % mod * (up - down + 1)/2 % mod * i) %= mod;
}
else
{
(ans2 += (up + down)/2 % mod * (up - down + 1) % mod * i) %= mod;
}
f[0]+=f[i];
}
printf("%lld %lld\n",ans1,ans2);
// fclose(stdin);
// fclose(stdout);
return 0;
}
test20180919 递归问题的更多相关文章
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- Android 算法 关于递归和二分法的小算法
// 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public st ...
- 二叉树的递归实现(java)
这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
- 递归实现n(经典的8皇后问题)皇后的问题
问题描述:八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后, 使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上 ...
- C语言用分别用递归和循环求数字的阶乘的方法
以下代码均为 自己 实现,嘻嘻! 参考文章:http://blog.csdn.net/talk_8/article/details/46289683 循环法 int CalFactorial(int ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- Java之递归求和的两张方法
方法一: package com.smbea.demo; public class Student { private int sum = 0; /** * 递归求和 * @param num */ ...
- C#语言基础——递归
递归 一.概念conception: 函数体内调用本函数自身,直到符合某一条件不再继续调用. 二.应满足条件factor: (1)有反复执行的过程(调用自身): (2)有跳出反复执行过程的条件(函数出 ...
随机推荐
- ssh 登陆进去后, .bashrc 也没有被执行
查了一下,ssh login 之后, 会执行 .bash_profile 于是新建一个.bash_profile , 内容如下 if [ -f ~/.bashrc ]; then . ~/.bashr ...
- 敏感性、特异性、假阳性、假阴性(sensitivity and specificity)
医学.机器学习等等,在统计结果时时长会用到这两个指标来说明数据的特性. 定义 敏感性:在金标准判断有病(阳性)人群中,检测出阳性的几率.真阳性.(检测出确实有病的能力) 特异性:在金标准判断无病(阴性 ...
- WPF PasswordBox.Password 的数据绑定
WPF的PasswordBox控件的Password属性不是依赖属性,无法直接进行数据绑定,为使其在MVVM模式中正常使用,可以为PasswordBox增加一个助手类,代码如下: 注:代码摘自:htt ...
- English trip -- VC(情景课)1 F Another view
Another view 另一种观点 拓展应用 Life-skills reading 生活技能阅读 Midtown Adult School 中城成人学校 NAME: Samir Ahmed ...
- 20161210xlVBA一行数据转为四行
Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...
- Python下图片的高斯模糊化的优化
资源下载 #本文PDF版下载 Python下图片的高斯模糊化的优化(或者单击我博客园右上角的github小标,找到lab102的W6目录下即可) #本文代码下载 高斯模糊(一维)优化代码(和本文方法集 ...
- ORACLE常见方法使用(转)
1.DBMS_LOB包的使用 2.如何释放DBMS_LOB.CREATETEMPORARY的空间 3.oracle数组
- forget word out a~2
1● an 不,非,无 2● amphi 两个,两种 3● ad 做,加强:
- 国际音标en
元. 辅
- this常见错误
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...