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();
}
}

浙公网安备 33010602011771号