2024 CCPC Liaoning Provincial Contest

L.龙之研习

积累多闰年

#include<bits/stdc++.h>
using namespace std;
#define int long long
int k;

bool check(__int128 x){
    __int128 s=0;
    for(__int128 i=4;i<=x;i*=100){
        s+=x/i-x/(25*i);
    }
    return x-s>=k;
}

void  solve(){
    cin>>k;
    k+=1533;
    int l=0;int r=2e18;
    while(l<r){
        int mid=(l+r)>>1;
        if(check(mid))r=mid;
        else l=mid+1; 
    }
    cout<<l<<'\n';
}

signed main(){
    std::ios::sync_with_stdio(false);
    int T;cin>>T;
    while(T--){
        solve();
    }
}

E.俄式简餐

首先,每种俄罗斯方块都是四个格子,n*m%4!=0无解
n和m有一个被4整除,直接构造
否则n和m 都得被2整除,模4都是2,
观察几个(2,2)无解,(2,6)可以拼成,(2,10)可以由(2,6)和两排4拼,(2,14)(2,18)之后都是(2,6)和4拼
(6,2),(6,6),(6,10)都是(6,2),下面由4拼

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pii pair<int,int>
#define ll long long
#define int long long

int n,m;
vector<vector<int>> a;

void solve(){
    cin>>n>>m;
    a.clear();
    a.resize(n+1,vector<int>(m+1,0));
    if((n*m)%4!=0){
        cout<<"NO\n";return ;
    }

    if(n%4==0){
        
        int idx=0;
        for(int j=1;j<=m;j++){
            for(int i=1;i<=n;i++){
                if(i%4==1)a[i][j]=++idx;
                else a[i][j]=idx;
            }
        }
    }else if(m%4==0){
      
        int idx=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(j%4==1)a[i][j]=++idx;
                else a[i][j]=idx;
            }
        }
    }else {
        if(n==2&&m==2){
            cout<<"NO\n";
            return ;
        }
        
if(m>2ll){
            int idx=1;
            for(int j=1;j<=1;j+=6){
                for(int i=1;i<=n;i+=2){
                    a[i][j]=idx;a[i][j+1]=idx+1;a[i][j+2]=idx+1;a[i][j+3]=idx+1;a[i][j+4]=idx+1;a[i][j+5]=idx+2;
                    a[i+1][j]=idx;a[i+1][j+1]=idx;a[i+1][j+2]=idx;a[i+1][j+3]=idx+2;a[i+1][j+4]=idx+2;a[i+1][j+5]=idx+2;
                    idx+=3;
                }
            }

            for(int j=7;j<=m;j+=4){
                for(int i=1;i<=n;i++){
                    a[i][j]=idx;a[i][j+1]=idx;a[i][j+2]=idx;a[i][j+3]=idx;
                    idx++;
                }
            }
        }
        else if(n>2ll){
            int idx=1;
            for(int i=1;i<=1;i+=6){
                for(int j=1;j<=m;j+=2){
                    a[i][j]=idx;a[i][j+1]=idx;
                    a[i+1][j]=idx;a[i+1][j+1]=idx+1;
                    a[i+2][j]=idx;a[i+2][j+1]=idx+1;
                    a[i+3][j]=idx+2;a[i+3][j+1]=idx+1;
                    a[i+4][j]=idx+2;a[i+4][j+1]=idx+1;
                    a[i+5][j]=idx+2;a[i+5][j+1]=idx+2;
                    idx+=3;
                }
            }
            for(int i=7;i<=n;i+=4){
                for(int j=1;j<=m;j++){
                    a[i][j]=idx;
                    a[i+1][j]=idx;
                    a[i+2][j]=idx;
                    a[i+3][j]=idx;
                    idx++;
                }
            }
        } 
        }

        cout<<"YES\n";
        for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cout<<a[i][j]<< " ";if(j==m)cout<<'\n';}
}

signed main(){
    std::ios::sync_with_stdio(false);
    int T;cin>>T;
    while(T--){
        solve();
    }
}
posted @ 2025-08-29 18:44  arin876  阅读(24)  评论(0)    收藏  举报