【解题报告】洛谷-蒟蒻团队邀请赛-六月月赛

时间:2022-12-17 04:05:30

前言

话说这次把最后一题想难了搞得没有一次性 A K 。。。
话说倒数第二题用 g e t s w a ,果断用了 s c a n f A 了。。。

链接

https://www.luogu.org/contest/show?tid=7310

正题

第一题 大佬买酒

https://www.luogu.org/problemnew/show/T28139

大意

给定一些固定数值的货币,现在有 N 元,在尽量用面值高的货币的情况下,每种货币会用多少张?

思路

一个裸的贪心+模拟,一些基础的运算就可以了
先依次除去大的纸币的面值,在用余数继续除,计算的结果即为纸币的张数
(当然也能暴力模拟)

代码

#include<cstdio>
using namespace std;long long n;
int main()
{
    scanf("%lld",&n);//输入
    printf("%lld\n%lld\n%lld\n%lld\n%lld\n%lld",n/100,(n%100)/50,((n%100)%50)/20,(((n%100)%50)%20)/10,((((n%100)%50)%20)%10)/5,((((n%100)%50)%20)%10)%5);//输出
}

第二题

https://www.luogu.org/problemnew/show/T29092

大意

给定一个长度为 n 的二进制数,将其转换为10进制

思路

朴素的想法是直接用一个数组,但是这样空间复杂度较高,其实可以用两个变量代替,然后边输入边做

代码

#include<cstdio>
using namespace std;char c;long long s,a=1;int n;
int main()
{
    scanf("%d\n",&n);for(int i=1;i<n;i++) a<<=1;//求出2的n次方
    while(n--) 
     {
        c=getchar();//输入
        if(c==49) s+=a;//如果是1加上去
        a>>=1;//每次往右移
     }
    printf("%lld",s);//输出
}

第三题

https://www.luogu.org/problemnew/show/T29694

大意

不想解释。。。
给定年薪和房价增长率,房价初始为200万元,求第几年可以买下这套房

思路

暴力模拟

代码

#include<cstdio>
using namespace std;double now;int n,k,s;
int main()
{
    scanf("%d%d",&n,&k);now=200;s=n;
    for(int i=1;i<=20;i++)//规定只有20年
    {
        if(s>=now) {printf("%d",i);return 0;}//我买的下啦!
        now*=1+k/100.0;//我涨房价
        s+=n;//我领年薪
    }
    puts("IMP0SSIBLE");//努力奋斗二十年都买不到。。。
}

第四题

https://www.luogu.org/problemnew/show/T30105

大意

给定两个数,比较其大小

思路

这道题的输出很诡异, Y E 5 N 0 ,这样看还能看出来,但题目里边是这样的,YE5,N0,被坑死了。。。
然后这道题数据有点大,用数组比较就行了

代码

#include<cstdio>
#include<cstring>
#define prf(x) {printf(#x);putchar(10);return 0;}//输出某字符串并换行
using namespace std;char c1[1001],c2[1001];
int main()
{
    scanf("%s%s",c1,c2);
    if(strlen(c1)>strlen(c2)) prf(YE5);
    if(strlen(c1)<strlen(c2)) prf(N0);//小学数学,谁位数多谁更大
    for(int i=0;i<strlen(c1);i++) if(c1[i]>c2[i]) prf(YE5) else if(c1[i]<c2[i]) prf(N0);//比较每一位
    prf(The Same);//若完全相等
}

第五题

https://www.luogu.org/problemnew/show/T30868

大意

在一个 n × n 的矩阵中有些格子上有一些数字,输出每个数字对应占领的格子数

思路

开一个桶,保存答案,然后直接输出

代码

#include<cstdio>
using namespace std;
int a[9],n,c;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
      {
        scanf("%d",&c);
        a[c]++;//存进桶
      }
    for(int i=1;i<9;i++) printf("%d ",a[i]);//输出
}