Again Array Queries---Lightoj1100(循环暴力)

题目链接:http://lightoj.com/volume_showproblem.php?problem=1100

题意是给你n个数,q个询问,每次求出 a 到 b(从0开始)最小差值;

直接暴力就能过:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std;
#define N 1010
#define INF 0xfffffff
int num[N*100], cnt[N], vis[N];

int main()
{
    int T, t=1, n, a, b, q;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n, &q);
        for(int i=0; i<n; i++)
            scanf("%d", &num[i]);
        printf("Case %d:\n", t++);
        while(q--)
        {
            memset(vis, 0, sizeof(vis));
            scanf("%d%d", &a, &b);
            int flag = 0, Min = INF;
            for(int i=a; i<=b; i++)
            {
                if(vis[num[i]]==1)
                {
                    flag=1;
                    break;
                }
                else
                {
                    for(int j=a; j<i; j++)
                        Min = min(Min, abs(num[i]-num[j]));
                    vis[num[i]] = 1;
                }
            }
            if(flag == 1)
                Min = 0;
            printf("%d\n", Min);
        }
    }
    return 0;
}

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std;
#define N 1010
#define INF 0xfffffff
int num[N*100], cnt[N];

int main()
{
    int T, t=1, n, a, b, q;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n, &q);
        for(int i=0; i<n; i++)
            scanf("%d", &num[i]);
        printf("Case %d:\n", t++);
        while(q--)
        {
            memset(cnt, 0, sizeof(cnt));
            scanf("%d%d", &a, &b);
            int flag = 0, Min = INF, pre = 0;
            for(int i=a; i<=b; i++)
                cnt[num[i]]++;
            for(int i=1; i<=1000; i++)
            {
                if(flag == 1)break;
                if(cnt[i]>=2)
                {
                    flag = 1;break;
                }
                if(cnt[i]==1)
                {
                    if(pre == 0) pre = i;
                    else
                    {
                        Min = min(Min, i-pre);
                        if(Min == 0)flag = 1;
                        pre = i;
                    }
                }
            }
            if(flag == 1)
                Min = 0;
            printf("%d\n", Min);
        }
    }
    return 0;
}

时间: 2024-10-07 07:16:37

Again Array Queries---Lightoj1100(循环暴力)的相关文章

codeforces 797 E. Array Queries【dp,暴力】

题目链接:codeforces 797 E. Array Queries   题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为止,求每次询问要转换的次数. 题解:纯暴力会TLE,所以在k为根号100000范围内dp打表 dp[i][j]表示初始p为i, k为j,需要转换几次可以大于n. 状态转移方程:dp[i][j] = dp[i+a[i]+j] + 1 #include <cstdio> #include <al

lightoj Again Array Queries

1100 - Again Array Queries   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 MB Given an array with n integers, and you are given two indices i and j (i ≠ j) in the array. You have to find two integers in the range whose diffe

LightOJ Array Queries 1082【线段树求区间最值】

1082 - Array Queries PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB Given an array with N elements, indexed from 1 to N. Now you will be given some queries in the form I J, your task is to find the minimum value from index

lightoj-1082 - Array Queries

1082 - Array Queries PDF (English) Statistics ForumTime Limit: 3 second(s) Memory Limit: 64 MBGiven an array with N elements, indexed from 1 to N. Now you will be given some queries in the form I J, your task is to find the minimum value from index I

Array Queries CodeForces - 797E

Array Queries CodeForces - 797E WATLERE之路: 很显然的一道dp题,于是我妄想着通过时间O(n^2)的dp把它A掉,然后,我就走上了WATLERE之路..... 第一次,递归,RE 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int ans[100100]; 6 int a[100100]; 7 int n

Light oj 1100 - Again Array Queries (鸽巢原理+暴力)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间数的最小差是多少. 要是l到r的数字个数大于1000,必定会有两个数字重复,所以此时最小差就为0.要是小于等于1000就直接暴力即可. 1 //#pragma comment(linker, "/STACK:102400000, 102400000") 2 #include <alg

CodeForcs 797E Array Queries

$dp$预处理,暴力. 如果$k > sqrt(n)$,那么答案不会超过$sqrt(n)$,暴力模拟即可.如果$k <= sqrt(n)$,那么可以$dp$预处理打表. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <queue> #include <stack&

CF701F String set queries (分块思想+暴力)

很容易想到AC自动机,但是却发现不怎么支持删除 完蛋,怎么办? 思考如何优化暴力 有两种暴力:一种是kmp,一种是trie trie时间复杂度优秀,但空间不行: kmp时间不行 那么我们可以互补一下 对于长度小于 \(sqrt\) 的,我们加入 \(trie\) 中,否则暴力 \(kmp\),这样能够维持时间复杂度,因为总长不大 分块思想真妙! #include <map> #include <set> #include <ctime> #include <que

863D - Yet Another Array Queries Problem(思维)

原题连接:http://codeforces.com/problemset/problem/863/D 题意:对a数列有两种操作: 1 l r ,[l, r] 区间的数字滚动,即a[i+1]=a[i], a[l]=a[r] 2 l r ,[l, r] 区间的数字位置反转. 若干个操作之后输出a[b[i]]. 思路: 由于是在操作结束后输出,且b[i]的个数不多(<=100),所以可以通过反推求出答案. AC代码: 1 #include<iostream> 2 #include<cs