【总结】普及组比赛20211019
T1 餐馆吃饭
题解:
很容易想到,最少花费一定是四道菜中价格最小的一道和三道甜品中价格最小的一道之和。
#include<bits/stdc++.h>
using namespace std;
int a[10],b[10];
int main(){
for(int i=1;i<=4;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=3;i++){
scanf("%d",&b[i]);
}
sort(a+1,a+5);
sort(b+1,b+4);
printf("%d",a[1]+b[1]);
}
总结:
AC,就是有点懒,用了数组+sort。
T2 卡片
题解:
看到数据范围,可以直接暴搜,但是有一个问题需要解决,直接用vis存储状态有可能会空超,可以用哈希,降低空间。(虽然别的同学直接开了一个亿的布尔,没爆)
#include<bits/stdc++.h>
using namespace std;
#define hash_num 135377
#define LL unsigned long long
LL n,k,ans;
LL a[101];
LL vis[1000001];
bool tvis[101];
LL hash1(LL x){
LL m=x%hash_num;
while(vis[m]!=x&&vis[m]!=0){
m++;
}
return m;
}
void dfs(LL x,LL num){
if(x==k+1){
LL t=hash1(num);
if(!vis[t]){
ans++;
vis[t]=num;
}
return ;
}
for(LL i=1;i<=n;i++){
if(!tvis[i]){
tvis[i]=true;
if(a[i]<10)dfs(x+1,num*10+a[i]);
else dfs(x+1,num*100+a[i]);
tvis[i]=false;
}
}
}
int main(){
scanf("%lld%lld",&n,&k);
for(LL i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
dfs(1,0);
printf("%lld",ans);
}
总结:
AC,这种做题思路要保持,思考全面、仔细。
T3 数数
总结:
T4 划分
总结:
作者:zswagnziye
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!