Codeforces Round #201 (Div. 2). E--Number Transformation II(贪心)
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Description
You are given a sequence of positive integers x1, x2, ..., xn and two non-negative integers a and b. Your task is to transform a into b. To do that, you can perform the following moves:
- subtract 1 from the current a;
- subtract a mod xi(1 ≤ i ≤ n) from the current a.
Operation a mod xi means taking the remainder after division of number a by number xi.
Now you want to know the minimum number of moves needed to transform a into b.
Input
The first line contains a single integer n (1 ≤ n ≤ 105). The second line contains n space-separated integers x1, x2, ..., xn (2 ≤ xi ≤ 109). The third line contains two integers a and b (0 ≤ b ≤ a ≤ 109, a - b ≤ 106).
Output
Print a single integer — the required minimum number of moves needed to transform number a into number b.
Sample Input
Input
3
3 4 5
30 17
Output
6
Input
3
5 6 7
1000 200
Output
206
题意:
给出n个数,以及a跟b,你有两种操作,要么a-1,要么a-a%x[i],问最终由a变到b需要多少步
思路:
一开始以为是数论之类的题目,不敢用暴力写,但在看了题解之后发现用暴力贪心再加一个小剪枝就完全能过。。。
由于元素有可能重复,所以需要对所有元素去重。
然后得知道一点,如果a-a%x[i]如果小于b,那以后无论如何变a-a%x[i]仍然会小于b,所以x的个数会逐渐递减。
接下来就是贪心,每次取a-1跟a-a%x[i]最小的数,直到a==b
这里有一个小细节,我第一次交的时候,在二层循环内部是用的两个max处理的(见注释掉的部分),然后挂掉了。。。。
然后我改成了一个min,就AC了,
以后能够简化运算的地方一定要简化,特别是循环内部
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+3;
int m[MAXN];
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
//freopen("data.in","r",stdin);
int a,b;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>m[i];
}
cin>>a>>b;
sort(m,m+n);
int len=unique(m,m+n)-m;
int res=0;
int now=-1;
while(a>b){
//now=a-1;
now=a-1;
for(int i=0;i<len;i++){
if(a-a%m[i]<b){
m[i--]=m[--len];
}
else{
// now=max(now,a%m[i]);
// now=max(now,1);
now=min(now,a-a%m[i]);
}
}
//a-=now;
a=now;
res++;
}
cout<<res<<endl;
}
Codeforces Round #201 (Div. 2). E--Number Transformation II(贪心)的更多相关文章
- Codeforces Round #277 (Div. 2)---C. Palindrome Transformation (贪心)
Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes input sta ...
- 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation
题目传送门 /* 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 */ /************************************************ ...
- 暴力 Codeforces Round #183 (Div. 2) A. Pythagorean Theorem II
题目传送门 /* 暴力:O (n^2) */ #include <cstdio> #include <algorithm> #include <cstring> # ...
- Codeforces Round #201 (Div. 2)C,E
数论: C. Alice and Bob time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心
Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操 ...
- Codeforces Round #277 (Div. 2)C.Palindrome Transformation 贪心
C. Palindrome Transformation Nam is playing with a string on his computer. The string consists o ...
- Codeforces Round #201 (Div. 2) - C. Alice and Bob
题目链接:http://codeforces.com/contest/347/problem/C 题意是给你一个数n,然后n个数,这些数互不相同.每次可以取两个数x和y,然后可以得到|x - y|这个 ...
- Codeforces Round #266 (Div. 2) C. Number of Ways
You've got array a[1], a[2], ..., a[n], consisting of n integers. Count the number of ways to split ...
随机推荐
- MVCC实现机制
1. MVCC简介 1.1 什么是MVCC MVCC(Multiversion concurrency control )是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 并发访问(读 ...
- Binding的Path(路径)
Binding的源可以是控件(一个控件是另一个控件的Source.控件把自己的容器作为Source),把集合作为ItemsControls的Source,把xml作为Tree或者Menu的Source ...
- 构造器(Constructor)--构造函数
构造器是类型的成员之一,其他成员比如,成员字段,成员函数.狭义上,构造器指的是实例构造器(instance constructor) class Student { public int ID; pu ...
- 部署master节点组件
部署master节点组件 master节点的组件有:kube-apiserver,kube-scheduler,kube-controller-manager 大致安装步骤如下: # mkdir -p ...
- 27 Python 装饰器
一. 我们先写一个玩游戏的步骤 # def play(): # print("双击LOL") # print("选择狂战士") # print("进草 ...
- python之BeautifulSoup4
阅读目录 1.Beautiful Soup4的安装配置 2.BeautifulSoup的基本用法 (1)节点选择器(tag) (2)方法选择器 (3)CSS选择器 (4)tag修改方法 Beautif ...
- Jquery.serializeArray()可看表单提交内容
- 深入理解python元类
类也是对象 在理解元类之前,你需要先掌握Python中的类.Python 中的类概念借鉴 Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.当然在 P ...
- 五,pod控制器应用进阶
目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...
- js事件总汇
Mouse 事件 描述onClick 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDblClick 鼠标双击事件 on ...