2020-03-15

              一、生成排列

头文件: #include
1:bool next_permutation(begin, end);改变区间内元素的顺序,产生下一个排列。
2:bool prev_permutation(begin, end);产生前一个排列。3:end 为最后一个元素的下一个位置4:upper_bound(begin, end, value);返回>value的元素的第一个位置。
5:lower_bound(begin, end, value);返回>=value的元素的第一个位置。
二、set和multiset的应用
set 和 multiset会根据特定的排序准则,自动将元素排序,两者的不同之处在于multiset可以允许元素重复而set不允许元素重复。
头文件: #include
定义:set <data_type> set_name;
如:set s;//默认由小到大排序如果想按照自己的方式排序,可以重载小于号。
struct new_type
{ int x, y;
bool operator < (const new_type &a)const{
if(x != a.x)
return x < a.x;
return y < a.y;
}
}//起作用的是return 后的><;
set <new_type> s;
操作:
1:s.insert(elem) – 安插一个elem副本,返回新元 素位置
2: s.erase(elem) – 移除与elem元素相等的所有元素,返回被移除的元素个数。
3:s.erase(pos) – 移除迭代器pos所指位置上的元素,无返回值。
4:s.clear() – 移除全部元素,将整个容器清空
5:s.size() – 返回容器大小。
6:s.empty() – 返回容器是否为空。
7:s.count(elem) – 返回元素值为elem的元素的个数。
8:s.lower_bound(elem) – 返回 元素值>= elem的第一个元素位置。
9:s.upper_bound(elem) – 返回元素值 > elem的第一个元素的位置。
10:s.begin() – 返回一个双向迭代器,指向第一个元素。
11:s.end() – 返回一个双向迭代器,指向最后一个元素的下一个位置
三、map和multimap
所有元素都会根据元素的键值自动排序,map的所有元素都是pair,pair的第一个元素被视为键值,第二个元素为实值。map不允许两个元素有相同的键值,但multimap可以。
头文件: #include
定义:map <data_type1, data_type2> map_name;
如:map <string, int> m;//默认按string由小到大排序
操作:
1:m.size() 返回容器大小
2:m.empty() 返回容器是否为空
3:m.count(key) 返回键值等于key的元素的个数
4:m.lower_bound(key) 返回键值等于key的元素的第一个可安插的位置
5:m.upper_bound(key) 返回键值等于key的元素的最后一个可安插的位置
6:m.begin() 返回一个双向迭代器,指向第一个元素。
7:m.end() 返回一个双向迭代器,指向最后一个元素的下一个 位置。
8:m.clear() 讲整个容器清空。
9:m.erase(elem) 移除键值为elem的所有元素,返回个数,对 于map来说非0即1。
10:m.erase(pos) 移除迭代器pos所指位置上的元素。

在这里插入图片描述
中文大概:
许多工作人员住在一个叫做Mzone的地方,远离他们的办公室(4.5公里)。由于交通不便,许多工作人员选择骑自行车。我们可以假设,除了“weiwei”之外,所有的人都会以固定的速度从家到办公室。魏伟是一个有着不同的骑术习惯的人–他总是试图跟随另一个骑手,以避免独自骑车。weiwei到了Mzone的门口,就会找一个要去办公室的人。如果他找到了一个人,他就会跟着那个骑手,如果不是,他会等着有人跟着他。在从家里到办公室的路上,如果一个速度更快的骑手超过了weiwei,他就会离开他所跟踪的骑手,并加快速度跟上那个更快的骑手。我们假设weiwei到达Mzone大门的时间是0。考虑到其他人的时间和速度,你的任务是给weiwei到达办公室的时间。
输入有几个测试用例。每个案例的第一行是N(1<=N<=10000),代表骑手的数量(不包括weiwei)。n=0结束输入。以下N行是N个不同骑手的信息,格式如下:VI[TAB]Ti。VI是一个正整数<=40,表示每位骑手的速度(每小时公里).TI是第一骑手的出发时间,它是一个整数,以秒为单位计算.在任何情况下,都可以保证总有一个非负Ti。
每组输出一行:weiwei的到达时间。在处理分数时把(上限)值集合起来。
提到取上限,就用ceil函数,在中。
这题像追击问题,后面的骑手追weiwei,追上后,weiwei再追上同行,直到追上最快的和他一起到达。
如果讨论weiwei会很麻烦,weiwei的速度和路程一直在变。而其他骑手,要么在等着耗时间,要么骑行花时间。而且weiwei会和最前面的骑手一起到达,时间都是从0秒开始,到达结束。所以,求出耗时最少的骑手所花时间就行。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{ int n,ans;
  while(cin>>n)
  { if(n==0) break;        
    ans=1e9;        
    double v,t;        
    for(int i=1;i<=n;i++)       
    {  cin>>v>>t;            
       if(t>=0)            
       { int time=ceil(t+4.5*3600/v);                
         ans=min(ans,time);            
       }      
     }         
     cout<<ans<<endl;    
   }    
    return 0; 
}

贪心算法需要懂得思维变换和考虑周全。读不懂的题目,写出来,举例子说不定就明悟了。
测试没错,提交有错,就需要仔细检查代码以及试着找出反例来完善代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值