• CSP2019 开始的失败


    初赛篇

    初赛没什么好说的,随随便便就过了

    复赛篇

    考试前

    考试前一直在划水,没有认真复习,现在看来结果也是自己应得的。

    考试中

    t1
    这是标准的水题,一次AC
    民间数据成绩:100
    t21
    t22
    t23
    看到这题直接想用队列做,可是最后测第二个样例发现错了
    就赶快开了断点
    最后发现是我理解题目出问题了,我以为优惠券如果用不了就会被丢掉
    然后赶紧改过来,但最后一个样例运行了3秒,因为时间不够,TLE还是在所难免。
    我的程序:

    #include<iostream>
    #include<fstream>
    #include<cstdio>
    using namespace std;
    int record[100005][4],sum,p;
    int ticket[100005],price[100005];
    int n;
    int main()
    {
    	scanf("%d",&n);
    	for(register int i=1;i<=n;++i) scanf("%d%d%d",&record[i][1],&record[i][2],&record[i][3]);
    	for(register int i=1;i<=n;++i)
    	{
    		if(record[i][1]==0)
    		{
    			++p;
    			ticket[p]=record[i][3];
    			price[p]=record[i][2];
    			sum+=record[i][2];
    		}
    		else
    		{
    			bool findout=false;
    			for(register int j=1;j<=p;++j)
    			{
    				if(ticket[j]==-1) continue;
    				if(record[i][3]-ticket[j]<=45&&record[i][2]<=price[j])
    				{
    					findout=true;
    					ticket[j]=-1;
    					price[j]=-1;
    					break;
    				}
    			}
    			if(!findout) sum+=record[i][2];
    		}
    	}
    	printf("%d",sum);
    }
    

    民间数据:50 50
    我炸了
    附luogu大佬@邓布利多6的代码:

    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int N = 100005;
    typedef long long LL;
    LL n, x, y, z, head, tail, ans;
    //定义队列和头尾指针
    struct ticket{
        LL price,tim;
    }tic[N];
    void add_ticket(LL pri, LL t)
    {
        tic[++tail] = (ticket){pri, t};
        //尾指针++,加一张票
        ans += pri;
    }
    void use_ticket(LL pri, LL t)
    {
        for(LL i = head; i <= tail; i++)//查有效票
        {
            if(tic[i].price >= pri && t - tic[i].tim <= 45)
            {
                tic[i].price = -1;
                return;
            }   
            if(t - tic[i].tim > 45) head++;//若时间过了,则头指针++,舍弃这张票
        }
        ans += pri;
    }
    int main()
    {
        //freopen("transfer.in", "r", stdin);
        //freopen("transfer.out", "w", stdout);
        scanf("%lld", &n);
        for(LL i = 1; i <= n; i++)
        {
            scanf("%lld%lld%lld", &x, &y, &z);
            if (x == 1) use_ticket(y, z);
                else add_ticket(y, z);
        }
        cout << ans;
        return 0;
    }
    

    t31
    t32
    这道题明显比第4题难,是标准的迷惑题
    于是我先跳过了这题去做下一题
    做完最后一题之后已经5:30
    我犯了一个巨大的错误
    就是
    我以为考到6:30(其实是考到6:00)
    我开始写深搜想骗一点分,写到一半,突然监考老师喊了一句:“距离考试结束还有5分钟”
    完了,慌了
    我马上打了混样例的2行代码和文件读写就准备交了
    可是
    我没有意识到,我本来可以骗到10分的!
    请看原题:
    t33
    因为T=1,就说明在第一天就要把所有的纪念品卖出
    就是说只用输出原输入的m就能骗到分。
    我因为时间赶,连这一点都没有想到,白白丢了宝贵的10分!!!
    本蒟蒻的代码:

    #include<iostream>
    #include<fstream>
    using namespace std;
    int price[105][105],sou[105];
    int t,n,m,ans=-1;
    int main()
    {
    	cin>>t>>n>>m;
    	for(register int i=1;i<=t;++i)
    	{
    		for(register int j=1;j<=n;++j)
    		{
    			scanf("%d",&price[i][j]);
    		}
    	}
    	if(t==3) cout<<217;
    	if(t==6) cout<<305;
    	else cout<<m+12;
    }
    

    民间数据:0 0
    我炸了*2
    附luogu大佬@邓布利多6的代码:

    #include <iostream>
    #include <memory.h>
    using namespace std;
    const int N = 101;
    const int M = 10001;
    int n, m, t, price[N][N], f[M];
    int main()
    {
        cin >> t >> n >> m;
        for(int i = 1; i <= t; i++)
            for(int j = 1; j <= n; j++)
                cin >> price[j][i];
              //读入每种商品每天的价格
        for(int k = 1; k < t; k++)
        {
            memset(f, 0, sizeof f);//每轮开始前都要制零
            for(int i = 1; i <= n; i++)
                for(int j = price[i][k]; j <= m; j++)//完全背包,正着循环
                    f[j] = max(f[j], f[j - price[i][k]] + price[i][k + 1] - price[i][k]);
    
            m += f[m];//加上盈利的钱,进入下一轮买卖
        }
        cout << m;
        return 0;
    }
    

    t41
    t42
    t43
    t44
    这道题一开始还以为是递推
    推出“规律”时还把我开心了一会
    结果发现我是错的
    然后用了模拟……
    万(wan)能(e)的模拟!
    做出来时还小骄傲了一会,以为自己不用DP还很NB
    结果!结果!!结果!!!
    莫名RE!!!!
    我 的 代 码(555):

    #include<iostream>
    #include<fstream>
    #include<cstdio>
    using namespace std;
    bool plat[1005][1005];
    int n,m,q,links,people[3][1005];
    int main()
    {
    	scanf("%d%d%d",&n,&m,&q);
    	for(register int i=1;i<=m;++i)
    	{
    		int x,y;
    		scanf("%d%d",&x,&y);
    		plat[x][y]=true;
    		plat[y][x]=true;
    	}
    	for(register int i=1;i<=q;++i)
    	{
    		int a,L,p1=0,p2=0;
    		scanf("%d%d",&a,&L);
    		++p1;
    		people[1][p1]=a;
    		for(register int j=L-1;j>=0;--j)
    		{
    			for(register int q=1;q<=p1;++q)
    			{
    				for(register int z=1;z<=n;++z)
    				{
    					if(plat[people[1][q]][z])
    					{
    						++p2;
    						people[2][p2]=z;
    					}
    				}
    				
    			}
    			for(register int z=1;z<=p2;++z)
    			{
    				people[1][z]=people[2][z];
    				people[2][z]=0;
    			}
    			p1=p2;
    			p2=0;
    		}
    		bool findout=false;
    		for(register int j=1;j<=p1;++j)
    		{
    			if(people[1][j]==1&&!findout)
    			{
    				printf("Yes
    ");
    				findout=true;
    			}
    			people[1][j]=0;
    		}
    		if(!findout) printf("No
    ");
    		p1=0;
    		p2=0;
    	}
    }
    

    民间数据:30 25
    我炸了*3
    附luogu大佬@赵海鲲的代码:

    #include <bits/stdc++.h>
    using namespace std;
    template<typename T>inline void read(T &FF){
        T RR=1;FF=0;char CH=getchar();
        for(;!isdigit(CH);CH=getchar())if(CH=='-')RR=-1;
        for(;isdigit(CH);CH=getchar())FF=(FF<<1)+(FF<<3)+(CH^48);
        FF*=RR;
    }
    template<typename T>void write(T x){
        if(x<0)putchar('-'),x*=-1;
        if(x>9)write(x/10);
        putchar(x%10+48);
    }
    vector<int>v[100010];
    int ji[100010],ou[100010];
    void bfw(){//我有一个好朋友叫bfw,所以我写bfs时,喜欢把函数名起为bfw
        memset(ji,0x3f,sizeof(ji));//奇数最短路径
        memset(ou,0x3f,sizeof(ou));//偶数最短路径
        queue<pair<int,int> >q;
        for(int i=0;i<v[1].size();i++){
            ji[v[1][i]]=1;
            q.push(make_pair(v[1][i],1));
        }
        while(q.size()){
            int x=q.front().first,y=q.front().second;
            for(int i=0;i<v[x].size();i++){
                if(y%2==1){//奇数+1=偶数
                    if(y+1<ou[v[x][i]]){
                        ou[v[x][i]]=y+1;//更新答案
                        q.push(make_pair(v[x][i],y+1));
                    }
                }else{//偶数+1=奇数
                    if(y+1<ji[v[x][i]]){
                        ji[v[x][i]]=y+1;//更新答案
                        q.push(make_pair(v[x][i],y+1));
                    }
                }
            }
            q.pop();
        }
    }
    int main(){
        int n,m,q;
        read(n);read(m);read(q);
        for(int i=1;i<=m;i++){
            int x,y;
            read(x);read(y);//无向边
            v[x].push_back(y);//连边
            v[y].push_back(x);//连边
        }
        bfw();//跑最短路
        while(q--){
            int x,y;
            read(x);read(y);
            if(y%2==0){
                if(ou[x]>y)puts("No");//如果大于就不可能了
                else puts("Yes");
            }else{
                if(ji[x]>y)puts("No");//如果大于就不可能了
                else puts("Yes");
            }
        }
        return 0;
    }
    

    考试后

    我太难了
    我真的太难了!
    因为自己的自负、不努力、不认真
    终于落得了这样的结果
    现在也不打算去想自己到底是二等还是三等亦或是根本没有奖
    可恶
    真的是白学了一年的信息学
    如果蓝桥和NHOI都不能考好
    我的初中OI生涯也要走到尽头了。
    就此搁笔。

  • 相关阅读:
    【HeadFirst设计模式学习笔记】10 组合模式
    【HeadFirst 设计模式学习笔记】12 代理模式
    【HeadFirst 设计模式学习笔记】15 享元模式拾零
    【HeadFirst 设计模式学习笔记】16 建筑者(Builder)模式拾零
    【HeadFirst 设计模式学习笔记】11 状态模式
    搜索引擎设计实用教程(1)以百度为例 之一:查询处理以及分词技术
    最容易写错的100个字
    看完这个我流泪了,人生有太多的误会和无奈……
    哈佛成功金言
    上海的朋友注意了,周六气温可能骤降到1℃
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/11896980.html
Copyright © 2020-2023  润新知