一、题目报告
比赛中第一题60分,第二、三、四题0分;比赛后全部AK。
二、赛中概况
首先,开始做的第一题直接骗分骗了60分。
第二题按样例试着写了个,考虑少了没过
第三题开始有思路,大概会写但实现时出错了
第四题开始就看不懂
三、解题报告
T1.做饭(cook)
题目大意
判断小可是否有足够时间在达达回家之前做完饭
题目解析
先求出达达到家时间距离现在时间的秒数,之后判断是否够小可做完饭
正解代码
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
long long p,q,h1,h2,m1,m2,s1,s2,sum1,sum2;
int main(){
freopen("cook.in","r",stdin);
freopen("cook.out","w",stdout);
scanf("%lld:%lld:%lld",&h1,&m1,&s1);
scanf("%lld:%lld:%lld",&h2,&m2,&s2);
cin>>p>>q;
sum1=h1*3600+m1*60+s1;
sum2=h2*3600+m2*60+s2;
if(sum2-sum1>p+q){
cout<<"Yes";
}else{
cout<<"No";
}
fclose(stdin);
fclose(stdout);
return 0;
}
T2.评价标准(criterion)
题目大意
找出变化后数组的最小评价标准
题目解析
通过两个数组变化后的对比,找出加减K后最小标准
正解代码
#include<bits/stdc++.h>
#include<cstdio>
const int m=1e6+8;
int n,k,s[m],a[m],b[m],sum1,sum2;
using namespace std;
int main(){
freopen("criterion.in","r",stdin);
freopen("criterion.out","w",stdout);
cin>>n>>k;
k=abs(k);
for(int i=1;i<=n;i++){
cin>>s[i];
a[i]=s[i];
b[i]=s[i];
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);
a[1]+=k;
sort(a+1,a+1+n);
b[n]-=k;
sort(b+1,b+1+n);
sum1=a[n]-a[1];
sum2=b[n]-b[1];
cout<<min(sum1,sum2);
fclose(stdin);
fclose(stdout);
return 0;
}
T3.小可买菜(buy)
题目大意
小可要买n个商品,今天超市每满两个商品可以用两个商品中最高价格购买当前这两件商品。小可还有K个优惠券,每两件商品可以使用一张优惠券,使用两个商品中最低价格购买当前这两件商品。
题目解析
先用优惠券买最便宜和最贵的商品,再用优惠券买次便宜和次贵的商品……
至优惠券用完为止,之后买当前最贵和次贵的商品……
正解代码
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;正解代码
long long n,k,ans,a[m];
int main(){
freopen("buy.in","r",stdin);
freopen("buy.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int l=1,r=n;
while(l<=r){
if(k>0){
ans+=a[l];
l++,r--,k--;
}else{
ans+=a[r];
r-=2;
}
}
cout<<ans;
fclose(stdin);
fclose(stdout);
return 0;
}
T4.美味佳肴(cuisine)
题目大意
达达发现含有相同大写字母的食物搭配起来吃最美味了,?表示搭配任何一个食物吃都非常美味,但?只可与你选中的一位食物搭配,求最多有多少种不同的搭配
题目解析
把?与最多的一位食物放在一起
正解代码
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int n;
long long a[208];
string s;
int main(){
freopen("cuisine.in","r",stdin);
freopen("cuisine.out","w",stdout);
cin>>n;
while(n--){
memset(a,0,sizeof a);
cin>>s;
int maxx=0;
long long ans=0;
int len=s.size();
int temp;
for(int i=0;i<len;i++){
a[s[i]]++;
if(s[i]!='?'){
if(a[s[i]]>maxx){
maxx=a[s[i]];
temp=s[i];
}
}
}
if(a['?']==0){
for(int i=65;i<=90;i++){
ans+=a[i]*(a[i]-1)/2;
}
}else{
a[temp]+=a['?'];
for(int i=65;i<=90;i++){
ans+=a[i]*(a[i]-1)/2;
}
}
cout<<ans<<"\n";
}
fclose(stdin);
fclose(stdout);
return 0;
}