SRM479
250pt:
题意:有一排一共44,777,777个人,每个人需要咖啡或者茶,队伍的头部有一台饮料机,有一个空姐负责给所有人送饮料,她一开始在也头部。空姐拿一个水壶,一开始是空的,可以在饮料机的地方加最多7个单位的咖啡或者茶,加一次要47秒。空姐在相邻位置移动需要1秒,空姐给一个人倒茶或者咖啡需要4秒。现在告诉你哪些乘客需要茶(最多50个),问最优策略下,空姐需要多少时间可以给所有乘客倒好饮料并且回到队列头。
思路:直接枚举
500pt:
题意:有n<=477个城市,然后一些城市之间会有航班,每个航班有起飞和到达站、飞行时间,有一个航班开始时间,还有一个周期,从开始时间开始,每隔一个周期有一班飞机起飞。现在有一个人要从1飞到n,保证1到n之间没有直接的航班,于是必须至少要换一次航班。每次换航班都有一个等待时间,所有等待时间中的最小值就是一个保险系数。现在要在t<=1,000,000,000的时间内从1到达n,问可以达到的最大保险系数是多少。
思路:直接二分答案,那么接下来就是一个spfa判定了。
code:
#line 7 "TheAirTripDivOne.cpp"
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
using namespace std; #define PB push_back
#define MP make_pair #define REP(i,n) for(i=0;i<(n);++i)
#define FOR(i,l,h) for(i=(l);i<=(h);++i)
#define FORD(i,h,l) for(i=(h);i>=(l);--i) typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<double> VD;
typedef long long LL;
typedef pair<int,int> PII;
int A[], B[], F[], P[], T[];
vector<int> g[];
bool vis[];
long long d[];
class TheAirTripDivOne
{
public:
string S;
int n, m, limit;
void make_flight(){
m = ;
// cout << S << endl;
int cnt = , tmp = ;
for (int i = ; i < S.size(); ++i){
if (S[i] == ','){
if (cnt == ) A[m] = tmp;
if (cnt == ) B[m] = tmp;
if (cnt == ) F[m] = tmp;
if (cnt == ) T[m] = tmp;
cnt++;
tmp = ;
}
else if (S[i] == ' '){
P[m++] = tmp;
tmp = cnt = ;
} else tmp = tmp * + S[i] - ;
}
if (tmp > ) P[m++] = tmp;
for (int i = ; i <= n; ++i)
g[i].clear();
for (int i = ; i < m; ++i)
g[A[i]].PB(i);
}
bool SPFA(int waitTime){
for (int i = ; i <= n; ++i)
d[i] = (1LL << );
queue<int> q;
d[] = -waitTime;
vis[] = true;
q.push();
long long time, r;
while (!q.empty()){
int u = q.front(), v;
for (int i = ; i < g[u].size(); ++i){
v = B[g[u][i]];
time = d[u] + waitTime;
if (time <= F[g[u][i]]) time = F[g[u][i]];
else {
r = (time - F[g[u][i]] - ) / P[g[u][i]] + ;
time = F[g[u][i]] + P[g[u][i]] * r;
}
if (time + T[g[u][i]] < d[v]){
d[v] = time + T[g[u][i]];
if (!vis[v]) q.push(v), vis[v] = true; }
}
q.pop();
vis[u] = false;
}
return d[n] <= limit;
}
int solve(){
int l = , r = , mid;
int ret = -;
while (l <= r){
mid = (l + r) >> ;
if (SPFA(mid)){
l = mid + ;
ret = mid;
} else r = mid - ;
}
return ret;
} int find(int N, vector <string> flights, int time)
{
S = accumulate(flights.begin(), flights.end(), string(""));
n = N;
limit = time;
make_flight();
return solve();
}
};
SRM479的更多相关文章
- SRM475 - SRM479(1-250pt,500pt)
SRM 475 DIV1 300pt 题意:玩游戏.给一个棋盘,它有1×n(1行n列,每列标号分别为0,1,2..n-1)的格子,每个格子里面可以放一个棋子,并且给定一个只含三个字母WBR,长度为n的 ...
随机推荐
- N! (大数,优化)
Problem Description 输出N的阶乘.(注意时间限制150ms&&注意不能打表后输出) 打表的定义:在本地主机预先计算出了每个值对应的答案,并把输入和输出的映射直接写入 ...
- 数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)
ios中常用文件存取的方法有: 1.直接写文件的方式,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据全部存放在一个属性列表文件(*.p ...
- JS原型与原型链
1.原型(公用属性) 首先,我们来讲讲浏览器的初始状态,就是在无代码的情况下,浏览器所分配到的内存的使用情况,首先浏览器会创建一个全局对象global,而在这个全局对象global内含有许多的全局函数 ...
- 用php脚本比较MySQL两个数据库的结构差异
define('DATABASE1', 'mysql://root:password@127.0.0.1/db1'); $dbi1 = new DbMysql; $dbi1->dbh = DAT ...
- JQuery中after() append() appendTo()的区别
首先 after() 是追加在元素外边而append() appendTo()是追加在元素里面. $(selector).after(content) $("span").afte ...
- SharePoint 开发小结
目标:将sharepoint网站对接Office 365 最直接的API:How to: Add Office 365 APIs to a Visual Studio project http://m ...
- 【NIFI】 实现数据库到数据库之间数据同步
本里需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 数据同步 界面如下: 具体流程: 1.使用ExecuteSQL连接mysql数据库,通过写sql查询所需要的数据 2.nifi ...
- mybatis学习六 parameterType 属性
1. 在 XXXMapper.xml 中<select><delete>等标签的 parameterType 可以控制参数类型2. SqlSession 的 selectLis ...
- 2017年多校get点
杨辉三角形变形??? lucas定理
- 矩阵快速幂小结-Hdu2604
矩阵快速幂可以想象为线性代数的矩阵相乘,主要是运用于高效的计算矩阵高次方. 将矩阵两两分组,若要求a^n,即知道a^(n/2)次方即可,矩阵快速幂便是运用的这个思路. 比方想求(A)^7那么(A)^6 ...