ARC122C-Calculator【乱搞,构造】
正题
题目链接:https://atcoder.jp/contests/arc122/tasks/arc122_c
题目大意
一个数对开始是\((0,0)\),每次可以选择一个数加一或者让一个数加上另一个数,求使得第一个数变成\(n\)的方案。步数不超过\(130\)。
\(1\leq n\leq 10^{18}\)
解题思路
官方是斐波那契,但是我考试的时候过法比较神奇。
看上去比较像更相减损,但是不知道第二个数是多少,感觉我们应该能找到一个数对\((n,k)\)使得它更相减损的步骤很少。
考虑的分散一点,设\(n=xk+k\)。那么我们相当于要找到一个\(x\)使得\(\frac{xk+k}{k}=\frac{1}{x}\)。
然后解出来得到\(x=\frac{\sqrt 5-1}{2}\)(其实就是黄金分割率)。
所以我们让\(k=n\times \frac{\sqrt 5-1}{2}\)然后更相减损下去,之后会发现有点误差,我们前后各枚举\(10000\)找到一个满足条件的就好了。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#define ll long long
using namespace std;
ll n;vector<ll> z;
void print(ll x,ll y){
if(!x){while(y&&z.size()<=130)y--,z.push_back(2);return;}
if(!y){while(x&&z.size()<=130)x--,z.push_back(1);return;}
if(x<y) print(x,y-x),z.push_back(4);
else print(x-y,y),z.push_back(3);
}
signed main()
{
scanf("%lld",&n);
double M=(sqrt(5.0)-1.0)*(double)n/2.0;
ll m=M;
for(ll i=max(m-10000,0ll);i<=m+10000;i++){
print(n,i);
if(z.size()>130){z.clear();continue;}
printf("%lld\n",z.size());
for(ll i=0;i<z.size();i++)
printf("%lld\n",z[i]);
break;
}
return 0;
}
ARC122C-Calculator【乱搞,构造】的更多相关文章
- 【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集
题目描述 给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边. 特殊地,对于 $1\le x\le n$ ,$(x,1)$ 和 $(x ...
- CodeForces - 1228D (暴力+思维+乱搞)
题意 https://vjudge.net/problem/CodeForces-1228D 有一个n个顶点m条边的无向图,在一对顶点中最多有一条边. 设v1,v2是两个不相交的非空子集,当满足以下条 ...
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
- UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
- 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
3578: GTY的人类基因组计划2 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 159[Submit][Status][ ...
- 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][D ...
- SCOI 2013 密码 & 乱搞
题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...
随机推荐
- C#异步编程2
- 【java虚拟机】内存溢出与内存泄漏
作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/7354857.html 一.基本概念 内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提 ...
- 08.SpringMVC之方法返回值
返回ModelAndView Controller类方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view.之前我就已讲过,在此并不过多赘述. 返回void 在Cont ...
- java基本数据类型和包装类之间的转换(装箱,拆箱)
1.装箱:把基本数据类型转换成包装类 1.1自动装箱 int t1=2; Integer t2 =t1; 1.2手动装箱 Integer t3 = new Integer(t1); 2.拆箱:把包装类 ...
- SpringCloud商品服务调用方式之feign
简介:改造电商项目 order-service服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) 官方文档: https://cloud.spring.io/sprin ...
- dubbo(一)
1. Introduction 参考链接:https://www.baeldung.com/dubbo Dubbo is an open-source RPC and microservice fra ...
- 事务种类jdbc,Hibernate,JTA事务
JDBC事务 String URL="jdbc:sqlserver://localhost:1433;databaseName=test2"; String USER=" ...
- python入门(需要C++基础)
title: python语法入门 author: Sun-Wind date: August 25, 2021 python语法入门 博主最近参加一项比赛,因为需要用到python,所以在这里记录自 ...
- ❤️用武侠小说的形式来阅读LinkedList的源码,绝了!
一.LinkedList 的剖白 大家好,我是 LinkedList,和 ArrayList 是同门师兄弟,但我俩练的内功却完全不同.师兄练的是动态数组,我练的是链表. 问大家一个问题,知道我为什么要 ...
- Linux centos7 pstree
2021-08-12 1.命令简介pstree (display a tree of processes) 命令用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以直观地看出是谁创建了谁. ...