ZZNUOJ-2155-单身man集合-【标程做法:数位DP-1-10^8,提前暴力打表法: 砍时间复杂度到10^5】
ZZNUOJ-2155: 单身MAN集合
题目描述:
单身man们突然集结起来了,虽然我们不知道它们想要干什么。你作为单身man的首领需要管理好每一只单身man,机智的你给每一只单身man编了一个编号。但是单身man们不喜欢相邻的两个数字是相同数字(例如 ,, 1223等),单身man们也不喜欢一个数字的左右两边的数字是相同数字(例如 ,2323等),因为它们觉得中间的数字太可怜了。
作为单身man的首领的你不想刺激这些单身man,决定把这些编号里面含有7或者各位数字之和为7的倍数编号去掉,免得单身man们收到刺激。 输入 输入一个整数T ( <= T <= )开始,表示测试用例的数量。
每一行输入一个整数 l ,r (<= l <= r <= )表示编号的范围。 输出 在 l 到 r 的范围里面最多有多少个可用编号。 样例输入 样例输出
大致思路:
求区间【L,R】的结果,可以转化成【1,R】-【1,L-1】的结果,自行画图即可!
提前存一些节点,后面计算的时候直接调用即可!
例如下面代码中的F[i] 表示X 整除100000后得到i,然后从1到 i*100000的结果是F[i].依次类推,这样每次跑的话,从1--i*100000的地方已经可以从F数组中O(1)的时间内调用出来!只需要跑i*100000+1到X的结果了!(针对每组数据,时间复杂度不超过10^5)
打表代码:
然后找到与main.cpp同目录级别的output.txt,用记事本打开即可!然后把这些结果全部存进你的另一个工程的F[ ]数组中!
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
#include<math.h>
#define N 100008
#define ll long long
#define inf 0x3f3f3f3f
int F[]; bool judge(int x)
{
int a[]= {};
int len=,s=;
while(x>)
{
a[++len]=x%;
x/=;
if(a[len]==)return false;
if(len>=&&a[len]==a[len-])return false;
if(len>=&&a[len]==a[len-])return false;
s+=a[len];
}
if(s%!=)
return true;
return false;
} int main(){
freopen("output.txt","w",stdout); int s=;
int n=;
for(int i=;i<=n;i++){
if(judge(i))
s++;
if(i%==)
F[i/]=s;
}
cout<<"{0";
for(int i=;i<=;i++)
printf(",%d",F[i]);
cout<<"}"; return ;
}
题解代码:
记得加上F[N]数组!
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<math.h>
#include<stack>
#define ll long long
using namespace std;
const double eps=1e-;
#define PI acos(-1.0)
#define N 100008
int F[]= {,,,,,,,,,,
,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
}; /****/
bool judge(int x)
{
int a[]= {};
int len=,s=;
while(x>)
{
a[++len]=x%;
x/=;
if(a[len]==)return false;
if(len>=&&a[len]==a[len-])return false;
if(len>=&&a[len]==a[len-])return false;
s+=a[len];
}
if(s%!=)
return true;
return false;
}
int fact(int l,int r)
{
int sum=;
for(int i=l; i<=r; i++)
{
if(judge(i))
sum++;
}
return sum;
}
int solve(int x) //从[1--x]的闭区间的包含的数
{
int id1=x/;
return F[id1]+fact(id1*+,x );
}
int main()
{
int T,l,r;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&l,&r);
// cout<<"***"<<fact(l,r)<<"****";
if(r<)
{
printf("%d\n",fact(l,r));
}
else
{
printf("%d\n",solve(r)-solve(l-));
// cout<<"r: "<<solve(r)<<endl;
// cout<<"l: "<<solve(l-1)<<endl;
}
} return ;
} /**************************************************************
Problem: 2155
User: 137666
Language: C++
Result: 正确
Time:8 ms
Memory:2032 kb
****************************************************************/
(灰常简单的代码)
ZZNUOJ-2155-单身man集合-【标程做法:数位DP-1-10^8,提前暴力打表法: 砍时间复杂度到10^5】的更多相关文章
- [求助][SPOJ MARIOGAM]-高斯消元(内含标程,数据等)
小蒟蒻开始做概率的题之后,遇到了这道题,然而,他发现自己的程序调试了无数次也无法通过,系统总是返回令人伤心的WA, 于是,他决定把这一天半的时间收集到的资料放在网上, 寻求大家的帮助, 也可以节省后来 ...
- hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板
比赛的时候抄poj2926的模板,但改不来啊orz #include <iostream> #include <cstdio> #include <cstring> ...
- [转]关于一些SPFA的标程
SPFA算法 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm. 最短路径快速算法-SPFA算法是西南交通大学段凡丁于1994年发表的. 适用范围:给定 ...
- SCUT - 365 - 鹏哥的数字集合 - wqs二分 - 斜率优化dp
https://scut.online/p/365 https://www.luogu.org/problemnew/solution/P2365 写这篇的时候还不是很明白,看一下这个东西. http ...
- 集合框架-Map集合练习-Map查表法
1 package cn.itcast.p10.map.test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public c ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 王学长的LCT标程
善良的王学长竟然亲自打了一遍QAQ好感动QAQ #include<iostream> #include<cstdio> #include<cmath> #inclu ...
- BJOI2019Day1 数据&标程&题解
链接: https://pan.baidu.com/s/16L5GHvo9WtY20sZoqjuQNQ 提取码: 3iur
- HDU4631(标程代码)
/*将x从小到大排序,每次插入一个点,直接找比这个点的x大的第一个,然后从这个开始向两边找 ,找点的下标用多重容器实现*/ #include<stdio.h> #include<st ...
随机推荐
- 【计算机视觉】BING: Binarized Normed Gradients for Objectness Estimation at 300fps
BING: Binarized Normed Gradients for Objectness Estimation at 300fps Ming-Ming Cheng, Ziming Zhang, ...
- JDK替换掉系统自带的gij编译工具
解决办法: 在终端里面依次输入以下两句话 alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_11/bin/java 300 al ...
- python条件判断if/else - python基础入门(8)
生活中我们总是面临各种选择,选择不同,结果也不同,不管我们是否愿意,总会有结果,有的快乐,也有的痛苦…… 鲁迅说:人只要有钱,烦恼就会减掉90%以上,情商智商也会提高,更不会乱发火!(关键是:钱怎么来 ...
- Python数据分析练手:分析知乎大V
原文链接:https://zhuanlan.zhihu.com/p/92768131?utm_source=tuicool&utm_medium=referral 知乎,可以说是国内目前最大的 ...
- windows下编译libevent(2.1.8)及使用
一:获取libevent github地址:https://github.com/libevent/libevent/releases 下载2.1.8稳定版 二:编译libevent 我是用的visu ...
- 版本管理——Git和SVN的介绍及其优缺点
版本管理 概念:版本管理是软件配置管理的基础,它管理并保护开发者的软件资源. 好处:可以保留我们的历史版本,在代码开发到一半的时候,不至于无故丢失,还可以查看BUG的来龙去脉. 版本管理种类: ...
- ubuntu系统里常用的几个命令
### ubuntu系统里常用的几个命令 卸载软件: sudo apt-get --purge remove easy-rsa //最后是包名, --purge是可选参数,加上的话移除配置文件 删除文 ...
- SysTick 定时实验(非中断)
实验目的:利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁. 编程要点 1.设置重装载寄存器的值 2.清除当前数值寄存器的值 3.配置控制与状态寄存器 过程 我们创建了两个文件: ...
- Abandoning Roads CodeForces - 1149D (最小生成树)
大意: 给定无向图, 边权只有两种, 对于每个点$x$, 输出所有最小生成树中, 点$1$到$x$的最短距离. 先将边权为$a$的边合并, 考虑添加边权为$b$的边. 每条路径只能经过每个连通块一次, ...
- SQL语句中加中括号[ ]的作用
有些可能是SQL里面的保留字,但是你又用了它做字段名 比如Action,用[Action] 就可以避免这个问题,如果直接Action SQL就要报错了. 解决较长的中文名表名可能会被不识别的问题.