NYOJ -1364 (第十一屆河南省賽)

題目銜接: http://acm.nyist.cf/problem/1364

治安管理

 
  • 內存限制:128MB 時間限制:3000ms 特判: No

  • 通過數:51 提交數:132 難度:2

題目描述:

SZ市是中國改革開放建立的經濟特區,是中國改革開放的窗口,已發展爲有一定影響力的國際化城市,創造了舉世矚目的“SZ速度”。SZ市海、陸、空、鐵口岸俱全,是中國擁有口岸數量最多、出入境人員最多、車流量最大的口岸城市. 
爲了維護SZ經濟特區社會治安秩序,保障特區改革開放和經濟建設的順利進行, 特別設立了SZ社會治安綜合治理委員會主管特區的社會治安綜合治理工作。公安機關是社會治安的主管部門,依照法律、法規的規定進行治安行政管理,打擊擾亂社會治安的違法犯罪行爲,維護社會秩序。
YYH大型活動將在[S,F)這段時間舉行,現要求活動期間任何時刻巡邏的警察人數不少於M人。公安機關將有N名警察在維護活動的安全,每人巡邏時間爲[ai,bi)。請你檢查目前的值班安排,是否符合要求。若滿足要求,輸出YES,並輸出某個時刻同時巡邏的最多人數;若不滿足要求,輸出NO,並輸出某個時刻同時巡邏的最少人數。

 

輸入描述:

第一行: T 表示以下有T組測試數據( 1≤ T ≤5 )

對每組數據,   

第一行:N  M  S  F        ( 1≤N≤10000  1≤M ≤1000  0≤S<F≤100000)

第二行,a1  a2 ….  an     警察巡邏起始時間  

第三行,b1  b2 ….  bn     警察巡邏結束時間     (  0≤ai0  i=1…. n)

輸出描述:

對每組測試數據,輸出佔一行。若滿足要求,輸出YES,並輸出某個時刻同時巡邏的最多人數;若不滿足要求,輸出NO,並輸出某個時刻同時巡邏的最少人數。(中間一個空格)

 

 

樣例輸入:

2
5 2 0 10
0 0 2 7 6
6 2 7 10 10
10 2 6 11
1 3 5 7 9 2 4 6 8 10
2 4 6 8 10 3 5 7 9 11

樣例輸出:

YES 2
NO 1

 題目大意:。。。

思路:大水題,直接類似於桶排,找下區間內最大最小值即可,但是要注意區間是左開右閉!!!!wa了好幾發纔看到。

代碼:

/*
題目大意
*/
#include<map>
#include<set>
#include <vector>
#include<stack>
#include<queue>
#include<cmath>
#include<string>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll unsigned long long
#define inf 0x3f3f3f
#define esp 1e-8
#define bug {printf("mmp\n");}
#define mm(a,b) memset(a,b,sizeof(a))
#define T() int test,q=1;scanf("%d",&test); while(test--)
#define Test() {freopen("F:\\B.in","r",stdin);freopen("F:\\test2.out","w",stdout);}
const int maxn=1e5+10;
const double pi=acos(-1.0);
const int N=110;
const ll mod=1e9+7;


int num[maxn];
int a[maxn],b[maxn];


int main()
{
    T()
    {
        mm(num,0);
        mm(a,0);
        mm(b,0);
        int n,m,s,f;
        cin>>n>>m>>s>>f;
        for(int i=0; i<n; i++)
        {
            cin>>a[i];
        }
        for(int i=0; i<n; i++)
        {
            cin>>b[i];
            for(int j=a[i]; j<b[i]; j++)
            {
                num[j]++;
            }
        }
        int flag=0,minn=inf,maxx=-inf,id1,id2;
        for(int i=s; i<f; i++)
        {
            if(minn>num[i])
            {
                minn=num[i];
            }
            if(maxx<num[i])
            {
                maxx=num[i];
            }
        }
        if(minn<m)
            cout<<"NO "<<minn<<endl;
        else
            cout<<"YES "<<maxx<<endl;
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章