【SinGuLaRiTy-1017】 Copyright (c) SinGuLaRiTy 2017. All Rights Reserved.

对于所有的题目: Time Limit: 1s | Memory: 256 MB

第一题:跳舞

题目描述

奶牛舞会开始了。一共有n(n<=10000)头奶牛,编号为1,2,……,n,它们将要按照顺序登台表演。每头奶牛的跳舞时间是给定的,第i头奶牛的舞蹈需要的时间为dur[i]。舞台可以容纳k头奶牛同时跳舞。开始的时候,编号为1,2,……k的奶牛都上台同时跳。当某头奶牛的舞蹈结束以后,它就立刻下台,下一头奶牛立刻登台开始跳。奶牛上台和下台可以认为是瞬间的,不消耗时间。现在给定奶牛们跳舞的总时间为T,即在T以内,所有奶牛的都必须结束舞蹈。请你确定k的最小值。数据保证当k=n时,一定可以在T以内完成所有舞蹈。

输入

第一行给出两个整数N和T。T不超过1百万。

接下来N行,表示奶牛们的舞蹈所花的时间,dur[i]是一个[1,100000]的整数。

输出

一个整数,表示最小的k。

样例数据

样例输入 样例输出

5 8

4

7

8

6

4

4

题目分析

第一题......并没有什么好说的,好吧,还是说说好了。

枚举舞台的大小i(从小往大枚举,方便输出),首先舞台的大小不会大于奶牛的个数。开始时老老实实的把前i个奶牛给存进堆里,然后开一个变量(这里用bowl来说),找到堆的最小值j,让bowl=bowl+(j-bowl),j-bowl表示这头奶牛剩余的时间;然后再把下一个奶牛存进堆,这时候存的时候应该存的值是bowl+原来奶牛跳舞的时间(因为弹出奶牛的时候要j-bowl),如果到最后bowl(bowl存的其实就相当于跳舞用的总时间,但是最后一个奶牛进去堆后,别忘了台上还是有奶牛的,所以应该在想办法吧台上的奶牛跳舞所用的时间也加进去)还是小于timemaxx,那就直接输出。

STD Code

#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<iostream>
#include<algorithm> #define MAXN 10100 using namespace std; priority_queue<int,vector<int>,greater<int> >q; int a[MAXN];
int n,t; int main()
{
scanf("%d%d",&n,&t);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<=n;i++)
{
int j;
for(j=;j<=i;j++)
q.push(a[j]);
int bowl=;
while(j<=n&&bowl<=t)
{
bowl+=(q.top()-bowl);
q.pop();
q.push(a[j++]+bowl);
}
while(!q.empty())
{
bowl+=(q.top()-bowl);
q.pop();
}
if(bowl<=t)
{
cout<<i;
return ;
}
}
return ;
}

第二题:石头剪刀布

题目描述

小明和小新玩石头剪刀布的游戏。小明在这方面是专家,他可以猜到小新下一次出什么。但是他很懒,他几乎每次都出一样的动作。具体来讲,在整个游戏过程中,他最多只变换一次,即可以从始至终只出一种手势,或是在前几次一种手势,在剩下的次数中出另一种手势。现在他们玩N次游戏,告诉你每次小新出什么。问小明最多能赢几次。

输入

第一行一个整数n,表示游戏进行的次数。(1<=n<=100000)

接下来n行,为H,P,或S中的一个。表示小新出的动作。H表示石头,P表示布,S表示剪刀。

输出

一个整数,表示小明最多能赢几次。

样例数据

样例输入 样例输出

5

P

P

H

P

S

4

题目分析

数据量为十万,所以必须思考一下线性的做法,但其实这道题也很简单,因为我们已经知道小新的出拳的顺序。

把数据给的字母换成数字。然后用六个变量分别记录换手势前和后石头,剪刀,布个能赢多少次。扫一遍,边扫边判断,改变六个变量的值,然后就很简单了。

STD Code

