• CSP2019 J组(入门级)第二轮认证题解


    2019年一等奖浙江分数线为265分,二等奖分数线为100分,三等奖分数线为70分。
    当年附中情况,wm为245,dyc为155,zxy为110,zzx为105,pz为100。
    luogu对应题目 T1 数字游戏T2 公交换乘T3 纪念品T4 加工领奖 ,可以到luogu上查看更多题解。

    T1 数字游戏 字符串

    简单字符串,然后依次检查累加即可。

    T2 公交换乘 模拟、队列

    不少同学没看到免费搭乘一次票价不超过地铁票价的公交车,导致0分。
    45分的代码

    #include<bits/stdc++.h>
    using namespace std;
    struct T{int lei,money,time;}a[100005];
    struct T1{int money,ff=0,time;}b[100005];
    int main()
    {
        freopen("transfer.in","r",stdin);
        freopen("transfer.out","w",stdout);
        int n,tot=0,left=0,sum=0;
        cin>>n;
        for(int i=0;i<n;i++)cin>>a[i].lei>>a[i].money>>a[i].time;
        for(int i=0;i<n;i++)
        {
        	if(a[i].lei==0)
        	{
        		sum+=a[i].money;
    			b[tot].money=a[i].money;
    			b[tot++].time=a[i].time+45;
    		}
    		else
    		{
    			int f=0;
    			for(int j=0;j<tot;j++)
    			{
    				if(b[j].time>=a[i].time&&b[j].money>=a[i].money&&b[j].ff==0)
    				{
    					f=1;
    					b[j].ff=1;
    					break;
    				}
    			}
    			if(f==0)sum+=a[i].money;
    		}
    	}
    	cout<<sum<<"
    ";
        return 0;
    }
    

    用一个数组来装所有的收集到的赠票。每当坐地铁的时候,就直接花钱,然后获得一张赠票,放到数组里面。每当坐公交的时候,看看数组里面有没有时间合适,价格小于现在公交票价的赠票,并且没用过的赠票,直接用时间最早的那一张就可以了。而且45分钟后就过期了,可以用一个队列记录下这张票,这个题卡常,可以直接用数组模拟队列

    T3 纪念品 背包

    这个题有点难,将 每件纪念品的价格增量 作为其价值,每件纪念品在第一天购入的价格 作为其质量, M 作为背包容量,这个问题就转化为了一个完全背包问题。恭喜陈瀚东做对了

    T4 加工领奖 广搜、最短路

    相对来说,T4是比T3简单的。求出1到各个点的奇偶最少步数 即可。不过要使用vector代替邻接数组存储。本题杨添盛获得了满分。
    若存在3->4->5->6->7->1,长度为5,那么比如重复经过点5就是7了,3->4->5->6->5->6->7->1。一条边想走几次就走几次,那么存在+2,+4,...,+2n,同奇偶。长度为6的存在吗?不确定,所以奇偶必须分开求解,最终判定条件为奇偶相同且大于等于最少步数

    大佬您太强了,还请多多指教哎
  • 相关阅读:
    js程序设计01——基本概念
    beego中orm关联查询使用解析
    使用bower管理前端依赖
    使用bee自动生成api文档
    app开发之deviceone
    使用socket.io开发简单群聊功能
    spring-boot配置热更新
    golang的xml、json解析
    golang学习之rpc实例
    golang学习之mgo操作mongodb
  • 原文地址:https://www.cnblogs.com/BobHuang/p/15359271.html
Copyright © 2020-2023  润新知