HRBU_20211117训练

F - Reports

题意:

假设你在一所学校上学,这所学校比较隔路,你每一次进入校门需要向门卫报备1,离开学校需要向门卫报备0(点谁我就不明说了O~O)然后需要判断你的这个报备的合理性,也就是说你不可能同时离开学校两次或者进入学校两次,因为这不符合现实,除非你翻墙了,好学生是不能瞎操作的嗷!

做法:

判断是否相邻的相同即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=4e5+10;
int main()
{
    ios::sync_with_stdio(false);
    int t,n,a[50];
    cin>>t;
    while(t--)
    {
        bool flag=true;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<n;i++)
        {
            if(a[i]==a[i+1])
            {
                flag=false;
                break;
            }
        }
        if(flag)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;

    }
    return 0;
}
/**
4 9
1:1 1 1 1
2 3
1:1 1 / 1 1 1
3 9 27
1:1 1 1
*/

B - Express Mail Taking

题意:

现在你是一位快递员,因为快递点比较先进,所以快递都是直接闪现到快递点的柜子里的。快递点一共有1~ n个柜子,其中比较特殊的是所有柜子都有锁,而你能通过第k个柜子进行柜子的解锁(不同的柜子需要重新解锁,这很重要!!!)你只能从第1个柜子的位置开始取快递,当你取完所有快递时你才能从你进来的地方也就是1号柜离开,问取完所有快递且到达终点你的最短路程是多少?

做法:

这道题深深地刺激了我,细节处理真的真的很重要!
样例解释:10 (一共10个柜子)2 (其中有两个柜子里有快递)5 (特殊柜子,也就是能解锁的柜子是5号柜子)
6 7 (两个快递的位置)
步骤:首先先到5号打开6号,取完之后再一次回到5号打开7号,7号取完之后,已经取完全部快递了,所以直接去1号。所以总路程是4+1+1+2+6=14。
大概就能理解题目是怎么操作了,首先快递的取件的先后其实没啥影响,因为路程都是固定长度,唯一要处理的就是快递是否都在一侧,为什么这么说?因为当你取完最后一个快递时,是可以直接离开的,若快递都在特殊柜子k的右侧(也就是都大于k)取完之后你需要再走a[n]-1的路程;否则最后一段路就是k-1了,为啥呢?因为最后一个在左侧也就是说你可以直接先去k开柜子,开完直接拿上就直接去1就行了,少了一段返回的路程呢。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
int t,n,a[maxn],m,k;
int main()
{
    ios::sync_with_stdio(false);
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&m,&k);
        int minn=n,flag=0;
        for(int i=1; i<=m; i++)
            scanf("%d",&a[i]),minn=min(a[i],minn);
        sort(a+1,a+1+m);
        ll sum;
        sum=(k-1)*2;
        if(minn>k)
            sum+=(a[1]-k)*2;
        for(int i=2; i<=m; i++)
        {
            if(a[i]>k)
                sum+=(a[i]-k)*2;
            else
                sum+=(k-a[i])*2;

        }
        cout<<sum<<endl;
    }
    return 0;
}
/**

*/

E - CCPC Training Class

题意:

说实话这题面不想解释。。。直接根据样例猜的结果,给出一个字符串,将其重新排列,使得该字符串的border最大,border就是题目中字母的出现个数

做法:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
int t,n,a[maxn],m,k,ca=0;
int main()
{
    ios::sync_with_stdio(false);
    cin>>t;
    while(t--)
    {
        ca++;
        int num[26],ans=0;
        string s;
        memset(num,0,sizeof(num));
        cin>>s;
        for(int i=0;i<s.size();i++)
            num[s[i]-'a']++;
        for(int i=0;i<26;i++)
            ans=max(ans,num[i]);
        cout<<"Case #"<<ca<<": "<<ans<<endl;
    }
    return 0;
}
/**

*/

G - 3x3 Convolution

题意:

给定一个矩阵A(n×n)以及一个矩阵K(3×3)需要你根据题目中给定的公式去求解最后矩阵的和。
公式
在这里插入图片描述
输入的其实是K’矩阵,还得将K’转换成K矩阵
转换公式
在这里插入图片描述

做法:

直接模拟题目要求即可,输入矩阵,矩阵处理,最后得到答案,注意:scanf和cout不能混起来。。。会T

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e4+10;
int n,m,q;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int pos,sum=0;
        int _k[4][4],k[4][4];
        int n[55][55],ans[55][55]={0};
        scanf("%d",&pos);
        for(int i=1; i<=pos; i++)
            for(int j=1; j<=pos; j++)
                cin>>n[i][j];
        for(int i=1; i<=3; i++)
            for(int j=1; j<=3; j++)
            {
                cin>>_k[i][j];
                sum+=_k[i][j];
            }
        for(int i=1; i<=3; i++)
            for(int j=1; j<=3; j++)
                k[i][j]=_k[i][j]/(sum*1.0);
        for(int x=1; x<=pos; x++)
            for(int y=1; y<=pos; y++)
                for(int i=1; i<=min(pos-x+1,3); i++)
                    for(int j=1; j<=min(pos-y+1,3); j++)
                        ans[x][y]+=(n[x+i-1][y+j-1]*k[i][j]);
        for(int i=1; i<=pos; i++)
        {
            for(int j=1; j<=pos; j++)
            {
                if(j==1)
                    printf("%d",ans[i][j]);
                else
                    printf(" %d",ans[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
每日小结:

又是差一题的一天O~O,最近惰性有点重,自己在尝试着压制,这两天的课意外发现上个学期居然学了!然而上学期就这么算是最差的。。。。QAQ,但是不得不说Linux还是很有意思,就是没有图示化界面有点难受,好歹上学期还是能看个界面,这次直接界面都没了OMO这是逐步走向代码化了呀,不久就要下毕设题目了,希望自己能好好完成呀!愿明天的朝阳,能给我开心过完一天的好运!Thanks♪ ( ・ ω ・ )ノ。不差了不差了!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值