#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath> #define MAXN 100100
#define INF 10000 using namespace std; int n;
char c[];
int a[MAXN];
int maxx=-INF;
int h1,s1,p1,h2,s2,p2; int MAX(int a,int b,int c)
{
int w=b;
if(a>b)
w=a;
if(c>w)
w=c;
return w;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",c);
if(c[]=='H')
a[i]=;
else if(c[]=='S')
a[i]=;
else if(c[]=='P')
a[i]=;
}
for(int i=;i<=n;i++)
{
if(a[i]==)
h2++;
if(a[i]==)
s2++;
if(a[i]==)
p2++;
}
for(int i=;i<=n;i++)
{
if(a[i]==)
{
h1++;
h2--;
}
if(a[i]==)
{
s1++;
s2--;
}
if(a[i]==)
{
p1++;
p2--;
}
int ans=MAX(h1,s1,p1)+MAX(h2,p2,s2);
if(ans>maxx)
{
maxx=ans;
}
}
printf("%d",maxx);
return ;
}

第三题:奶牛密码

题目描述

奶牛们在玩密码游戏。他们拿到一个字符串,首先将它复制一份,然后将复制的字符串进行循环右移——即将最右边的字符放到该字符串的左边,成为第一个字符。然后将循环移位后的字符串接在原来的字符串的后面。这样,它们就得到了一个长度为原来两倍的字符串。

如果这样一直做下去,则字符串的长度会越来越大。现在,奶牛需要问你这个无穷长的字符串的第n个字符是什么?最左边的位置为第1个位置。

输入

一个字符串S和一个整数n。S由最多30个字母组成,n<=10^18。

输出

一个字符。

样例数据

样例输入 样例输出
COW 8 C

样例解释

COW——COWWCO——COWWCOOCOWWC

第8个字符是c。

题目分析

n<=10^18......绝对long long。然后就开始考虑了,这个怎么搞呢,首先不是按照样例的套路搞一个字符串然后一直加,看来还是要找规律的。

就用输入样例来说:

COW -> COWWCO -> C O W | W C O | O C O W W C

然后我们把最后的结果分一下COWWCOOCOWWC 表示生成的过程。这样我们发现第八个是在第三组里面(红色的一组,蓝色的一组,黑色的一组),也就是说,必须要进行2次才会出现第八的字符,这时候字符的总数有3*2^2,其中,3是原始字符的长度m,第一个2是一个在这道题中不会变得常数,第二个2表示要进行n次才会出现第八个字符,然后我们考虑怎么确定第八个字符在原始字符串里的位置。

根据题目我们知道,黑色字符串与蓝色字符串的区别就在于第一个O应该是在最后,那么我们设想一下,如果没有把最后一个字符放在最前边的规则,那么第八个字符在这个字符串中应该是第七个字符,而这时蓝色字符串与黑色字符串就应该是一样的,也就是说第七个字符就等于第7-6=1个字符,C。

如果让求的字符是第11个,那么根据刚才的思想这个在蓝色字符串中对应的就应该是第11-1=10-6=4个,这时候就把它转换到蓝色的字符串中了,但是因为它还是没有进到初始的字符串中,所以我们还需要继续往下分,那么又可以根据刚才的思想把它分到带红色的字符串里,但是这是我们转换到的第四个字符是非常特殊的,因为如果根据上一段的思想的话,这个字符在还原的时候应该是第六个,也就是说这时候我们需要特判一下,不应该是4-1,而应该是让它等于3*2^1=6;然后再继续往下分......

STD Code

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib> #define MAXN 66 using namespace std; long long n;
string a;
long long k[MAXN]; int main()
{
cin>>a>>n;
k[]=;
for(int i=;i<=MAXN-;i++)
{
k[i]=k[i-]*;
}
int m=a.size();
long long u=n/m;
long long w=(double)(log(u*1.0)/log(*1.0));
for(int i=;i<=MAXN-;i++)
{
if(u==k[i]&&n%m==)
{
w--;
break;
}
}
long long q=;
for(int i=;i<=w;i++)
{
q*=;
}
long long num=n;
while(num>m)
{
bool flag=;
for(int i=;i<=MAXN-;i++)
{
if(num==(m*k[i]+))
{
num=m*k[i+];
flag=;
break;
}
}
if(!flag)
{
num--; }
num-=m*k[w--];
while(num<=m*k[w])
{
w--;
}
}
cout<<a[num-];
return ;
}

