CSU 1081: 集训队分组 1082: 憧憬一下集训 1086: 超市购物 1087: 就多了两分钟

9人阅读 评论(0) 收藏 举报
分类:

1081: 集训队分组

# include <iostream>
# include <cstdio>
# include <cstring>
# include <vector>

# define N 1005

using namespace std;

vector<int> g[N];
char vis[N];

int bfs(int u)
{
    int i, cx, nx, ret;
    int Q[N], front, rear;

    Q[1] = u;

    memset(vis, 0, sizeof(vis));
    vis[u] = 1;

    front = 1;
    rear  = 2;

    ret = 0;
    while (front < rear)
    {
        cx = Q[front++];
        for (i = 0; i < g[cx].size(); ++i)
        {
            nx = g[cx][i];
            if (!vis[nx])
            {
                Q[rear++] = nx;
                vis[nx] = 1;
                ++ret;
            }
        }
    }

    return ret;
}

int main()
{
    int i, n, u, v, k, m, cnt;

    while (~scanf("%d%d%d", &n, &k, &m))
    {
        for (i = 1; i <= n; ++i) g[i].clear();
        for (i = 0; i < m; ++i)
        {
            scanf("%d%d", &u, &v);
            g[u].push_back(v);
        }
        cnt = 0;
        for(i = 1; i <= n; ++i)
        {
            if (bfs(i) >= n-k) ++cnt;
            if (cnt >= k) break;
        }
        puts(cnt>=k ? "YES":"NO");
    }

    return 0;
}
/**********************************************************************
	Problem: 1081
	User: 3901140225
	Language: C++
	Result: AC
	Time:164 ms
	Memory:2180 kb
**********************************************************************/

1082: 憧憬一下集训


#include<map>  
#include<set>  
#include<cmath>  
#include<queue>  
#include<cstdio>  
#include<string>  
#include<vector>  
#include<cstring>  
#include<iostream>  
#include<algorithm>  
#include<functional>  
  
using namespace std;  
typedef long long LL;  
typedef pair<int, int> PII;  
  
const int MX = 2e4 + 5;  
#define lson l,m,rt<<1  
#define rson m+1,r,rt<<1|1  
#define root 0,10000,1  
  
int MAX[MX << 2], col[MX << 2];  
  
struct Que {  
    int L, R, top, d;  
    bool operator<(const Que &b)const {  
        if(top == b.top) return d > b.d;  
        return top < b.top;  
    }  
    Que(int _top = 0, int _L = 0, int _R = 0, int _d = 0) {  
        L = _L; R = _R; top = _top; d = _d;  
    }  
} Q[MX];  
  
void push_up(int rt) {  
    MAX[rt] = max(MAX[rt << 1], MAX[rt << 1 | 1]);  
}  
  
void push_down(int rt) {  
    if(col[rt]) {  
        col[rt << 1] += col[rt];  
        col[rt << 1 | 1] += col[rt];  
        MAX[rt << 1] += col[rt];  
        MAX[rt << 1 | 1] += col[rt];  
        col[rt] = 0;  
    }  
}  
  
void update(int L, int R, int d, int l, int r, int rt) {  
    if(L <= l && r <= R) {  
        MAX[rt] += d;  
        col[rt] += d;  
        return;  
    }  
  
    int m = (l + r) >> 1;  
    push_down(rt);  
    if(L <= m) update(L, R, d, lson);  
    if(R > m) update(L, R, d, rson);  
    push_up(rt);  
}  
  
int main() {  
    int n;  
    //freopen("input.txt", "r", stdin);  
    while(~scanf("%d", &n)) {  
        memset(MAX, 0, sizeof(MAX));  
        memset(col, 0, sizeof(col));  
  
        for(int i = 1; i <= n; i++) {  
            int x1, x2, y1, y2;  
            scanf("%d%d%d%d", &x1, &x2, &y1, &y2);  
            Q[i] = Que(y1, x1, x2, 1);  
            Q[i + n] = Que(y2, x1, x2, -1);  
        }  
        sort(Q + 1, Q + 1 + 2 * n);  
  
        int ans = 0;  
        for(int i = 1; i <= 2 * n; i++) {  
            update(Q[i].L, Q[i].R, Q[i].d, root);  
            ans = max(ans, MAX[1]);  
        }  
        printf("%d\n", ans);  
    }  
    return 0;  
}  
/**********************************************************************
	Problem: 1082
	User: 3901140225
	Language: C++
	Result: AC
	Time:812 ms
	Memory:2960 kb
**********************************************************************/

1086: 超市购物


