2023 CCPC Henan Provincial Collegiate Programming Contest

因为是我和队友VP的这场比赛,最后记录的也是比赛时候的提交代码,因此会出现多种不同的码风也是正常现象。

A.小水獭游河南

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define maxn 150500
#define mod 998244353
#define pi 3.141592653
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=(x<<3)+(x<<1)+c-48;
        c=getchar();
    }
    return x*f;
}    
int t; 
string s;
int num[1500];
int tag1,tag2=-1;//大小写的分割点 
inline bool check(string a)//判断回文 
{
    int len=a.length();
    int l=0,r=len-1;
    while(l<=r)
    {
        if(a[l]!=a[r]) return false; 
        l++;
        r--;            
    }
    return true;
}
inline void pre_work()
{
    memset(num,0,sizeof(num));
    tag1=s.length();
    tag2=-1;
    for(rg int i=0;i<s.length();++i)
    {
        num[s[i]]++;
        if(num[s[i]]>=2||s[i]<'a'||s[i]>'z') 
        {
            tag1=i;
            break;
        }
    }
    memset(num,0,sizeof(num));
    for(rg int i=s.length()-1;i>=0;--i)
    {
        num[s[i]]++;
        if(num[s[i]]>=2||s[i]<'a'||s[i]>'z') 
        {
            tag2=i;
            break;
        }
    }
}
int main()
{
    t=read();
    while(t--)
    {
        cin>>s;
        pre_work();
        for(rg int i=0;i<s.length()-1;++i)
        {
            //[0,i]--[i+1,len-1]
            if(i<tag1&&check(s.substr(i+1,s.length()-(i+1)))==1) 
            {
                cout<<"HE"<<endl;
                goto ed;
            }
            else if((i+1)>tag2&&check(s.substr(0,i+1))==1)
            {
                cout<<"HE"<<endl;
                goto ed;
            }
            else if(i>=tag1&&i+1<=tag2) break;
        }
        cout<<"NaN"<<endl;
        ed:;
    }
}
View Code

B.Art for Rest

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define maxn 1000500
#define mod 998244353
#define pi 3.141592653
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=(x<<3)+(x<<1)+c-48;
        c=getchar();
    }
    return x*f;
}    
int n,m,a[maxn];
int f[maxn][22];
int g[maxn][22];
long long lg[maxn];
inline void ST_prework()
{
    for(rg int j=1;(1<<j)<=n;++j)
    {
        for(rg int i=1;i<=n-(1<<j)+1;++i)
        {
            f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
            g[i][j]=min(g[i][j-1],g[i+(1<<(j-1))][j-1]);
        }
    }
}
inline long long query1(int l,int r)
{
    long long k=lg[r-l+1]/(lg[2]);
    return max(f[l][k],f[r-(1<<k)+1][k]);
} 
inline long long query2(int l,int r)
{
    long long k=lg[r-l+1]/(lg[2]);
    return min(g[l][k],g[r-(1<<k)+1][k]);
} 
bool xd[maxn];
int ans;
int main()
{
    n=read();
    lg[1]=0;
    lg[2]=1;
    for(rg int i=3;i<=n+1;++i) lg[i]=lg[i/2]+1;
    for(rg int i=1;i<=n;++i)
    {
        a[i]=read();
        f[i][0]=a[i];
        g[i][0]=a[i];
    }
    ST_prework();
    for(rg int k=1;k<=n;++k)
    {
        if(xd[k]==1) 
        {
            ans++;
            continue;
        }
        else
        {
            bool flag=1;
            int l=min(n,k+1),r=min(n,2*k);
            int maxx=query1(1,k);
            int m=ceil(double(1.0*n)/double(1.0*k))-1;
            while(m--)
            {
                if(query2(l,r)<maxx) 
                {
                    flag=0;
                    break;
                }
                else maxx=query1(l,r);
                l=min(n,l+k);
                r=min(n,r+k);
            }
            if(flag==1)
            {
                ++ans;                
                for(rg int j=k;j<=n;j+=k) xd[j]=1;
            }
        }
    }
    cout<<ans;
}
View Code

E.矩阵游戏

#include <bits/stdc++.h>
#include <ext/rope>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
#define fi first
#define se second
#define lc u << 1
#define rc u << 1 | 1
// #define int long long

// #define double long long
// #define int __int128_t
typedef long long LL;

const int N = 500 + 10;

// const int R = 999997;
const int Base = N / 2;
const int M = 1e6 + 10;

// const int P = 1 << 10;
const int INF = 2147483647;

typedef unsigned long long ULL;

const double eps = 1e-4;
const double PI = acos(-1);
const int mod = 1e9 + 7;
int n, k;
int d;
int m;
int Q;
int target;
// int p = INF;
// __int128_t a = 1;

// rope<int> r;
tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> treap;
char g[N][N];