Time : 2017-04-18

[SinGuLaRiTy] 高一下半期测试的更多相关文章

  1. [SinGuLaRiTy] 树形DP专项测试

    [SinGuLaRiTy-1015] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s  |  Me ...

  2. 注册宝第五期beta2插件模块下载及说明

    原文:http://bbs.84zcb.com/showtopic-1882.aspx [软件名称]:注册宝插件模块 [软件版本]:V1.4 [软件大小]:6.36M [软件语言]:简体中文 [授权方 ...

  3. redmine测试使用小结

    在尽量不影响当前项目活动的情况下,可以对测试过程作部分改进,能够支持建立项目的BUG管理过程,简述如下: 1.配置角色和权限->新建角色:测试人员 (1)主要配置问题跟踪权限 (2)提前规划好再 ...

  4. BI测试

    BI概念: 商业智能(Business Intelligence 简称BI),指数据仓库相关技术与应用的通称.指利用各种智能技术,来提升企业的商业竞争力.是帮助企业更好地利用数据提高决策质量的技术,包 ...

  5. [考试反思]0809NOIP模拟测试15:解剖

    说在前面: 不建议阅读.这里没有考试经验,只有一大堆负面情绪. 看了你不会有什么收获.看完了就不要怪我影响了你的心情. 以后不粘排行榜了.没什么意思没什么用. 但是我的意思并不是因为这次没考好的一时兴 ...

  6. MySQL Test Run 测试框架介绍

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-te ...

  7. Maven之构件

    定义 构件:在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可成为构件.每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId, ...

  8. 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶

    第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...

  9. (转)C++0x语言新特性一览

    转自:http://blog.csdn.net/zwvista/article/details/2429781 原文请见http://en.wikipedia.org/wiki/C%2B%2B0x. ...

随机推荐

  1. vijos1369:难解的问题

    描述 在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可能想不出 ...

  2. idea debug的时候 启动起来超级慢

  3. 从一个简单的小实例分析JSP+Servelt与JSP+Struts2框架的区别

    最近在学struts2,struts2相比以前的JSP+Servlet,在处理流程上的更简单,我们就一个小实例来具体分析一下. 实例内容如下: 实现一个简单的注册页面包括:用户名.密码.重复密码.年龄 ...

  4. Pandoc+markdown生成slides

    Pandoc+markdown生成slides 参考:http://blog.csdn.net/pizi0475/article/details/50955900 1.安装 http://pandoc ...

  5. Class类动态加载类的用法

    编译时刻加载类出现的问题:一个功能有错,所有功能都用不了 动态加载类:

  6. [luogu3379]最近公共祖先(树上倍增求LCA)

    题意:求最近公共祖先. 解题关键:三种方法,1.st表 2.倍增法 3.tarjan 此次使用倍增模板(最好采用第一种,第二种纯粹是习惯) #include<cstdio> #includ ...

  7. HDU 6397(2018多校第8场1001) Character Encoding 容斥

    听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...

  8. 深入浅出Javascript事件循环机制

    一.JS单线程.异步.同步概念 众所周知,JS是单线程(如果一个线程删DOM,一个线程增DOM,浏览器傻逼了-所以只能单着了),虽然有webworker酱紫的多线程出现,但也是在主线程的控制下.web ...

  9. C++面向对象类的实例题目四

    题目描述: 以面向对象的概念设计一个类,此类包含3个私有数据:unlead.lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/升,有铅汽油的加个是16元/升),请以构造 ...

  10. getRectSubPix函数

    转自http://blog.csdn.net/qq_18343569/article/details/47953441 getRectSubPix函数 2015-08-24 16:47 1104人阅读 ...