250pt

给定手机0-9按键对应的英文字母(1个对多个),0固定对应空格。然后在给定一些单词。以及一个要处理的串,叫你按照那个串模拟输出结果

思路:

大模拟,写的有点乱

 // BEGIN CUT HERE
/* */
// END CUT HERE
#line 7 "T9.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;
struct oo{
string d, s;
bool operator <(const oo &b)const{
if (s < b.s || (s == b.s && d < b.d)) return true;
return false;
}
}; class T9
{
public:
char d[];
oo S[];
int n, m, k;
string find(string a, int k){
int cnt = ;
for (int i = ; i < m; ++i){
if (S[i].s == a) ++cnt;
if (cnt == k) return S[i].d;
}
return "";
}
string message(vector <string> part, vector <string> dict, vector <string> keystr)
{ n = part.size(), m = dict.size(), k = keystr.size();
for (int i = ; i < n; ++i)
for (int j = ; j < part[i].size(); ++j)
d[(int)part[i][j]] = i + ;
for (int i = ; i < m; ++i){
S[i].d = dict[i];
S[i].s.clear();
for (int j = ; j < dict[i].size(); ++j)
S[i].s.push_back(d[dict[i][j]]);
}
sort(S, S + m);
string ans = "";
int cnt = ;
string tmp = "";
string ks = accumulate(keystr.begin(), keystr.end(), string(""));
int k = ks.size();
for (int i = ; i < k; ++i){
if (ks[i] == '*'){ cnt += ; continue; }
if (ks[i] == '#'){ cnt += ; continue; }
if ((ks[i] < '' || ks[i] > '') && (int)tmp.size() > ){
ans += find(tmp, cnt + );
cnt = ;
tmp.clear();
}
if (ks[i] == '') ans += ' ';
if (ks[i] > '' && ks[i] <= '') tmp += ks[i];
}
if ((int)tmp.size() > ) ans += find(tmp, cnt + );
return ans;
} };

500pt

给定n(n <= 40w)个城市,然后在给定2个数组(需要按照给定的算出来),一个为不坐飞机情况下i->i+1所用的时间,一个为作为飞机所用的时间

求在不超过坐k次飞机的情况下,最少时间(一次可以连续做多个城市,但必须连续,比如i->i+1->i+2..)

思路:

动态规划

dp[i][j][k]表示当前到i城市,做了j次飞机,k(0或1)表示最后一次做没做飞机所用的最少时间

方程应该很好推。但要用滚动数组

 // BEGIN CUT HERE
/* */
// END CUT HERE
#line 7 "RoadOrFlightHard.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)
#define Inf (1LL << 50)
typedef vector<int> VI;
typedef vector<string> VS;
typedef vector<double> VD;
typedef long long LL;
typedef pair<int,int> PII;
long long rT[], fT[];
long long dp[][][]; class RoadOrFlightHard
{
public:
long long minTime(int N, int roadFirst, int roadProd, int roadAdd, int roadMod, int flightFirst, int flightProd, int flightAdd, int flightMod, int K)
{
rT[] = roadFirst % roadMod;
fT[] = flightFirst % flightMod;
// cout << rT[0] << endl;
for (int i = ; i < N; ++i){
rT[i] = (rT[i-]*roadProd + roadAdd) % roadMod;
fT[i] = (fT[i-]*flightProd + flightAdd) % flightMod;
}
for (int i = ; i <= K; ++i)
dp[][i][] = dp[][i][] = Inf;
dp[][][] = ;
for (int i = ; i < N; ++i){
int cur = i & ;
for (int j = ; j <= K; ++j)
dp[cur^][j][] = dp[cur^][j][] = Inf;
for (int j = ; j <= K; ++j){
if (dp[cur][j][] < Inf){
if(j < K) dp[cur^][j+][] = min(dp[cur^][j+][], dp[cur][j][] + fT[i]);
dp[cur^][j][] = min(dp[cur^][j][], dp[cur][j][] + rT[i]);
}
if (dp[cur][j][] < Inf){
if(j < K) dp[cur^][j+][] = min(dp[cur^][j+][], dp[cur][j][] + fT[i]);
dp[cur^][j][] = min(dp[cur^][j][], dp[cur][j][] + fT[i]);
dp[cur^][j][] = min(dp[cur^][j][], dp[cur][j][] + rT[i]);
}
}
}
long long ans = Inf;
for (int i = ; i <= K; ++i)
for (int j = ; j <= ; ++j)
ans = min(ans, dp[N & ][i][j]);
return ans;
} };

SRM468的更多相关文章

  1. SRM468 - SRM469(1-250pt, 500pt)

    SRM 468 DIV1 250pt 题意:给出字典,按照一定要求进行查找. 解法:模拟题,暴力即可. tag:water score: 0.... 这是第一次AC的代码: /* * Author: ...

随机推荐

  1. C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

      BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 : ...

  2. UOJ 67 新年的毒瘤 - Tarjan

    Description 给出一个无向图, 要求找出某个点$u$, 去掉$u$和$u$所连的边, 所剩下的节点构成一棵树. Solution 首先, 割点肯定是不可能满足条件的, 因为去掉割点后会构成若 ...

  3. [翻译]Javaslang 介绍

    原文地址:Introduction to Javaslang 1. 概述 在这篇文章中,我们将会探讨: Javaslang 是什么? 为什么需要它? 以及怎样在项目中使用它? Javaslang 是J ...

  4. vue脚手架搭建的具体步骤

    1.全局安装cli npm install -g vue-cli 在全局安装vue的命令行工具 2.初始化项目 vue init webpack my-project   初始化一个基于webpack ...

  5. 实现SQL express版做自动备份数据库的方法

    SQL Server 2005/2008 Express版没有代理组件,不支持维护计划.可以采用下面的办法实现每日备份: 一.在要备份的数据库中创建存储过程. 存储过程名称:sp_BackupData ...

  6. kbmmw 的HTTPSmartService入门

    前面介绍过kbmmw 中的smartservice. 这个既可以用于kbmmw 的客户端,也可以使用http 访问. 在新版的kbmmw里面,作者加强了http 的支持,我们可以只使用HTTPSmar ...

  7. kbmMW均衡负载与容灾(2)(转载红鱼儿)

    集中式均衡负载 为实现集中式均衡负载方案,需要实现两个不同的应用服务器,一个是只包含均衡负载组件再无其他内容的应用服务器,可称之为均衡负载应用服务器,下文简称LB Server,另外一个就是包含一个或 ...

  8. html--笔记day03

    html--笔记day03 1.结构标记 1.<header>元素 <header></header> ==> <div id="header ...

  9. Oracle启动两个监听

    接上篇:Oracle服务器修改IP后 Oracle服务器更换IP后,办公网络里面可以正常访问了,外地的同事,连了vpn 也可以访问,以为可以收工回家,突然又有同事过来说,机房的服务器ping不通新的i ...

  10. 牛客训练四:Applese 走方格(细节)

    题目链接:传送门 思路:主要是n=1,m=2或者n=2,m=1时,不是-1. #include<iostream> #include<cstdio> #include<c ...