2018 ACM-ICPC亚洲区域赛(青岛)
Problem C---zoj 4060 Flippy Sequence
解题思路:要求进行两次操作,每次操作选择一个区间,问将s串变成t串中所选的两个区间构成的4元组有多少个。做法:找出s串与t串不同块的个数,然后做个简单的判断即可。
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e6+;
int T,n,cnt,answer;char s1[maxn],s2[maxn];
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d %s %s",&n,s1,s2);cnt=;
for(int i=;i<n;++i)//统计s串与t串不同块的个数
if((i==&&s1[i]!=s2[i])||(i>&&s1[i-]==s2[i-]&&s1[i]!=s2[i]))cnt++;
if(!cnt)answer=n*(n+)/;//全部相同:1+...+n
else if(cnt==)answer=*(n-);//只有一个不同块,①不同和不同进行反转,②不同和相同进行反转
else if(cnt==)answer=;//有两个不同块,三种操作,答案肯定为6
else answer=;//至少有3个不同块,无法实现2次操作,答案只能为0
printf("%d\n",answer);
}
}
return ;
}
Problem E---zoj 4062 Plants vs. Zombies
(补)解题思路:典型的最大化最小值,二分解法再加个贪心,详解看代码。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
int T,n;LL m,l,r,mid,a[maxn],d[maxn];
bool check(LL x){
///二分总防御值,对于固定的防御值x,显然花园里的每个植物都要不小于x,因此贪心地从左往右寻找每一个防御值小于x的植物,对它和它右侧的植物反复浇水。
LL step=;
for(int i=;i<n;++i)d[i]=x/a[i]+(x%a[i]?1LL:0LL);///计算每个至少需要浇水的次数
for(int i=;i<n;++i){
if(!d[i]){
if(i!=n-)step++;///如果最后一棵植物需要浇水的次数为0,说明其防御值不小于当前x,则无需计数
}else{
step+=d[i]*2LL-1LL;///累加从i-1走到i这1步+浇完第i棵植物后花费的总步数为2*d[i]-1
d[i+]-=(d[i]-1LL);///第i+1棵植物需要浇水的次数要减去(d[i]-1)
if(d[i+]<)d[i+]=0LL;///如果d[i+1]<0,说明下一棵植物的防御值早已大于x,下次只需给它浇一次水(贪心向右移动一步)即可
}
if(step>m)return false;///如果所走步数超过m,则直接返回0,找较小的答案x
}
return true;
}
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d%lld",&n,&m);
for(int i=;i<n;++i)scanf("%lld",&a[i]);
l=1LL,r=1e18;
while(l<=r){///[l,r],退出条件是l>r,即l-1==r
mid=(l+r)>>;
if(check(mid))l=mid+1LL;///还有满足条件的最小值,继续最大化
else r=mid-1LL;///不满足条件,往左找
///cout<<l<<' '<<r<<endl;
}
printf("%lld\n",l-);///l-1相当于r,因为l会不断被最大化,直到超过r,则可以取l-1或者r就是最大化最小值答案
}
}
return ;
}
Problem J---zoj 4067 Books
解题思路:没有理解好题意,因此赛场上丧心病狂调了2小时的bug,罚时巨多QWQ,其实就是个简单的贪心=_=。题意:DreamGrid带的钱会在1~n本书中从前往后进行挑选,如果当前剩余的钱不小于第i本书的价格,那么他就一定会买这本书,并且用剩余的钱减去第i本书的价格,直到买完m本书,否则就跳过不买第i本书籍。首先要明确的一点:从其往后有序挑选!!!分三种情况:①当m==n时,显然为"Richman";②当m<cnt_0时,此时可以买比m多的书籍,显然为"Impossible";③当m>cnt_0时,首先肯定会挑选cnt_0个价格为0的书籍,然后从前往后在价格不为0的书籍里面贪心挑选(m-cnt_0)本书籍,再加上后面不为0的最小价格-1即为DreamGrid可带的最多零钱。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL ans;//注意用long long
const int inf=0x3f3f3f3f;
const int maxn=1e5+;
int T,n,m,cnt_0,pos,mina,s[maxn];
int main(){
while(cin>>T){
while(T--){
cin>>n>>m;cnt_0=;
for(int i=;i<n;++i)cin>>s[i],cnt_0+=s[i]?:;//统计0的个数
if(m==n)puts("Richman");
else if(cnt_0>m)puts("Impossible");//如果0的个数大于m,肯定可以买更多的书籍,显然此时为不可能
else{
m-=cnt_0,mina=inf,pos=,ans=;//m为剩下要挑选的本数
while(m)s[pos]?ans+=s[pos++],m--:pos++;//贪心选择价格不为0的m本,然后在后面选择一本最小的价格(不为0)-1加上来即为最优答案
for(int i=pos;i<n;++i)//从连续选择pos个不为0的数后,再从后面选择不为0的最小价格
if(s[i])mina=min(mina,s[i]);
cout<<(ans+=mina-)<<endl;
}
}
}
return ;
}
Problem M---zoj 4070 Function and Function
解题思路:签道题,注意:输入的x为0时要单独考虑。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int T,x,k,s[]={,,,,,,,,,};
int g(int y){
int ans=;
while(y){ans+=s[y%];y/=;}
return ans;
}
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d%d",&x,&k);
if(!x)x=k&?:;//x为0要单独考虑
else{
for(int i=;i<=k&&x;++i){
x=g(x);
if(!x){x=(k-i)&?:;break;}
}
}
printf("%d\n",x);
}
}
return ;
}
2018 ACM-ICPC亚洲区域赛(青岛)的更多相关文章
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- Known Notation括号匹配类问题(2014年ACM/ICPC 亚洲区域赛牡丹江)
题意: 给你数字或 * 的串,你可以交换一个*和数字.在最前面添1.在一个地方插入*,问你使串满足入栈出栈的(RNP)运算法则. 思路: 引用:https://blog.csdn.net/u01158 ...
- Digit sum (第 44 届 ACM/ICPC 亚洲区域赛(上海)网络赛)进制预处理水题
131072K A digit sum S_b(n)Sb(n) is a sum of the base-bb digits of nn. Such as S_{10}(233) = 2 + 3 ...
- 第42届亚洲区域赛青岛站(2017icpc青岛)经验总结以及一些感想
上一次写这种东西还是天梯赛,当时打完心里也是挺激动的,然后我们队也没有去参加省赛,但是过了一段时间我还是从那里面恢复了出来.因为我当时确实还是很菜的,当时连个暴力都不会,看着自己仅过的那些百度的题目确 ...
- 2014ACM/ICPC亚洲区域赛牡丹江站汇总
球队内线我也总水平,这所学校得到了前所未有的8地方,因为只有两个少年队.因此,我们13并且可以被分配到的地方,因为13和非常大的数目.据领队谁oj在之上a谁去让更多的冠军.我和tyh,sxk,doub ...
- 2018 ACM-ICPC 亚洲区域赛青岛现场赛 —— Problem F. Tournament
题面:http://acm.zju.edu.cn/contest-materials/qd2018/qd2018_problems.pdf 题意: n个骑士决斗K轮 要求是每个骑士只能跟另外一个骑士决 ...
- 【2018 ICPC亚洲区域赛南京站 A】Adrien and Austin(博弈)
题意: 有一排n个石子(注意n可以为0),每次可以取1~K个连续的石子,Adrien先手,Austin后手,若谁不能取则谁输. 思路: (1) n为0时的情况进行特判,后手必胜. (2) 当k=1时, ...
- 【2018 ICPC亚洲区域赛徐州站 A】Rikka with Minimum Spanning Trees(求最小生成树个数与总权值的乘积)
Hello everyone! I am your old friend Rikka. Welcome to Xuzhou. This is the first problem, which is a ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结
不知道怎样说起-- 感觉还没那个比赛的感觉呢?如今就结束了. 9号.10号的时候学校还评比国奖.励志奖啥的,由于要来比赛,所以那些事情队友的国奖不能答辩.自己的励志奖班里乱搞要投票,自己又不在,真是无 ...
随机推荐
- POJ 1737 Connected Graph(高精度+DP递推)
题面 \(solution:\) 首先做个推销:带负数的压位高精度(加减乘+读写) 然后:由 \(N\) 个节点组成的无向图的总数为: \(2^{N*(N-1)/2}\) (也就是说这个图总共有 \( ...
- mongodb的安装、配置、常见问题
一.MongoDB下载 mongodb可以在官网找到下载链接,找到合适的版本进行下载.下载地址->https://www.mongodb.com/download-center?jmp=nav# ...
- JSP 用poi 读取Excel
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- ajax异步加载问题
使用ajax异步加载数据,在之后需要用到这个数据时,应该将之后的js一并写入ajax函数中,否则后面的js不能找到动态拼接的dom节点. 或者将其封装成方法,在ajax动态加载数据的最后调用该方法.
- 解决ubuntu10.04不能上网
1:命令行输入:lspci查看驱动,最后几行如果有ethernet controller:atheros communications ar8151 v1.0*的话,就说明驱动没有安装好, 2:下载地 ...
- (C)非局部跳转语句(setjmp和longjmp)
1. 特点 非goto语句在函数内实施跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一语句. 头文件包含#include Void longjmp(jmp_buf env,int val ...
- CollapsingToolbarLayout 收缩显示tilte
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id. ...
- hdu2063 二分图(基础题)
这个题目适合刚刚接触二分图的同学做哦: 给一个题目链接 点击打开链接. 题目大意,有K个男女匹配方式, 输入数据的第一行是三个整数K , M , N,分别表示可能的组合数目,女生的人数,男生的人数.0 ...
- 【HDU 4722】 Good Numbers
[题目链接] 点击打开链接 [算法] f[i][j]表示第i位,数位和对10取模余j的数的个数 状态转移,计算答案都比较简单,笔者不再赘述 [代码] #include<bits/stdc++.h ...