第15届台州学院校赛题解

Red学编程

注意判断 ac个数 等于零的情况不要re

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
   
    int n;
    while(~scanf("%d",&n))
    {
   
        int sum=0,cnt=0;
        for(int i=1;i<=n;i++)
        {
   
            int x;char op[4];
            scanf("%d %s",&x,op);
            if(op[0]=='A') sum+=x,cnt++;
        }
        if(cnt==0) puts("0 0");
        else printf("%d %d\n",sum,sum/cnt);
    }
}

##Red的长跑

只能在早上跑和晚上跑的,直接就减掉
统计以及早上和晚上都能跑的可不可以平均分摊到剩下要跑的天数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
   
    int n,a,b,cnt=0;
    scanf("%d %d %d",&n,&a,&b);
    for(int i=1;i<=n;i++)
    {
   
        int f[3];
        scanf("%d %d",&f[1],&f[2]);
        if(f[1]==1&&f[2]==0) a=max(a-1,0);
        if(f[1]==0&&f[2]==1) b=max(b-1,0);
        if(f[1]==1&&f[2]==1) cnt++;
    }
    if(a+b<=cnt) puts("Yes");
    else puts("No");
}

Red去购物

贪心 剩下的钱直接先取最大的纸币
dp 背包模型

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
   
    int a,b,c,d,e,f,x;
    while(~scanf("%d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&x))
    {
   
        int sum=a+b*5+c*10+d*20+e*50+f*100;
        if(sum<x) puts("oh no!");
        else
        {
   
            int v[6]={
   1,5,10,20,50,100};
            sum-=x;
            int ans=0;
            for(int i=5;i>=0;i--)
            {
   
                ans+=sum/v[i];
                sum-=(sum/v[i])*v[i];
            }
            printf("%d\n",ans);
        }
    }
}

Red的挖洞

bfs 直接将所有洞放入队列里,将地图上的每个点更新成与他最近的洞的编号,由于入队时满足小的编号在前面,所以题目要求 **(如果有多个出口的“曼哈顿距离”相同,选择出口编号最小的)**就可以满足
最后暴力更新x,y即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
struct node{
   
    int x,y;
};
queue<node>q;
int dx[4]={
   1,0,-1,0};
int dy[4]={
   0,-1,0,1};
int mp[1005][1005];
bool check(int x,int y)
{
   
    if(x<0||x>1000) return 0;
    if(y<0||y>1000) return 0;
    if(mp[x][y]) return 0;
    return 1;
}
void bfs()
{
   
    while(q.size())
    {
   
        int x=q.front().x,y=q.front().y;q.pop();
        for(int i=0;i<4;i++)
        {
   
            int tx=x+dx[i],ty=y+dy[i];
            if(check(tx,ty))
            {
   
                mp[tx][ty]=mp[x][y];
                q.push({
   tx,ty});
            }
        }
    }
}
int main()
{
   
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
   
        int x,y;
        scanf("%d %d",&x
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值