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 ...
随机推荐
- spark再总结
1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架. dfsSpark基于mapreduce算法实现的分布式计算,拥有HadoopM ...
- Jenkins中的Job配置里缺少“触发远程构建(例如,使用脚本)”选项的问题解决
如图所示的功能没有出现在Job配置页面,这是由于权限问题导致的,解决方法如下: 1.[系统管理]->[Configure Global Security] 2.配置如下: 3.或者你有第三方权限 ...
- mysqldump 把数据库备份到异地的服务器
原文:http://www.open-open.com/code/view/1420121471484 这个方法可以把通过mysqldump 把本地数据库备份到远端主机, 中间数据的传输通过 ssh ...
- BUPT复试专题—比较奇偶数(2010)
https://www.nowcoder.com/practice/188472f474d5421cb8218b8ad561023b?tpId=67&tqId=29636&rp=0&a ...
- 关于从 coding 拉项目的操作
介绍:coding是托管代码的仓库 sourceTree 是把代码提交到coding的界面化工具 1.通过百度 登录coding账号
- JAVASE学习笔记:第八章 经常使用类Util工具包之日期类、数字类
一.Date类 日期类 所在java.Util工具包 before(Date when) 測试此日期是否在指定日期之前. getDay() 获取星期的某一天 getDate( ...
- MySQL搭建系列之多实例
所谓多实例.就是在一台server上搭建.执行多个MySQL实例,每一个实例使用不同的服务port.通过不同的socket监听:物理上,每一个实例拥有独立的參数配置文件及数据库. 通常情况下.一台se ...
- IOS------Warning
本文转载至 http://blog.csdn.net/shijiucdy/article/details/8755667 处理警告: 1,Validate Project Settings(updat ...
- 2016/05/25 PHP mysql_insert_id() 函数 返回上一步 INSERT 操作产生的 ID
定义和用法 mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID. 如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() ...
- TC SRM 582 DIV 2
Rating又跌了,第二个题,没想好就乱开始乱写了.. 我写乱搞贪心,没过...如果总人数很多judge函数写的不好,DIV2数据很水,直接暴力就行. #include <cstring> ...