Price(洛谷P4109 [HEOI2015]定价)
题目
思路:
按照我的思路这一题应该是这样子的
剔除+判断
剔除
因为后面的0要越多越好,所以我们判断0出现的情况,当2个数之间的差大与10时,证明2个之间会存在一个0,所以这一位我们可以把它去掉,相当于我们已经储存了一个0,当2个数之间差小于10我们就不能再删了,因为这时可能不存在0,如果其中有个数小于10的话,我们也停止,因为再删这个数就会消失(其实继续删也可以,只是不要对长的数字多删除....)
e.g
145 160
由于2个数之间差大于10
所以就会被我处理成14 16
那么我们所需要的数就在14~16之间,但很明显的,我们不能选14,因为140不满足条件,所以在剔除数时,我们要记录我们所剔除掉的数是不是为0,如果存在不是0的,那么我们后面就要对14++即15,我们所要找到值也就是在15~16之间即150
while(m>=&&n-m>=)//1.剔除+判断
{
if(m%!=) x1=true;
m=m/;
n=n/;
len3++;
len4++;
}
if(x1==true)//对范围的影响
{
m+=;
}
接下来我们要做的就是进行特判处理
1.存在5的整10或整100数,我们可以通过计算很容易得出,这类数是长度最小的,所以我们放到第一个进行特判
我们记录输入2个数的长度,在这个长度的条件下去寻找,如果一个关于5的整10整100数成立,立刻输出(我就是这一步错了,导致只有50分,因为我在判断时,第一种情况就是50,结果我这么知道有50%的数据 都考到了这个点...)
int ans=;
for(int i=;i<=len2;i++)//计算是否有5的整数混在其中
{
if(ans>=x&&ans<=y)
{
cout<<ans<<endl;
fin=;
break;
}
ans*=;
}
2.由于关于5的整的都被我们判断完了,那么我们现在就是处理x的长度不等于y的长度的情况,在这种情况下,我们就只需要找到最小整10或整100..的就可以啦
同样我们在处理时,也要考虑2位数或更多位数其除了首位数以外对数字的影响
if(fin==&&len1!=len2)
{
while(x>)
{
if(x%!=&&x>) y2=true;
haha=x;
x=x/;
}
if(y2==true) haha+=;
for(int i=;i<len1;i++)
{
haha*=;
}
cout<<haha<<endl;
fin=;//对后面的判断有用
}
3.考虑长度相同的2个数,虽然这2个数已经被我剔除的差不够10了,但是其数字之间也是可以存在整10的,例如18 26..
而且期间也可能出现末尾是5的,那么这里我们就要纠结一下,到底是5优还是0优,0啦如上面的例子20 和25 一个的荒谬值为2,一个为3
所以最后一个特判也就如下,如果这2种情况都不存在,那就是最小的值
else if(fin==&&len1==len2)
{
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
{
int d=m;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
}
#include<bits/stdc++.h>
using namespace std;
int T;
int x,y;
bool x1=false;
bool y2=false;
int len1,len2,fin;
int main()
{
//freopen("Price.in","r",stdin);
// freopen("Price.out","w",stdout);
cin>>T;
while(T--)
{
scanf("%d%d",&x,&y);
x1=false;y2=false;
fin=;
int star,len,len3,len4,m,n;
len1=;
len2=;
len3=;
len4=;
m=x;
n=y;
while(m>)
{
m=m/;
len1++;
}//计算长度
while(n>)
{
n=n/;
len2++;
}
m=x;
n=y;
while(m>=&&m>=&&n-m>=)//1.剔除+判断
{
if(m%!=) x1=true;
m=m/;
n=n/;
len3++;
len4++;
}
if(x1==true)//对范围的影响
{
m=m+;
}
len=min(len1,len2);
int ans=;
for(int i=;i<=len2;i++)//计算是否有5的整数混在其中
{
if(ans>=x&&ans<=y)
{
cout<<ans<<endl;
fin=;
break;
}
ans*=;
}
int haha=;
if(fin==&&len1!=len2)
{
while(x>)
{
if(x%!=&&x>) y2=true;
haha=x;
x=x/;
}
if(y2==true&&len1!=) haha+=;
for(int i=;i<len1;i++)
{
haha*=;
}
cout<<haha<<endl;
fin=;
}
else if(fin==&&len1==len2)
{
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
{
int d=m;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
}
}
}
return ;
}
/*
思路:
从最后一位开始比较
如果前面的不同且包含5
就选择5
否则就选择整10数
#include<bits/stdc++.h>
using namespace std;
int T;
int x,y;
bool x1=false;
bool y2=false;
int len1,len2,fin;
int main()
{
//freopen("Price.in","r",stdin);
// freopen("Price.out","w",stdout);
cin>>T;
while(T--)
{
scanf("%d%d",&x,&y);
x1=false;y2=false;
fin=;
int star,len,len3,len4,m,n;
len1=;
len2=;
len3=;
len4=;
m=x;
n=y;
while(m>)
{
m=m/;
len1++;
}//计算长度
while(n>)
{
n=n/;
len2++;
}
m=x;
n=y;
while(m>=&&n-m>=)//1.剔除+判断
{
if(m%!=) x1=true;
m=m/;
n=n/;
len3++;
len4++;
}
if(x1==true)//对范围的影响
{
m=m+;
}
len=min(len1,len2);
int ans=;
for(int i=;i<=len2;i++)//计算是否有5的整数混在其中
{
if(ans>=x&&ans<=y)
{
cout<<ans<<endl;
fin=;
break;
}
ans*=;
}
int haha=;
if(fin==&&len1!=len2)
{
while(x>)
{
if(x%!=&&x>) y2=true;
haha=x;
x=x/;
}
if(y2==true&&len1!=) haha+=;
for(int i=;i<len1;i++)
{
haha*=;
}
cout<<haha<<endl;
fin=;
}
else if(fin==&&len1==len2)
{
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
for(int i=m;i<=n;i++)
{
if(i%==)
{
int d=i;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
fin=;
break;
}
}
if(fin==)
{
int d=m;
for(int j=;j<=len3;j++)
{
d*=;
}
cout<<d<<endl;
}
}
}
return ;
}
/*
思路:
从最后一位开始比较
如果前面的不同且包含5
就选择5
否则就选择整10数...
*/
Price(洛谷P4109 [HEOI2015]定价)的更多相关文章
- 洛谷——P4109 [HEOI2015]定价
P4109 [HEOI2015]定价 模拟(有点儿贪心) 题目要求在区间$l,r$中$x$后导0尽量多,且除去后导0之外,最后一个数尽量是$5$才最优 从$l$到$r$依次考虑, 假设当前考虑到$50 ...
- 洛谷 P4109 [HEOI2015]定价
洛谷 这是今天的考试题,我来发一波- 看L和R的范围,显然不能一个一个加,这样会有很多重复情况,会超时,只要看该数有多少个后导0,就把L加上10的多少次方. 很容易可以想到价格后面尽可能多0, 在此基 ...
- 洛谷 P4112 [HEOI2015]最短不公共子串 解题报告
P4112 [HEOI2015]最短不公共子串 题目描述 在虐各种最长公共子串.子序列的题虐的不耐烦了之后,你决定反其道而行之. 一个串的"子串"指的是它的连续的一段,例如bcd是 ...
- P4109 [HEOI2015]定价
题目描述 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商 ...
- 洛谷P4107 [HEOI2015]兔子与樱花 [贪心,DFS]
题目传送门 兔子与樱花 题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1 ...
- [洛谷P4111][HEOI2015]小Z的房间
题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...
- Luogu P4109 [HEOI2015]定价 贪心
思路:找规律?$or$贪心. 提交:1次 题解: 发现:若可以构成$X0000$,答案绝对不会再在数字最后把$0$改成其他数: 若可以构成$XX50...0$更优. 所以左端点增加的步长是增加的($i ...
- [洛谷P4107] HEOI2015 兔子与樱花
问题描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- 【BZOJ4029】[HEOI2015]定价(贪心)
[BZOJ4029][HEOI2015]定价(贪心) 题面 BZOJ 洛谷 题解 每次加上十进制下的\(lowbit\)就行了??? #include<iostream> #include ...
随机推荐
- 这些天php面试的总结
面试总结 记录一些本人在面试中遇到的觉得有些掌握不好的面试题,下面的答案都是本人回答的,如果哪里不对的话,希望各位能够指出. 1.Git fetch和git pull的区别 Git fetch相当于从 ...
- PHP《将画布(canvas)图像保存成本地图片的方法》
用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审 ...
- 更新user的方法
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import UserChangeForm ...
- java 数据结构与算法 之查找法
一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public ...
- python while 学习
while True: reply = input('please input:') if reply == 'stop': break else: print (reply.upper())
- 【插件】LinqToExcel常用对象
1.ExcelQueryFactory对象(1)获取工作表名集合IEnumerable<string> GetWorksheetNames() //获取工作薄中的工作表名foreach ( ...
- 洛谷 P2015 二叉苹果树
老规矩,先放题面 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端 ...
- 函数式编程(1)-高阶变成(2)-filter
filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素,然 ...
- 51nod 1766 树上的最远点对(线段树)
像树的直径一样,两个集合的最长路也是由两个集合内部的最长路的两个端点组成的,于是我们知道了两个集合的最长路,枚举一下两两端点算出答案就可以合并了,所以就可以用线段树维护一个区间里的最长路了. #inc ...
- Spring MVC @PathVariable注解
下面用代码来演示@PathVariable传参方式 @RequestMapping("/user/{id}") public String test(@PathVariable(& ...