void solve()
{
    scanf("%d %d %d", &n, &m, &k);
    vector<vector<vector<int>>> f(2, vector<vector<int>>(m + 1, vector<int>(k + 1)));
    for (int i = 1; i <= n; i++)
    {
        scanf("%s", g[i] + 1);
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            for (int z = 0; z <= k; z++)
            {
                if (g[i][j] == '0')
                {
                    f[i & 1][j][z] = max(f[(i - 1) & 1][j][z], f[i & 1][j - 1][z]);
                }
                else if (g[i][j] == '1')
                {
                    f[i & 1][j][z] = max(f[(i - 1) & 1][j][z], f[i & 1][j - 1][z]) + 1;
                }
                else
                {
                    if (z >= 1)
                    {
                        f[i & 1][j][z] = max(f[(i - 1) & 1][j][z - 1], f[i & 1][j - 1][z - 1]) + 1;
                    }
                    else
                    {
                        f[i & 1][j][z] = max(f[(i - 1) & 1][j][z], f[i & 1][j - 1][z]);
                    }
                }
            }
      
        }
   
    }
    printf("%d\n", f[n & 1][m][k]);
}

signed main()
{
    int t = 1;

    scanf("%lld", &t);

    while (t--)
    {

        solve();
    }
    return 0;
}
View Code

F.Art for Last

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

//#define int long long  

typedef long long LL;
const int N=5e5+10;
int a[N],b[N],q[N];
int n,k;



signed main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    
    LL res=1e18;
    
    int tt=-1,hh=0;
    for(int i=2;i<=n;i++)
    {
        b[i]=abs(a[i]-a[i-1]);
        if(k>2)
        {
            while(hh<=tt&&i+1-k>q[hh])  hh++;//判断q[hh]有没有滑出窗口
            while(hh<=tt&&b[q[tt]]>=b[i]) tt--;//保证窗口内的数从小到大排序
            q[++tt]=i;
            if(i>=k) res=min(res,(LL)b[q[hh]]*abs(a[i]-a[i-k+1])); 
        }else res=min(res,(LL)b[i]*b[i]);
    }
    
    cout<<res;
}
View Code

H.Travel Begins

#include<bits/stdc++.h>
using namespace std;
#define rg register
#define maxn 250500
#define mod 998244353
#define pi 3.141592653
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=(x<<3)+(x<<1)+c-48;
        c=getchar();
    }
    return x*f;
}    
int t;
int n,k;
int minn,maxx;
int main()
{
    t=read();
    while(t--)
    {
        n=read();
        k=read();
        minn=maxx=0;
        int tot1=k-1;
        if(tot1%2==0)
        {
            int res=n-tot1/2;
            cout<<max(0,res)<<" ";
        }
        else
        {
            int res=n-(tot1-1)/2;
            cout<<max(0,res)<<" ";
        }
    //    cout<<k-1<<" "<<(((k-1)%2==0)?(n-(k-1)/2):(n-(k-2)/2))<<endl;
        cout<<min(2*n,(k-1)+(((k-1)%2==0)?(n-(k-1)/2):(n-(k-2)/2)))<<endl;
    }
}
View Code

K.排列与质数

#include <bits/stdc++.h>
#include <ext/rope>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
#define fi first
#define se second
#define lc u << 1
#define rc u << 1 | 1
// #define int long long

// #define double long long
// #define int __int128_t
typedef long long LL;

const int N = 1e5 + 10;

// const int R = 999997;
const int Base = N / 2;
const int M = 1e6 + 10;

// const int P = 1 << 10;
const int INF = 2147483647;

typedef unsigned long long ULL;

const double eps = 1e-4;
const double PI = acos(-1);
const int mod = 1e9 + 7;
int n, k;
int d;
int m;
int Q;
int target;
// int p = INF;
// __int128_t a = 1;

// rope<int> r;
tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> treap;
int primes[N];
int cnt = 0;
bool st[N];
bool isp[N];

void init()
{
    for (int i = 2; i <= 1e5; i++)
    {
        if (!st[i])
        {
            st[i] = true;
            primes[cnt++] = i;
            isp[i] = true;
        }
        for (int j = 0; primes[j] <= 1e5 / i; j++)
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0)
            {
                break;
            }
        }
    }
}

int find(int n)
{

    int res = 2 * (n - 2);
    // cout << res << endl;
    for (int i = 0; i < cnt; i++)
    {
        int j = primes[i];
        cout << j << endl;
        if (res + j > n)
        {
            return 0;
        }
        if (isp[res] && isp[res + j])
        {
            return j;
        }
    }
    return 0;
}

