训练日记 2019.9.23 那个夏天

2019.9.23 星期一
又到了一天最高兴的日记时刻,这意味着今天的事情已经办完了。

今天秋分了,虽然这里不是中国,但也感觉到了初秋的凉爽,美好的早晨是从一个阴天开始的。今天还算高产。这几天连续吃多了,觉得自己挺难受的,决定这周控一天饮食,然后把正常的作息调回来。果然一人肚子饿脑子就清醒,今天开了挂一样地连AC了4道,其实是挺简单的贪心题,但是还需要动动脑子的,有些贪心题不会光用贪心算法,还要有动态规划的思想,作为练习再合适不过了。然后上课到下午,今天没吃饭的缘故,在看ccpc2019网络邀请赛被吐槽最多的钓鱼问题的时候,脑子突然一下子歇菜了,我才想起来之前在家每天早上9点起来,半天不吃饭没问题啊,下午去高中补习班的自习室学习四个小时就能回家了,但是在这里不行,不吃饭后半天脑子真的是转不动。大概只想到了用优先队列取池塘,然后一个一个看剩余时间再来波最短路,其余的,随他去吧,明天再说,今儿脑子转不动了。转不动也不能让自己闲着,自己动手重构了下线段树,有点进展,就是自己发现了原来不是我更新方法写错了,是剪枝出了问题,加上剪枝就WA,不加就TLE,说明这个地方是关键,mark√,明天排故障。

从我的语气也看出来了吧我现在真的是精疲力竭了,就等着旅行呢。都觉得我这个人没什么爱好,我其实特别喜欢旅游(奈何口袋穷),去用双脚探索城市里的每一个角落,不管是在北京城乡结合部的历险,还是从洛杉矶市中心走到麦克阿瑟公园,都是一段难忘的回忆,只不过好像自己从高中以来的大多数出门都是带着任务的,不是出去打比赛,就是去参加学习或者哪一个会的路上然后一个人过着小资生活,有时间就应该多出去看看,走走,趁着还是学生,不要等着等着就长大没机会了。

我感觉我还能学吧,再加把劲,把regional打了,我还行,来,上代码,关机,回去休息。
题目1 : POJ1323 Game Prediction (传送门)

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <math.h>
#include <cstdio>

using namespace std;
#define limit 20000 + 5
#define INF 0x3f3f3f3f
#define lch root * 2 + 1
#define rch root * 2 + 2
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define ff(a) printf("%d\n",a );
typedef long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
vector<int>v,t;//所有的数组分为两个的集合
int n,m;
int dp[limit];
int vis[limit];
int main(){
    int cnt = 0;
    while(scanf("%d%d" , &n, &m) == 2 ){
        if(!n && !m)break;
        v.clear();
        t.clear();
        memset(vis , 0 , sizeof(vis));//初始化为0
        for(int i = 0 ; i < m ; ++i){
            int a;
            scanf("%d" , &a);
            v.push_back(a);//推入
            vis[a] = 1;
        }
        int ans = 0;
        sort(v.rbegin(),v.rend());//大小排序,从大到小
        for(int i = m * n ; i >= 1; --i){
            if(!vis[i])t.push_back(i);//推入进去,这样就分为两个集合了,而且是降序
        }
        int pb = 0;
        for(int i = 0 ; i < v.size() ; ++i){
            if(v[i] > t[pb]){
                ans++;//输了就打掉
            }else{
                pb++;
            }
        }
        printf("Case %d: %d\n",++cnt,ans );
    }
    return 0;
}

题目2: HDU1789 Doing Homework Again(传送门)

#include <bits/stdc++.h>
using namespace std;
#define limit 20000 + 5
#define INF 0x3f3f3f3f
#define lch root * 2 + 1
#define rch root * 2 + 2
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define ff(a) printf("%d\n",a );
typedef long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
struct homework{
    int due, score;//确定两个参数
    homework() = default;
    homework(int dd, int ss):due(dd), score(ss){}
    bool operator<(const homework &rhs)const{
        if(score == rhs.score){
            return due < rhs.due;
        }else{
            return score > rhs.score;
        }
    }
};
vector<homework>v;
int kase, n ,a[limit],b[limit],vis[limit];
int main(){
    scanf("%d", &kase);
    while(kase--){
        scanf("%d",&n);
        memset(vis, 0 , sizeof(vis));//初始化为0
        for(int i = 1 ; i <= n ; ++i){
            scanf("%d", &a[i]);
        }
        for(int i = 1 ; i <= n ; ++i){
            scanf("%d", &b[i]);
        }
        for(int i = 1 ; i <= n ; ++i){
            v.push_back(homework(a[i],b[i]));
        }
        sort(v.begin(), v.end());//排排站
        int ans = 0;
        int day = 1;//计时器
        for(int i = 0 ; i < v.size() ; ++i,day++){
            int ddl = v[i].due, score = v[i].score;
            int flag = 1;
            for(int j = ddl; j > 0 ; --j){
                if(!vis[j]){//这一天没事儿干
                    flag = 0;
                    vis[j] = 1;
                    break;
                }//其他情况是都有事情干
            }
            if(flag){
                ans += score;
            }
        }//yes
        ff(ans);
        v.clear();
    }
    return 0;
}

题目3:HDU2037 今年暑假不AC(添加链接描述)

#include <bits/stdc++.h>
using namespace std;
#define limit 20000 + 5
#define INF 0x3f3f3f3f
#define lch root * 2 + 1
#define rch root * 2 + 2
#define lowbit(i) i&(-i)//一步两步
#define EPS 1e-6
#define ff(a) printf("%d\n",a );
typedef long long ll;
void read(int &x){
    char ch = getchar();x = 0;
    for (; ch < '0' || ch > '9'; ch = getchar());
    for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}//快读
struct prog{
    int L, R;
    prog() = default;
    prog(int ll , int rr):L(ll), R(rr){}
    bool operator<(const prog & rhs)const{
        return R < rhs.R;
    }
};
vector<prog>v;
int n;
int main(){
    while(scanf("%d" , &n) != EOF && n){
        v.clear();
        for(int i = 0 ; i < n ; ++i){
            int beg ,ed;
            scanf("%d%d" , &beg, &ed);
            v.push_back(prog(beg,ed));
        }//制作完成
        int ans = 0;
        int last = -1;//上次的截止时间
        sort(v.begin() ,v.end());//排好序
        for(int i = 0 ; i < v.size() ; ++i){
            int timeStart = v[i].L;
            if(timeStart >= last){
                ++ans;
                //printf("The time begin is at %d , time ends at %d\n", v[i].L, v[i].R);
                last = v[i].R;
            }

        }
        ff(ans);
    }
    return 0;
}
发布了69 篇原创文章 · 获赞 1 · 访问量 3058

猜你喜欢

转载自blog.csdn.net/Stagflation/article/details/101260979