zoukankan      html  css  js  c++  java
  • wenbao与思维

    思维真的是非常重要。。。。。

    http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1007&cid=30942

    Problem Description

    ACM小学妹在今天的暑假训练结束后,想看球赛放松一下。当他打开电脑时查询到联盟今天直播N场球赛,每场球赛的起止时间(S1,E1),(S2,E2),...,(SN,EN)。现在小学妹想今天看完所有的球赛直播,不至于留到明天看重播了,毕竟明天依旧是要训练的。当小学妹看完这场球赛要切换到其他球赛时是不需要时间的。现在小学妹用自己训练用的电脑来看球赛,但是可能不够。毕竟小学妹自己的电脑最多只能同时播放1场直播,现在小学妹需要借一些电脑来同时播放球赛。本来小学妹自己是可以求出最少需要借多少台电脑来同时观看的,但是今天训练太累了,你可以帮助他吗?

    Input

    包含多组输入,第一行输入一个整数N(1≤N≤100000),表示任务的数目。以下N行每行两个整数Si,Ei,(0≤Si<Ei≤1000000000),表示任务的起至时间。

    Output

    输出小学妹最少需要借的电脑数目。

    Sample Input

    5
    1 10
    2 7
    6 9
    3 4
    7 10

    Sample Output

    2

    给个代码自己体会

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 using namespace std;
     5 const int maxn = 1e5+10;
     6 struct Node{
     7     int x, y;
     8 }T[maxn*2];
     9 int cmp(Node a, Node b){
    10     if(a.x == b.x) return a.y < b.y;
    11     return a.x < b.x;
    12 }
    13 int main(){
    14     int n;
    15     while(~scanf("%d", &n)){
    16         int num = 0, sum = 0, ma = -1, x, y;
    17         for(int i = 0; i < n; i++){
    18             scanf("%d %d", &x, &y);
    19             T[num].x = x, T[num].y = 1, num++;
    20             T[num].x = y, T[num].y = -1, num++;
    21         }
    22         sort(T, T+num, cmp);
    23         for(int i = 0; i < num; i++){
    24             sum += T[i].y;
    25             if(sum > ma) ma = sum;
    26         }
    27         printf("%d
    ", ma-1);
    28     }
    29     return 0;
    30 }

    http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1003&cid=30942

    二叉树和

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 #define ll long long
     5 const ll mod = 1e9+7;
     6 ll n, m;
     7 int main(){
     8     while(~scanf("%lld %lld", &n, &m)){
     9         ll sum = 1, num = 1, x;
    10         while(n--){
    11             x = 1LL << n;
    12             if(x >= m) num ++;
    13             else num += x*2, m -= x;
    14             sum = (sum + num%mod) % mod;
    15             //cout<<n<<" "<<x<<" "<<num<<endl;
    16         }
    17         printf("%lld
    ", sum);
    18     }
    19     return 0;
    20 }

     http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=30942&pid=1008

    Problem Description

    halfyarn找你写个简单的题?好哒!给你n个整数,现在要求你选择两个位置的数,例如选择第pos_a个数a,和第pos_b个数b,给定ans=min(a,b)*abs(pos_a-pos_b),输出ans的最大值。

    Input

    第一行输入一个n代表有n个数,接下来的一行输入n个整数;
    2<=n<=1e6;
    1<=a,b<=1e6;
    注意多组输入;

    Output

    ans的最大值;

    Sample Input

    4
    1 2 2 2

    Sample Output

    4
     1 #include <iostream>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn = 1e6+10;
     5 ll a[maxn];
     6 int main(){
     7     int n;
     8     while(~scanf("%d", &n)){
     9         ll sum, ma = -1;
    10         for(int i = 0; i < n; i++) scanf("%lld", a+i);
    11         int l = 0, r = n-1;
    12         while(l < r){
    13             if(a[l] < a[r]) sum = (r-l)*a[l], l++;
    14             else sum = (r-l)*a[r], r--;
    15             if(sum > ma) ma = sum;
    16         }
    17         printf("%lld
    ", ma);
    18     }
    19     return 0;
    20 }

    http://hihocoder.com/problemset/problem/1469

     福字,传说中的单调栈

     1 #include <iostream>
     2 using namespace std;
     3 const int maxn = 1009;
     4 int a[maxn][maxn], b[maxn][maxn], s[maxn];
     5 int main(){
     6     int n, m = -1, x, xx;
     7     scanf("%d", &n);
     8     for(int i = 1; i <= n; ++i){
     9         for(int j = 1; j <= n; ++j){
    10             scanf("%d", &a[i][j]);
    11             if(a[i][j] == a[i-1][j]+1 && i != 1){
    12                 b[i][j] = b[i-1][j] + 1;
    13             }else b[i][j] = 1;
    14         }
    15     }
    16     for(int i = 1; i <= n; ++i){
    17         for(int j = 1; j <= n; ++j){
    18             if(a[i][j] == a[i][j-1]+1 && j != 1){
    19                 x++, xx = min(xx, b[i][j]);
    20             }else x = 1, xx = b[i][j];
    21             int xxx = min(x, xx);
    22             if(m < xxx) m = xxx;
    23         }
    24     }
    25     printf("%d
    ", m);
    26 }
    27 /*
    28 4
    29 0 0 0 0
    30 0 1 2 0
    31 0 2 3 0
    32 0 0 0 0
    33 */

    只有不断学习才能进步!

  • 相关阅读:
    Mysql常用函数总结(二)
    mysql百万的数据快速创建索引
    php 中的sprintf 坑
    php5.5之后新特性整理
    mysql实践总结
    php下载远程图片到本地
    搜藏一个php文件上传类
    Attribute基本介绍
    Fiddler4抓包工具使用教程一
    HTTP传输数据压缩
  • 原文地址:https://www.cnblogs.com/wenbao/p/6083467.html
Copyright © 2011-2022 走看看