void solve()
{

    scanf("%d", &n);
    vector<int> a(n + 10);
    a[1] = 1;
    if (n <= 4)
    {
        printf("-1\n");
        return;
    }
    if (n == 5)
    {
        printf("4 1 3 5 2\n");
    }
    else if (n == 6)
    {
        printf("4 6 1 3 5 2\n");
    }
    else if (n == 7)
    {
        printf("4 6 1 3 5 2 7\n");
    }
    else if (n == 8)
    {
        printf("4 6 8 1 3 5 2 7\n");
    }
    else if (n == 9)
    {
        printf("4 6 8 1 3 5 2 7 9\n");
    }
    else if (n == 10)
    {
        printf("8 6 9 4 1 3 5 2 7 10\n");
    }
    else if (n == 11)
    {
        printf("8 6 4 1 3 10 5 2 7 9 11\n");
    }
    else if (n == 12)
    {
        printf("8 11 6 4 1 3 5 2 7 9 12 10\n");
    }
    else
    {
        if (n & 1)
        {
            a[4] = 2;
            a[3] = 5;
            a[5] = 7;
            int t = n - 6;
            int idx = 0;
            int cur = 0;
            for (int i = 2; i <= (n + 3) / 2 + 1; i++)
            {
                if (a[i - 2] == t)
                {
                    a[i] = t + 2;
                    continue;
                }
                if (!a[i])
                {
                    a[i] = a[i - 1] + 2;
                }
                if (a[i] == t)
                {
                    i++;
                    a[i] = n - 1;
                }
                // cout << i << ' ' << a[i] << endl;
            }
            cur = n - 1;
            for (int i = (n + 3) / 2 + 2; i <= n && cur > 0; i++, cur -= 2)
            {
                a[i] = cur - 2;
            }
            // for (int i = 1; i <= n; i++)
            // {
            //     cout << i << ' ' << a[i] << endl;
            // }
        }
        else
        {
            a[4] = 2;
            a[3] = 5;
            a[5] = 7;
            int t = n - 6;
            int cur = 4;
            for (int i = n; i >= n / 2 + 1; i--, cur += 2)
            {
                if (a[i + 2] == t)
                {
                    a[i] = t + 2;
                    continue;
                }
                if (!a[i])
                {
                    a[i] = cur;
                }
                if (a[i] == t)
                {
                    i--;
                    a[i] = n - 1;
                }
                // cout << i << ' ' << a[i] << endl;
            }
            for (int i = 2; i <= n / 2; i++)
            {
                if (!a[i])
                {
                    a[i] = a[i - 1] + 2;
                }
                // cout << i << ' ' << a[i] << endl;
            }
        }
        for (int i = 1; i <= n; i++)
        {
            printf("%d", a[i]);
            if (i != n)
            {
                printf(" ");
            }
            else
            {
                puts("");
            }
        }
    }
}

signed main()
{
    int t = 1;
    // str = "codeforces";
    // init();
    // cout << cnt << endl;
    // init();
    // scanf("%d", &t);
    // getchar();
    // int a = 1;
    // for (int i = 1; i <= 26; i++)
    // {
    //     a = (a << 1) + 1;
    // }
    // cout << a << endl;
    // float t = 134217727;
    // int cnt = 200;
    // printf("%.16lf", t);
    // while (cnt--)
    // {
    //     t = t * 2 + a;
    //     printf("%.16f\n", t);
    // }
    // getchar();
    // cout << (int)(log(4) / log(2)) << endl;
    while (t--)
    {
        //     cout << t << endl;
        //     // cout << (2563 % 11) << endl;
        //     // cout << t << endl;
        solve();
        //     // cout << (((float)1) << 63) << endl;
        //     // cout << '\0' << endl;
        //     // cout << f(4);
        //     // cout<<(25 >> 5)
        //     // cout << gcd(31415, 14142);//
        //     // cout << (28284 / 11) << endl;
    }
    return 0;
}

/*
 *                                                     __----~~~~~~~~~~~------___
 *                                    .  .   ~~//====......          __--~ ~~
 *                    -.            \_|//     |||\\  ~~~~~~::::... /~
 *                 ___-==_       _-~o~  \/    |||  \\            _/~~-
 *         __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *     _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *   .~       .~       |   \\ -_    /  /-   /   ||      \   /
 *  /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 *  |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *           '         ~-|      /|    |-~\~~       __--~~
 *                       |-~~-_/ |    |   ~\_   _-~            /\
 *                            /  \     \__   \/~                \__
 *                        _--~ _/ | .-~~____--~-/                  ~~==.
 *                       ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                  -_     ~\      ~~---l__i__i__i--~~_/
 *                                  _-~-__   ~)  \--______________--~~
 *                                //.-~~~-~_--~- |-------~~~~~~~~
 *                                       //.-~~~--\
 *                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *
 *                               神兽保佑            永无BUG
 */

/**
 *  ┏┓   ┏┓+ +
 * ┏┛┻━━━┛┻┓ + +
 * ┃       ┃
 * ┃   ━   ┃ ++ + + +
 *  ████━████+
 *  ◥██◤ ◥██◤ +
 * ┃   ┻   ┃
 * ┃       ┃ + +
 * ┗━┓   ┏━┛
 *   ┃   ┃ + + + +Code is far away from  
 *   ┃   ┃ + bug with the animal protecting
 *   ┃    ┗━━━┓ 神兽保佑,代码无bug 
 *   ┃        ┣┓
 *    ┃        ┏┛
 *     ┗┓┓┏━┳┓┏┛ + + + +
 *    ┃┫┫ ┃┫┫
 *    ┗┻┛ ┗┻┛+ + + +
 */
View Code

 

posted @ 2023-05-22 02:34  sakuya726  阅读(46)  评论(0)    收藏  举报