模板_尺取法

//
#include<bits/stdc++.h>
using namespace std;

const int N=111;
int in[N];
int n,m,x,y;

void double_p( int i,int j )
{
    int sum;
    sum=x=y=0;

    while( j<=n && __ )
    {
        __; j++;
    }
    if( __ ) return false;              // special

    while( __ ) { __--; i++; }          // compress
    x=i; y=j-1;

    while( j<=n )
    {
        __;
        while( __ ) { __--; i++; }      //compress
        if( y-x > j-i ) { x=i; y=j };
        j++;
    }
    return true;
}

P1638 逛画展

// double_p
#include<bits/stdc++.h>
using namespace std;

const int N=1e6+7;
const int M=2222;
int in[N],cnt[N];
int n,m,x,y;

void double_p( int i,int j )
{
    int sum=0;
    while( j<=n && sum<m )
    {
        if( cnt[in[j]]==0 ) sum++;
        cnt[in[j]]++;
        j++;
    }
    while( cnt[in[i]]>1 ) { cnt[in[i]]--; i++; }        // compress

    x=i; y=j-1;
    while( j<=n )
    {
        cnt[in[j]]++;
        while( cnt[in[i]]>1 ) { cnt[in[i]]--; i++; }    // compress
        if( y-x > j-i ) { x=i; y=j; }
        j++;
    }
}
 
int main()
{
    while( cin>>n>>m )
    {
        memset( cnt,0,sizeof( cnt ) );      // init
        for( int i=1;i<=n;i++ ) cin>>in[i];
        double_p( 1,1 );
        cout<<x<<" "<<y<<endl;
    }
    return 0;
}

POJ_3061_Subsequence

// double_p_special
// #include<bits/stdc++.h>
#include<iostream>
using namespace std;

const int N=1e5+6;
int in[N];
int t,n,s,x,y;

bool double_p( int i,int j )
{
    int sum;
    x=y=sum=0;

    while( j<=n && sum<s )
    {
        sum+=in[j]; j++;
    }
    if( sum<s ) return false;                       // special

    while( sum-in[i]>=s ) { sum-=in[i]; i++; }      // compress

    x=i; y=j-1;
    while( j<=n )
    {
        sum+=in[j];
        while( sum-in[i]>=s ) { sum-=in[i]; i++; }  // compress
        if( y-x > j-i ) { x=i; y=j; }
        j++;                                        // lost
    }
    return true;
}

int main()
{
    cin>>t;
    while( t-- )
    {
        cin>>n>>s;
        for( int i=1;i<=n;i++ ) cin>>in[i];
        if( double_p( 1,1 ) )   cout<<y-x+1<<endl;  // len=dis+1
        else                    cout<<0<<endl;      // special        
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124973870