May Challenge 2017
分析:水题,设置优先级,判断如果后面小于前面就输出no
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
using namespace std;
const int maxn=+;
string s;
int T;
int judge(char s){
if(s=='C')
return ;
else if(s=='E')
return ;
else
return ;
}
int main()
{
cin>>T;
while(T--){
cin>>s;
int flag=;
int len=s.length();
for(int i=;i<len-;i++){
if(judge(s[i])>judge(s[i+])){
flag=; break;
}
}
if(flag) cout<<"no"<<endl;
else cout<<"yes"<<endl;
}
}
分析:简单DP,看上一个状态和当前状态的关系,如果先修课程数相同,则加1,否则取上一门课程加1和当前课程所需先修的最小值
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
using namespace std;
const int maxn=+;
int T;
int a[maxn];
int dp[maxn];
int main()
{
cin>>T;
while(T--)
{
int n;
cin>>n;
a[]=;
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,,sizeof(dp));
dp[]=;
for(int i=;i<=n;i++){
if(a[i]==a[i-])
dp[i]=dp[i-]+;
else{
dp[i]=min((i-a[i]),dp[i-]+);
}
}
cout<<dp[n]<<endl;
}
return ;
}
Median of adjacent maximum numbers
分析:水题,从大到小排,小的排在奇数位,大的排在偶数位即可
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "algorithm"
using namespace std;
const int maxn=*+;
int T,n;
int a[maxn];
int main()
{
cin>>T;
while(T--){
cin>>n;
for(int i=;i<=*n;i++)
cin>>a[i];
sort(a+,a+*n+);
int c[maxn];
c[]=;
for(int i=;i<=n;i++)
c[*i-]=a[i];
for(int i=n+;i<=*n;i++)
c[*(i-n)]=a[i];
int b[maxn];
b[]=;
for(int i=;i<=n;i++){
b[i]=max(c[*i],c[*i-]);
}
cout<<b[n/+]<<endl;
for(int i=;i<=*n;i++)
cout<<c[i]<<" ";
cout<<endl;
}
return ;
}
分析:很有意思的一道题,首先预处理一下每个位置往前的k个位置的有多少1,然后我们用线段树维护区间最大值即可,坑点比较多,一个是k>=n时候,还有一个是下标问题,容易RE
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "cmath"
#include "vector"
using namespace std;
const int maxn=+;
string t;
int n,k,p;
int dp[maxn];
int a[maxn];
int h[maxn];
void init(string zz){
if(zz[]=='')
dp[]=;
for(int i=;i<k;i++){
if(zz[i]=='')
dp[i]=dp[i-]+;
else
dp[i]=dp[i-];
}
int len=zz.length();
int pos=;
for(int i=k;i<len;i++){
if(zz[pos]==''&&zz[i]=='')
dp[i]=dp[i-]+;
else if(zz[pos]==zz[i])
dp[i]=dp[i-];
else
dp[i]=dp[i-]-;
pos++;
}
}
struct node
{
int left,right,min,max;
}c[*];
void buildtree(int l,int r,int root)
{
c[root].left=l;
c[root].right=r;
if(l==r)
{
c[root].min=c[root].max=a[l];
return ;
}
int mid=(l+r)/;
buildtree(l,mid,root*);
buildtree(mid+,r,root*+);
c[root].min=min(c[root*].min,c[root*+].min);
c[root].max=max(c[root*].max,c[root*+].max);
}
void findtree(int l,int r,int root,int &min1,int &max1)
{
if(c[root].left==l&&c[root].right==r)
{
min1=c[root].min;
max1=c[root].max;
return ;
}
int mid=(c[root].left+c[root].right)/;
if(mid<l)
findtree(l,r,root*+,min1,max1);
else if(mid>=r)
findtree(l,r,root*,min1,max1);
else
{
int min2,max2;
findtree(l,mid,root*,min1,max1);
findtree(mid+,r,root*+,min2,max2);
min1=min(min1,min2);
max1=max(max1,max2);
}
}
int main()
{
scanf("%d%d%d",&n,&k,&p);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
t+=(x+'');
}
int len=t.length();
string s=t+t;
memset(dp,,sizeof(dp));
init(s);
for(int i=*len-;i>=;i--){
a[*len-i]=dp[i];
}
buildtree(,*len,);
char r[maxn];
scanf("%s",r);
int min1,max1;
int cnt=;
for(int i=;i<p;i++){
if(r[i]=='!'){
cnt=(cnt+)%len;
}
else{
if(k>=n){
printf("%d\n",dp[*len-]);
continue;
}
if(!cnt)
findtree(cnt+,cnt+n-k+,,min1,max1);
else
findtree(cnt,cnt+n-k,,min1,max1);
printf("%d\n",max1);
}
}
return ;
}
分析:直接暴力会T,用map来统计mp[a1]表示a1能有多少个组合,然后把相同的情况合并一下递推即可
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "cmath"
#include "map"
using namespace std;
map<long long,long long>mp;
map<long long,long long>::reverse_iterator it;
int main()
{
int n;
long long k;
cin>>n>>k;
for(int i=;i<=n;i++){
long long p;
cin>>p;
if(p>k) continue;
long long h=k/p;
for(it=mp.rbegin();it!=mp.rend();it++){
long long m=it->first;
if(h>=m){
mp[p*m]=mp[p*m]+it->second;
}
}
mp[p]=mp[p]+;
}
long long ans=;
for(it=mp.rbegin();it!=mp.rend();it++)
ans+=it->second;
cout<<ans<<endl;
}
May Challenge 2017的更多相关文章
- 【AtCoder】Mujin Programming Challenge 2017
Mujin Programming Challenge 2017 A - Robot Racing 如果每个数都是一个一个间隔开的,那么答案是\(n!\) 考虑把一个数挪到1,第二个数挪到3,以此类推 ...
- CodeChef June Challenge 2017
好气啊,本来以为比赛时间还有很多,结果回家养病两天回到学校怎么比赛就结束了(雾),大约是小高考弄错了时间? 挑3道有意思的写写题解吧. Cloning 题目大意:给一个序列,每次询问两个等长区间,问区 ...
- [codechef July Challenge 2017] Calculator
CALC: 计算器题目描述大厨有一个计算器,计算器上有两个屏幕和两个按钮.初始时每个屏幕上显示的都是 0.每按一次第一个按钮,就会让第一个屏幕上显示的数字加 1,同时消耗 1 单位的能量.每按一次第二 ...
- [codechef July Challenge 2017] Chef and Sign Sequences
CHEFSIGN: 大厨与符号序列题目描述大厨昨天捡到了一个奇怪的字符串 s,这是一个仅包含‘<’.‘=’和‘>’三种比较符号的字符串.记字符串长度为 N,大厨想要在字符串的开头.结尾,和 ...
- [codechef July Challenge 2017] IPC Trainers
IPCTRAIN: 训练营教练题目描述本次印度编程训练营(Indian Programming Camp,IPC)共请到了 N 名教练.训练营的日程安排有 M 天,每天最多上一节课.第 i 名教练在第 ...
- [codechef July Challenge 2017] Pishty and tree
PSHTTR: Pishty 和城堡题目描述Pishty 是生活在胡斯特市的一个小男孩.胡斯特是胡克兰境内的一个古城,以其中世纪风格的古堡和非常聪明的熊闻名全国.胡斯特的镇城之宝是就是这么一座古堡,历 ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef and Hamming Distance of arrays
https://www.codechef.com/DEC17/problems/CHEFHAM #include<cstdio> #include<cstring> #incl ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Total Diamonds
https://www.codechef.com/DEC17/problems/VK18 #include<cstdio> #include<iostream> #includ ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Penalty Shoot-out
https://www.codechef.com/DEC17/problems/CPLAY #include<cstdio> #include<algorithm> using ...
随机推荐
- ffmpeg 时间戳
转http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的时间戳pts和dts.单位好像是us. 问 : 时间戳pts和dt ...
- 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的
0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...
- 使用NSOperationQueue简化多线程开发
多线程开发是一件需要特别精心的事情,即使是对有多年开发经验的工程师来说. 为了能让初级开发工程师也能使用多线程,同时还要简化复杂性.各种编程工具提供了各自的办法.对于iOS来说,建议在尽可能的情况下避 ...
- 边看chromium的代码,边想骂人...
这一年一直在看chromium for android的代码,边看边想骂,谷歌这帮人..一开始搞了个牛逼的架构,在安卓4.4上把以前android webkit团队的简单版替换掉了,结果发现性能大不如 ...
- 天下文章一大抄 之 修改excel 创建时间
Sub ChangeDate()ThisWorkbook.BuiltinDocumentProperties("Creation Date") = #2 28 2016 13:25 ...
- [转]Go基础之锁的初识
当我们的程序就一个线程的时候是不需要用到锁的,但是通常我们实际的代码不会是单个线程的,所有这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 当我们多个线程在读相同的数据的时候则是需要加锁 ...
- MapReduce编程实战之“调试”和"调优"
本篇内容 在上一篇的"初识"环节,我们已经在本地和Hadoop集群中,成功的执行了几个MapReduce程序,对MapReduce编程,已经有了最初的理解. 在本篇文章中,我们对M ...
- MySQL的字符编码体系(一)——数据存储编码
安装MySQL好多次了,每次都会纠结于数据库的字符编码配置,所以我决定这一次彻底把它理清. MySQL的字符编码结构比較细,它慷慨向分为两个部分:数据存储编码和传输数据编码.本篇讨论数据存储编码部分, ...
- 锤子Smartisan T1手机官方4.4.2系统内核版本号信息
从锤子smartisan T1手机官方系统EGL中获取内核版本号信息(由cofface提供): I/Adreno-EGL( 816): <qeglDrvAPI_eglInitialize:41 ...
- iphone 消息推送 实现
IPhone 消息推送实现 参考 资料 http://blog.csdn.net/victormokai/article/details/39501277 对生成pem 的补充 拿到mac 上生成导出 ...