#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAXN=35;
const int MAXM=2005;
int weight[MAXN][MAXN],value[MAXN][MAXN];
int dp[MAXM];
int main()
{
        int k,m;
        int c=1;
        while(scanf("%d%d",&k,&m)>0)
        {
                memset(dp,0,sizeof(dp));
                memset(weight,0,sizeof(weight));
                memset(value,0,sizeof(value));
                for(int i=1;i<=k;i++)
                {
                        int n;
                        scanf("%d",&n);
                        weight[i][0]=n;
                        for(int j=1;j<=n;j++)
                                scanf("%d%d",&weight[i][j],&value[i][j]);
                }
                for(int i=1;i<=k;i++)
                        for(int j=m;j>=0;j--)
                                for(int p=1;p<=weight[i][0];p++)
                                        if(weight[i][p]<=j)
                                                dp[j]=max(dp[j],dp[j-weight[i][p]]+value[i][p]);
                printf("Case %d: %d\n\n",c++,dp[m]);
        }
        return 0;
}

/**********************************************************************
	Problem: 1086
	User: 3901140225
	Language: C++
	Result: AC
	Time:64 ms
	Memory:1136 kb
**********************************************************************/

1087: 就多了两分钟

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int h1,m1,h2,m2;
    int kase=0;
    //freopen("data/1087.txt","r",stdin);
    while(cin>>h1>>m1>>h2>>m2)
    {
        printf("Day %d: ",++kase);
        if(h1>h2||h1==h2&&m1>m2)
        {
            cout<<"Joking"<<endl;
            continue;
        }
        int t=(h2-h1)*60+m2-m1;
        int ans=t/30;
        int last=t%30;
        if(last)
            last=30-t%30;
        if(last!=0&&last!=30)
            ans++;

        cout<<ans<<" "<<last<<endl;
    }
    return 0;
}

/**********************************************************************
	Problem: 1087
	User: 3901140225
	Language: C++
	Result: AC
	Time:80 ms
	Memory:2024 kb
**********************************************************************/


查看评论

线段树 csu1082 憧憬一下集训

最简单的扫描线思想。。 如果把空调温度当作横坐标,音响声音大小当作纵坐标,那么题意可以转换成,给你许多个矩形,问一个点最多被覆盖多少次~ 那么按照纵坐标大小排序,从下向上扫描,用线段树维护...
  • qwb492859377
  • qwb492859377
  • 2015-08-10 21:23:07
  • 726

CSU 1086 超市购物

1086: 超市购物 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 361  Solved: 151 [Submit][Status][Web Bo...
  • lizhaowei213
  • lizhaowei213
  • 2016-04-16 01:02:11
  • 384

CSU 1082: 憧憬一下集训 (线段树 扫描线)

连接 :  http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1082 题目可以将每个人的两种适应度转化为一个在坐标系里的矩形。假设音量为x轴...
  • u013923947
  • u013923947
  • 2015-05-15 16:21:58
  • 501

CSU 1087 就多了两分钟【恶心题,时间计算】

Yucept21和他的室友Zyn因为宿舍没电去网吧上网,上了27分钟,Cs打电话来说来电了。所以Yucept21在第29分钟下机了,上网的费用是一块钱,然后Zyn墨迹了两分钟,第31分钟下机,上机费用...
  • hurmishine
  • hurmishine
  • 2016-09-06 01:25:35
  • 689

[CSU] 1087 就多了两分钟

题目: Yucept21和他的室友Zyn因为宿舍没电去网吧上网,上了27分钟,Cs打电话来说来电了。所以Yucept21在第29分钟下机了,上网的费用是一块钱,然后Zyn墨迹了两分钟,第31分钟下...
  • qq_24294439
  • qq_24294439
  • 2017-03-11 20:52:54
  • 266

CSU 1081集训队分组(搜索)

集训队分组 Time Limit: 2 Sec  Memory Limit: 128 MB Description 中南大学ACM的暑期集训马上就要开始了,这次集训会将全体N名集训队员(编号分别为...
  • LYHVOYAGE
  • LYHVOYAGE
  • 2016-03-01 23:02:38
  • 598

CSU 1639 队长,我想进集训队!

Description “队长,我想进集训队!”这是小A内心的愿望,然而进集训队是有一定要求的,小A现在只知道自己的情况,请你帮他/她判断一下是否可以进入集训队。 已知进入集训队的条件如下...
  • jtjy568805874
  • jtjy568805874
  • 2015-07-18 21:13:19
  • 356

N皇后问题(hdu2553)

N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su...
  • u013455430
  • u013455430
  • 2014-05-08 17:29:38
  • 291

CSU 1086 超市购物 分组背包问题

Problem C: 超市购物 Time Limit: 1 Sec  Memory Limit: 128 MB SUBMIT: 21  Solved: 10 [SUBMIT][STATUS]...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2012-07-21 19:35:22
  • 743
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 112万+
    积分: 2万+
    排名: 418
    博客专栏