因为部分字符是图片所以空着请谅解
猜数游戏(number)
今天你交到了一个新的friend, 他想要考考你。
于是他把自己的电话号码写成了一系列的英文单词,
比如说012就写成了ZEROONETWO
然后,他干了一件很恶趣味的事,那就是把这个字符串 打ꞏ乱ꞏ了
比如上面的字符串可能就变成OWTZEOORNE
他想要考考你你能不能从这个打乱的字符串 还原出原来的电话号码
正常情况下这当然是不可能的,不过他给了你一个提示,你能够确定的是,它的电话号码是不降的,也就是说,只 会有001122这样的号码,而不会有010122这样的号码
题目数据保证有唯一解
输入格式
输入一行一个字符串,只包含大写字母
字符串由以下单词拼接并打乱而成,ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE
输出格式
输出一行字符串,表示还原的电话号码,题目保证每个输入都有唯一的解
数据规模及约定
对于 的数据
对于 的数据
样例输入
OZONETOWER
WEIGHFOXTOURIST
OURNEONFOE
ETHER
样例输出
012
2468
114
3
这道题目就是先通过一些某个字符只有它有来确定其的个数,一个一个确定下来
#include
using namespace std;
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
string a;
cin>>a;
int l=a.size();
int s[300]={},shu[10]={};
for(int i=0;i
本题时间限制3秒
这题讲的人没有讲好清楚
据说是SPFA
因为一个人传到另个人最多丢一次,要么走x要么走y
传了之后就没他事了。
超越光速(ftl)
题目描述
宇宙大国F国通过亚空间通道连接分散在宇宙各处的殖民地。
具体来说就是从编号星球 出发,一直到编号 的星球。而这条通道上运行有两种不同的超光速飞船。
一种是在帝国的每个殖民地都停船上下客的慢速飞船,对它来说从站点 进入超光速到达站点 需要花费 分钟。
另一种是快速飞船,它只在其中 个星球停泊,分别是 . 这种飞船从星球 航行到站点 需要花费 分钟。
为了提高帝国交通系统地运行效率,也就是从 号站点出发,坐不超过 分钟的飞船(任意一种),能到达的城市数 量(不包括 号)尽可能多。 F国决定启用一种新型飞船,它的运行速度是 . 现在大家在正考虑这种飞船要在哪些 站点经停,目前的要求是这样的:
1. 之前的快速飞船经停的站点,新的飞船也必须要停 2. 这种飞船必须在恰好 个站点经停
因为是超光速飞船,任意时刻乘客都可以在某个站点搭乘自己想要坐上的飞船,这个时间可以忽略不计。也就是 说,乘客可以在某个星球下船,然后瞬间换乘到经过这个星球的另一种速度船上。
交通部门想要知道,为了使得航线线路的运行效率最高,新型飞船的最佳的站点设置是什么样的。
注意,这里的航行是从星球 到星球 , 哪怕他不在这颗星球停下来,路过他也是要花时间的
输入格式
第一行输入三个整数 . 代表F国一共 个星球, 快速飞船停泊的站点数量 ,以及中速飞船规划中的站点数量 .
第二行输入三个整数 表示三种船经过一站需要的时间。
第三行包含一个整数 , 做不超过 分钟的飞船(任意一种),从 号星球能到达的星球数量(不包括 号)尽可能 多。
接下来 行,每行一个整数 表示快速飞船经停的站点 .
输出格式
输出一个整数,表示在 分钟内能到达的最多的站点数量(不包括1号站点)。
数据规模及约定
对于 的数据,
对于 的数据,
对于另外 的数据
样例输入
10 3 5 10 3 5 30 1 6 10
10 3 5 10 3 5 25 1 6 10
90 10 12 100000 1000 10000 10000 1 10 20 30 40 50 60 70 80 90
12 3 4 10 1 2 30 1 11 12
300 8 16 345678901 123456789 234567890 12345678901 1 10 77 82 137 210 297 300
1000000000 2 3000 1000000000 1 2 1000000000 1 1000000000
样例输出
8
7
2
8
72
3000
样例1的解释
除了 号星球都可以在 分钟内到达
快速飞船能到达1 6 10, 因为快速飞船的速度是 , 这三个目的地都可以在 的时间内到达
令新型飞船停靠1 5 6 8 10
对于站点 可以直接慢速前进
对于站点 , 可以做快速飞船到 ,再坐 分钟慢速到达,一共 分钟
对于站点 , 可以做快速飞船到 ,再做 分钟新型飞船到达,一共也是 分钟
对于站点 , 我们到不了
这样2 3 4 5 6 7 8 10都可以到达
一共是 个站点
这一题用贪心
因为之前没有看到解释一直误解题意
先考虑直接坐慢的能坐到哪
因为快的直接到它自己的一个站点节约时间
到一个快的能直接到的一个站点
再考虑快的在相邻两个站点去掉之前的时间在通过慢的能到哪
因为中的必须要包括快的站点,所以自由的只有中的减快的
在再该快的两点的慢的能道达的最远位置设置中的站点
这样就能在该种情况下让增加的能到的站点便得尽可能地多
再把每两点的情况都遍历出来
选出最优的算出最后可以的站点就好了
还有个是在两个快的之间如果有多个中的,增加的站点是依次递增的
所以前面的一定比后面的先
所以可以直接把每个设置的中的增加的到的数量入堆到时候依次输出就可以了
完全不可靠的代码只是我的大致思路 :
#include
using namespace std;
#define C getchar()-48
#define ll long long
inline long long read()
{
long long dr=0,zf=1,k=getchar()-48;
for (;k<0||k>9;k=getchar()-48) if (k==-3) zf=-1;
for (;k>=0&&k<=9;k=getchar()-48) dr=(dr<<1)+(dr<<3)+k;
return dr*zf;
}
ll n,m,k,a,b,c,t,s[100000010];
int main()
{
//输入
n=read();m=read();k=read();//星球 快 中 站点 数
a=read();b=read();c=read();//各时间
t=read();//总时间
for(int i=1;i<=m;i++)
s[i]=read(); //快站点
//预处理出刚开始满不能直接到达的快的
ll cc=t/a+1,x,maxj,dq,lj=0;//cc慢的直接到达最远 maxj不算快的和满的最多增加 dq 当前站点 lj累计用的中的
for(int i=1;i<=m;i++)
if(s[i]>=cc)
{
x=i;
break;
}
maxj+=m-x+1;//慢快总共能直接到达的站点
priority_queue, greater >q;//处理每个增加的站点
//work
for(int i=x;i<=m;i++)
{
ll jj=(s[i-1]-1)*b,qjj; //jj用快的前面用的时间 qjj前个中的
lj=0;//lj累计用的中的
qjj=s[i-1];//前个中的
dq=qjj+(t-jj)/a;//当前站点
while(dq0||lj>=k-m)//前个最后的站点不能超过 增加中的必须要有 用的中的不超过自由的中的
{
lj++;//用的中的
jj+=(dq+1-(qjj))*c;//换中的全部用的时间
qjj=dq+1;//前个中的
int jjj=(t-jj)/a; //增加的站点
dq+=jjj;//当前站点
if(dq0||lj>=k-m)//前个最后的站点不能超过 增加中的必须要有 用的中的不超过自由的中的
{
lj++;//用的中的
jj+=(dq+1-(qjj))*c;//换中的全部用的时间
qjj=dq+1;//前个中的
int jjj=(t-jj)/a; //增加的站点
dq+=jjj;//当前站点
if(dq