原题链接

题意

  • 每组数据给我们一个n,然后要求我们用{1, 3, 7}这三种字符来组成一个长度小于1e5的序列,要求其中为1337的子序列(不要求相邻)的数量恰好为n

思路

  • 首先可以考虑最简单的一种构造方式,开头为133,后面接n个7,这样一定是正确的,但是长度会超过限定

  • 我们注意到上面那种方法,每增加一个7,1337子序列数量会增加1,增加速度比较慢,所以我们寻找一种新的“逼近n”的增长方法——也就是每增加一个7,1337的数量增加量为一个变量

  • 因为7前面是3,我们考虑增加3的数量之后,再逐个增加7的数量

  • 我们发现,如果在增加的一个7前方有m个3,则1337子序列增加量为

\[m * (m - 1) / 2
\]
  • 这里其实也就正好达到了我们之前提到的目的,让每次增加量为变量,我们可以假设一开始1后面有无数的3,然后我们从这些3中间插入7,每次插入的贡献值显然就是由上面的式子来算出。我们设为 \(f(m)\)

  • 那么如何使得我们插入的k个7的贡献值的和为n?,也就是

\[\sum_1^k{f(a_i)} = n
\]

(a_i为每次加入7时前方的3个数)

  • 我们可以对n 不断减去小于等于它的最大f(m)(如果为了容易思考,可以使用二分逼近),同时记录这个m,直到n等于0。这样,我们也就得到了上面的a_i

  • 之后将a_i从小到大排列,不断输出补充3达到对应的a_i数量,然后结尾加上7,将所有a_i操作完之后,答案也就构造完毕了。

AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; long long n;
int t;
long long aa[100005], co = 0; long long search(long long x)
{
long long l = 2, r = x * 2;
while (l + 5 <= r)
{
long long mid = (l + r) >> 1;
if ((mid - 1) * mid / 2 <= x)
{
l = mid;
}
else
{
r = mid - 1;
}
}
while ((l - 1) * l / 2 <= x)
{
++l;
}
return l - 1;
} int main()
{
scanf("%d", &t);
while (t--)
{
co = 0;
scanf("%lld", &n);
printf("1");
while (n)
{
long long x = search(n);
aa[++co] = x;
n -= x * (x - 1) / 2;
}
int ll = 0;
for (int i = co; i >= 1; --i)
{
while (ll < aa[i])
{
printf("3");
++ll;
}
printf("7");
}
printf("\n");
}
return 0;
}

Codeforces 1202D 思维 构造的更多相关文章

  1. A Mist of Florescence CodeForces - 989C(思维构造)

    题意: 让你构造一个图,使得A,B,C,D的个数为给定的个数,上下左右连通的算一个. 哎呀 看看代码就懂了..emm..很好懂的 #include <bits/stdc++.h> usin ...

  2. hdu4671 思维构造

    pid=4671">http://acm.hdu.edu.cn/showproblem.php? pid=4671 Problem Description Makomuno has N ...

  3. codeforces 1041 e 构造

    Codeforces 1041 E 构造题. 给出一种操作,对于一棵树,去掉它的一条边.那么这颗树被分成两个部分,两个部分的分别的最大值就是这次操作的答案. 现在给出一棵树所有操作的结果,问能不能构造 ...

  4. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

  5. Codeforces - 1202D - Print a 1337-string... - 构造

    https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...

  6. Educational Codeforces Round 53C(二分,思维|构造)

    #include<bits/stdc++.h>using namespace std;const int N=1e6+6;int x[N],y[N];int sx,sy,n;char s[ ...

  7. Codeforces 232A - Cycles (构造 + 思维)

    题目链接: 232A - Cycles(点击打开) 题意: 要构成一个存在 \(k\) 个三元环的图,需要多少个点,输出顶点数 \(n\),并输出图. 题解: 题目中的任何图都可以用 \(90\)~ ...

  8. Vasya And The Matrix CodeForces - 1016D (思维+构造)

    Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the ma ...

  9. CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造

    题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...

  10. Codeforces Round #670 (Div. 2) D. Three Sequences 题解(差分+思维+构造)

    题目链接 题目大意 给你一个长为n的数组a,要你构造一个非严格单调上升的数组b和一个非严格单调下降的数组c,使得\(b_i+c_i=a_i\) 要你使这两个数组b,c中最大的元素最小,还有q次修改(q ...

随机推荐

  1. ElasticSearch系列——文档操作

    文章目录 Elasticsearch的增删查改(CURD) 一 CURD之Create 二 CURD之Update 三 CURD之Delete 四 CURD之Retrieve Elasticsearc ...

  2. Flask框架——详解URL、HTTP请求、视图函数和视图类

    文章目录 1 什么是url? 2 为什么要有url? 3 如何应用url? 3.1 url和路由的区别. 3.2 url传参的两种 3.2.1动态路由传参 3.2.1.1 动态路由的过滤 3.2.2 ...

  3. 如何使用Java创建数据透视表并导出为PDF

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 数据透视分析是一种强大的工具,可以帮助我们从大量数据中提取有用信 ...

  4. Arduino 麦克风声音传感器指南

    麦克风声音传感器 麦克风声音传感器,顾名思义,检测声音.它可以测量声音的响度. 这些传感器的种类繁多.  在下图中,您可以看到 Arduino 最常用的. 最左边是KY-038,右边是LM393麦克风 ...

  5. 基于GPS定位和人脸识别的作业识别管理系统

    一.技术参数 mysql5.5 asp.net jquery 高德地图api 百度人脸识别api 二.功能简介 实现简单的施工项目管理,包括项目地点,工期,名称,编号等 实现作业人员的档案信息管理,包 ...

  6. 使用Github Copilot完成代码编写

    上篇文章,我们使用VSCode创建了T.Global解决方案和两个类库工程,接下来我们使用Github Copilot完成代码编写 先说以下业务需求: 提供一个公共的本地化组件,支持对数字.货币.时间 ...

  7. 如何在 Vue.js 中引入原子设计?

    本文为翻译文章,原文链接: https://medium.com/@9haroon_dev/introducing-atomic-design-in-vue-js-a9e873637a3e 前言 原子 ...

  8. 数据结构-线性表-单链表(c++)

    线性表的运算 求长度GetLength(L),求线性表L的长度 置空表SetNull(L),将线性表置成空表 按位查找Get(L,i),查找线性表L第i个元素 按值查找Location(L,x),查找 ...

  9. alibaba fastjson的JsonObject有序的实现和源码分析

    介绍 FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.在使用的过程中, ...

  10. [vue]精宏技术部试用期学习笔记 II

    精宏技术部试用期学习笔记(vue) router : vue的模拟路由 前置准备 安装 vue-router pnpm i vue-router@4 //安装版本4的 vue-router 可以在 p ...