切了几道水题复习

1. poj 1088

#include<cstdio>
#include<cmath>
#include<stdlib.h>
#include<map>
#include<set>
#include<time.h>
#include<vector>
#include<queue>
#include<string>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-8
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
typedef pair<int , int> pii;

#define maxn 100 + 10

int d[maxn][maxn];
int a[maxn][maxn];
int go[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

int R, C;
int ans;

int dfs(int x, int y)
{
    if(d[x][y] > 0) return d[x][y];

    int res = 0;
    for(int i = 0; i < 4; i++)
    {
        int dx = x + go[i][0];
        int dy = y + go[i][1];
        if(dx < 1 || dy < 1 || dx > R || dy > C || a[dx][dy] >= a[x][y]) continue;
        int t = dfs(dx, dy);
        res = max(res, t);
    }
    res++;
    ans = max(ans, res);
    return d[x][y] = res;
}

int main()
{
    while(~scanf("%d%d", &R, &C))
    {
        ans = -INF;
        for(int i = 1; i <= R; i++)
        for(int j = 1; j <= C; j++)
        scanf("%d", &a[i][j]);

        memset(d, -1, sizeof d);
        for(int i = 1; i <= R; i++)
        for(int j = 1; j <= C; j++)
        if(d[i][j] < 0)
        dfs(i, j);

        printf("%d\n", ans);
    }
    return 0;
}

2.poj2299

#include<cstdio>
#include<cmath>
#include<stdlib.h>
#include<map>
#include<set>
#include<time.h>
#include<vector>
#include<queue>
#include<string>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-8
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
typedef pair<int , int> pii;
#define maxn 500000 + 10

int a[maxn];
int n;

int lowbit(int x)
{
    return x & (-x);
}

void modify(int x,int add)//一维
{
    while(x<=n)
    {
        a[x]+=add;
        x+=lowbit(x);
    }
}

int get_sum(int x)
{
    int ret=0;
    while(x > 0)
    {
        ret+=a[x];
        x-=lowbit(x);
    }
    return ret;
}

map<int, int> M;
set<int> S;

struct B
{
    int x, pos;
}b[maxn];

int cmp(B t1, B t2)
{
    return t1.x < t2.x ;
}

int bb[maxn];

int main()
{
    while(~scanf("%d", &n) && n)
    {
        for(int i = 1; i <= n; i++)
        {
            scanf("%d", &b[i].x);
            b[i].pos = i;
        }

        sort(b + 1, b + 1 + n, cmp);

        for(int i = 1; i <= n; i++)
        bb[b[i].pos] = i;

        memset(a, 0, sizeof a);
        LL ans = 0;
        for(int i = 1 ; i <= n; i++)
        {
            modify(bb[i], 1);
            ans += i - get_sum(bb[i]);
        }
        printf("%I64d\n", ans);
    }
    return 0;
}

/*

5
9
1
0
5
4
3
1
2
3
0

*/

3. hdu

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;
#define maxn 400000 + 10

int L[maxn], R[maxn];
int pos[maxn];
int a[maxn];
int n;

void get_left()
{
    int head = 1, tail = 0;
    for(int i = 1; i <= n; i++)
    {
        while(head <= tail && a[pos[tail]] >= a[i])
        tail--;
        L[i] = i - pos[tail] - 1;
        pos[++tail] = i;
    }
}

void get_right()
{
    int head = 1, tail = 0;
    pos[tail] = n + 1;
    for(int i = n; i >= 1; i--)
    {
        while(head <= tail && a[pos[tail]] >= a[i])
        tail--;
        R[i] = pos[tail] - i - 1;
        pos[++tail] = i;
    }
}

int main()
{
    while(~scanf("%d", &n))
    {
        memset(L, 0, sizeof L);
        memset(R, 0, sizeof R);
        for(int i = 1; i <= n; i++)
        scanf("%d", a + i);
        get_left();
        get_right();

        for(int i = 1; i <= n; i++)
        {
            printf("%d * %d\n", L[i], R[i]);
        }
        long long  ans = -1;
        for(int i = 1; i <= n; i++)
        ans = max(ans, ((long long)L[i] + R[i] + 1) * a[i]);
        printf("%I64d\n", ans);
    }
    return 0;
}

/*

6
5 8 4 4 8 4

*/

4.hdu 1541

#include<cstdio>
#include<cmath>
#include<stdlib.h>
#include<map>
#include<set>
#include<time.h>
#include<vector>
#include<queue>
#include<string>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define eps 1e-8
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
typedef pair<int , int> pii;
#define N 32010
#define maxn 15010

int n;
int a[N];
int ans[maxn];

int lowbit(int x)
{
    return x & (-x);
}

void modify(int x, int add)
{
    while(x <= N)
    {
        a[x] += add;
        x += lowbit(x);
    }
}

int get_sum(int x)
{
    int ret = 0;
    while(x > 0)
    {
        ret += a[x];
        x -= lowbit(x);
    }
    return ret;
}

int main()
{
    while(~scanf("%d", &n))
    {
        int x, y;
        memset(ans, 0, sizeof ans);
        memset(a, 0, sizeof a);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &x, &y);
            x++;
            ans[get_sum(x)]++;
            modify(x, 1);
        }
        for(int i = 0; i < n; i++)
        printf("%d\n", ans[i]);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-14 11:12:52

切了几道水题复习的相关文章

刷了500道水题是什么体验?

并没有什么卵用. 我马上大二了,大一两学期目测切了1000道水题了,毫无意义. 至今不理解kmp和后缀数组,只会模板.数论和博弈论是什么?能吃吗?只会打表.图论至今不会tarjan,话说dlx是什么?插头dp,这是什么?数据结构还好,经常做高中生的题,可持久化可持久化线段树也能花一下午时间写出来,然而并不会考. 平时做题只刷水题,遇到难题的时候,随手搜题解,看了看,哇,这居然能这么搞!然后抄一遍别人代码,交上去ac. cf一年几乎没缺过,花了大一上半年时间才滚上div1.然而至今紫号一堆,黄名一

大数--几道水题,用来学学JAVA

几道水题,练习一下JAVA写大数 poj2305  Basic remains 大数可以直接用非十进制读入,读入的数在变量中是十进制的 输出的时候要先用BigInteger的toString方法转换为相应的进制 1 import java.math.*; 2 import java.util.*; 3 class Main 4 { 5 public static void main(String[] args) 6 { 7 Scanner cin = new Scanner(System.in)

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

1503171912-ny-一道水题

一道水题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 今天LZQ在玩一种小游戏,可是这游戏数有一点点的大,他一个人玩的累.想多拉一些人进来帮帮他.你能写一个程序帮帮他吗?这个游戏是这种:有一行数字,假设我们把这行数字中的'5'都看成空格,那么就得到一行用空格切割的若干非负整数(可能有些整数以'0'开头,这些头部的'0'应该被忽略掉,除非这个整数就是由若干个'0'组成的,这时这个整数就是0). 你的任务是:对这些切割得到的整数,依从小到大的顺序排序输出,大家赶

两道水题

昨天同桌为我推荐了p1904这道水题,然后他就写不出来了--本来不想写,但是看他写得很麻烦,为了给他展示我的代码能力就写了一下. 即使类型为"其他",但还是掩盖不了模拟的事实.那么直接sort Ai,再在前k个牛中找到Bi最高的就行.复杂度为N*logN+k #include<iostream> #include<iomanip> #include<cstdio> #include<algorithm> using namespace s

ZOJ3778--一道水题

Description As we all know, Coach Gao is a talented chef, because he is able to cook M dishes in the same time. Tonight he is going to have a hearty dinner with his girlfriend at his home. Of course, Coach Gao is going to cook all dishes himself, in

(字典树3道水题)codeforces 665E&amp;282E&amp;514C

665E 题意: 给一个数列和一个整数k,求这个数列中异或起来大于等于k的子串数量. 分析: 其实只要维护一个维护前缀和就行了,把前缀和加到字典树里,然后递归search一下,注意需要剪枝,不然会T, if(s + (1ll << (i + 1)) - 1 < k)return 0; 这句话的意思是如果后面的二进制全都是1,都达不到k,就不用继续递归了. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include

Co-prime Array&amp;&amp;Seating On Bus(两道水题)

Co-prime Array Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 660A Description You are given an array of n elements, you must make it a co-prime array in as few moves as possible. In ea

数论——异或,两道水题。

第一题:(没有链接) 题目大意:给你n个数(n <= 1000000),第i个数用ai表示(每个a <= 1000000),求出每个数与其之后的数的xor和. 举个例子吧,比如三个数1 2 3答案就应该为1 xor 2 + 1 xor 3 + 2 xor 3 = 4; 题解: 首先有一个O(n*n)的算法,就是暴力枚举,可以过40%数据. 程序大体: for (int i = 1;i < n;i ++) for (int j = i + 1;j <= n;j ++) ans +=