10.【2024初三集训模拟测试2】

qwq

2024初三集训模拟测试2

  • 不会有人比本蒟蒻更蒻了 qwq

T1小P的2048

0pts 🌚🗿🗿🌝 🔯

  • 本来是道原题,可以在 30 秒内 AC ,但是突然改题了。然后一分没得(一坤小时白打了)。🚾
  • Shadow 40AT1 之后总分凭空增加 100 分。

题解 🈶

  • 没啥好说的, % 你。
  • 分四个方向讨论,先合并同类项,之后再进行移动,最后统计空格子,进行插入新值。
  • 记录一下 last 数组,假如发现 lastnow 相同,则说明无法操作。
  • 具体的看代码吧 qwq

代码 🈶

#include<bits/stdc++.h>
//#define int long long
#define N (1000010)
#define I i
#define J j
#define itn int
#define Int int
#define sort stable_sort
using namespace std;
namespace IO
{
#define ll long long
const int MAX=1<<12;
char buf[MAX],*p1=buf,*p2=buf;
char obuf[MAX],*o=obuf;
#define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<12,stdin),p1==p2)?EOF:*p1++)
//template<typename T>
//inline T read()
inline int read()
{
int x=0;bool f=1;
char c=gc();
for(;c<48||c>57;c=gc())if(c=='-')f=0;
for(;c>=48&&c<=57;c=gc())x=(x<<3)+(x<<1)+(c^48);
return f?x:~x+1;
}
void print(ll x){if(x>9)print(x/10);*o++=(x%10)+'0';}
void pit(ll x){if(x<0)*o++='-',x=~x+1;print(x);}
void write(ll x,char ed){pit(x);*o++=ed;}
void flush(){fwrite(obuf,o-obuf,1,stdout);}
#undef ll
}
using IO::read;using IO::write;using IO::flush;using std::complex;
inline int min(int x,int y){return y&((y-x)>>31)|x&(~(y-x)>>31);}
inline int max(int x,int y){return x&((y-x)>>31)|y&(~(y-x)>>31);}
inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;}
long long n,m;
void init_set()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
}
int fontaine;
int x,y,xx,yy,z,tot;
int genshin_impact;
int kamisato_ayaka[12][12];
int las[12][12];
signed main()
{
init_set();
n=read();m=read();
x=read();y=read();
kamisato_ayaka[x][y]=read();
xx=read();yy=read();
kamisato_ayaka[xx][yy]=read();
genshin_impact=n*n-2;
if(x==xx&&y==yy)genshin_impact=n*n-1;
for(int t(1);t<=m;++t)
{
x=read(),y=read(),z=read();
for(int i(1);i<=n;++i)
for(int j(1);j<=n;++j)
las[i][j]=kamisato_ayaka[i][j];
if(x==0)
{
for(int i(1);i<=n;++i)
for(int j(1),k(2);j<=n&&k<=n;++k)
{
for(;!kamisato_ayaka[k][i]&&k<n;++k);//跳过空格
if(kamisato_ayaka[j][i]==kamisato_ayaka[k][i]&&kamisato_ayaka[j][i])//这俩相同
kamisato_ayaka[k][i]<<=1,
fontaine+=kamisato_ayaka[k][i],
++genshin_impact,
kamisato_ayaka[j][i]=0;
else j=k;
}
for(int i(1);i<=n;++i)
for(int j(1),k(1);j<=n;++j,++k)
{
for(;!kamisato_ayaka[j][i]&&j<n;++j);
kamisato_ayaka[k][i]=kamisato_ayaka[j][i];
if(j!=k)kamisato_ayaka[j][i]=0;
}
}
else if(x==1)
{
for(int i(1);i<=n;++i)
for(int j(n),k(n-1);j>=1&&k>=1;--k)
{
for(;!kamisato_ayaka[k][i]&&k>1;--k);
if(kamisato_ayaka[j][i]==kamisato_ayaka[k][i]&&kamisato_ayaka[j][i])
kamisato_ayaka[k][i]<<=1,
fontaine+=kamisato_ayaka[k][i],
++genshin_impact,
kamisato_ayaka[j][i]=0;
else j=k;
}
for(int i(1);i<=n;++i)
for(int j(n),k(n);j>=1&&k>=1;--j,--k)
{
for(;!kamisato_ayaka[j][i]&&j>1;--j);
kamisato_ayaka[k][i]=kamisato_ayaka[j][i];
if(j!=k)kamisato_ayaka[j][i]=0;
}
}
else if(x==2)
{
for(int j(1);j<=n;++j)
for(int i(1),k(2);i<=n&&k<=n;++k)
{
for(;!kamisato_ayaka[j][k]&&k<n;++k);
if(kamisato_ayaka[j][i]==kamisato_ayaka[j][k]&&kamisato_ayaka[j][i])
kamisato_ayaka[j][k]<<=1,
fontaine+=kamisato_ayaka[j][k],
++genshin_impact,
kamisato_ayaka[j][i]=0;
else i=k;
}
for(int j(1);j<=n;++j)
for(int i(1),k(1);i<=n&&k<=n;++i,++k)
{
for(;!kamisato_ayaka[j][i]&&i<n;++i);
kamisato_ayaka[j][k]=kamisato_ayaka[j][i];
if(i!=k)kamisato_ayaka[j][i]=0;
}
}
else
{
for(int j(1);j<=n;++j)
for(int i(n),k(n-1);i>=1&&k>=1;--k)
{
for(;!kamisato_ayaka[j][k]&&k>1;--k);
if(kamisato_ayaka[j][i]==kamisato_ayaka[j][k]&&kamisato_ayaka[j][i])
kamisato_ayaka[j][k]<<=1,
fontaine+=kamisato_ayaka[j][k],
++genshin_impact,
kamisato_ayaka[j][i]=0;
else i=k;
}
for(int j(1);j<=n;++j)
for(int i(n),k(n);i>=1&&k>=1;--i,--k)
{
for(;!kamisato_ayaka[j][i]&&i>1;--i);
kamisato_ayaka[j][k]=kamisato_ayaka[j][i];
if(i!=k)kamisato_ayaka[j][i]=0;
}
}
bool gssa=0,tiao=0;
for(int i(1);i<=n;++i)
{
for(int j(1);j<=n;++j)
{
if(kamisato_ayaka[i][j]!=las[i][j]){tiao=1;break;}
if(i==n&&j==n){write(t-1,'\n'),gssa=1;break;}
}
if(gssa)break;
if(tiao)break;
}
if(gssa)break;
tot=0;
y%=genshin_impact;++y;
for(int i(1);i<=n;++i)
{
for(int j(1);j<=n;++j)
{
if(!kamisato_ayaka[i][j])++tot;
if(tot==y)
{
kamisato_ayaka[i][j]=z,
--genshin_impact;
break;
}
}
if(tot==y)break;
}
if(t==m)write(t,'\n');
}
write(fontaine,'\n');
flush();
return 0;
}

T2子集

25pts

  • 叕是唯一得到的分。

题解 🈶

  • k=1 的分很好得,输出 Yes 并从 1 输出到 n 即可。
  • nk 为偶数的分也很好得,一大一小组合即可。
  • n=k&n1 的分也很好得,输出 No 即可。
  • 对于 n 为偶数, nk 为奇数的情况,可以证明无解。

S 为每组数的和, k=2a , nk=2b+1 ,则 S=(2a(2b+1)+1)2a(2b+1)2×2a

化简得 S=(4ab+2a+1)(4ab+2a)4a

最后得出 S=4ab2+4ab+a+b+12

因此无法平均分配,则无解。

  • 之后就得到 25pts 的好成绩。
  • 对于 nm 都为奇数的情况,应该怎么办呢?(打表 qwq
  • 先看看 n=15k=5 的情况。
1 2 3 Sum
1 8 15 24
2 9 13 24
3 10 11 24
4 6 14 24
5 7 12 24
  • 再看看 n=15k=3 的情况。
1 2 3 4 5 Sum
1 5 9 15 10 40
2 6 7 14 11 40
3 4 8 13 12 40
  • 最后看看 n=45k=9 的情况。
1 2 3 4 5 Sum
1 14 27 45 28 115
2 15 25 44 29 115
3 16 23 43 30 115
4 17 21 42 31 115
5 18 19 41 32 115
6 10 26 40 33 115
7 11 24 39 34 115
8 12 22 38 35 115
9 13 20 37 36 115
  • 感觉打表找规律是最简单的(蒟蒻没有打表的时候怎么也没想明白)。
  • 也就是说,第一列从 1n 直接排。
  • 到第二列时定义 mid=k+12 ,之后小于 midi+k+mid1 ,大于 midi+mid1
  • 到第三列时,就可以根据前两列以及前三个数的和来求出了。
  • 再往后,就可以按照偶数的情况排列了!
  • 之后就愉快的 ACqwq

代码 🈶

#include<bits/stdc++.h>
//#define int long long
#define N (1000010)
#define I i
#define J j
#define itn int
#define Int int
#define sort stable_sort
using namespace std;
namespace IO
{
#define ll long long
const int MAX=1<<24;
char buf[MAX],*p1=buf,*p2=buf;
char obuf[MAX],*o=obuf;
#define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<24,stdin),p1==p2)?EOF:*p1++)
//template<typename T>
//inline T read()
inline int read()
{
int x=0;bool f=1;
char c=gc();
for(;c<48||c>57;c=gc())if(c=='-')f=0;
for(;c>=48&&c<=57;c=gc())x=(x<<3)+(x<<1)+(c^48);
return f?x:~x+1;
}
void print(ll x){if(x>9)print(x/10);*o++=(x%10)+'0';}
void pit(ll x){if(x<0)*o++='-',x=~x+1;print(x);}
void write(ll x,char ed){pit(x);*o++=ed;}
void flush(){fwrite(obuf,o-obuf,1,stdout);}
#undef ll
}
using IO::read;using IO::write;using IO::flush;using std::complex;
inline int min(int x,int y){return y&((y-x)>>31)|x&(~(y-x)>>31);}
inline int max(int x,int y){return x&((y-x)>>31)|y&(~(y-x)>>31);}
inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;}
long long n,m;
void init_set()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
}
int genshin_impact;
vector<signed>honkai_star_rail[1000010];
signed main()
{
init_set();
for(int t(read());t;--t)
{
n=read();m=read();
if(m==1)
{
*IO::o++='Y',*IO::o++='e',*IO::o++='s',*IO::o++='\n';
for(int i(1);i<=n;++i)write(i,' ');
*IO::o++='\n';
}
else if(n==m)*IO::o++='N',*IO::o++='o',*IO::o++='\n';
else if(!(n&1)&&((n/m)&1))*IO::o++='N',*IO::o++='o',*IO::o++='\n';
else
{
*IO::o++='Y',*IO::o++='e',*IO::o++='s',*IO::o++='\n';
if(!((n/m)&1))
for(int i(1);i<=(n>>1);++i)
{
write(i,' '),write(n-i+1,' ');
if(!(i%((n/m)>>1)))*IO::o++='\n';
}
else
{
int mid(m+1>>1);
genshin_impact=((m*3+1)>>1)*(m*3)/m;
for(int i(1);i<=m;++i)
honkai_star_rail[i].push_back(i);
for(int i(1);i<=m;++i)
if(i<=mid)
honkai_star_rail[i].push_back(m+(m>>1)+i);
else
honkai_star_rail[i].push_back((m>>1)+i);
for(int i(1);i<=m;++i)
honkai_star_rail[i].push_back(genshin_impact-honkai_star_rail[i][0]-honkai_star_rail[i][1]);
for(int j(1),cnt=(m*3);j<=m&&cnt<n;++j)
for(int i(1);i<=(n/m-3)>>1;++i)
honkai_star_rail[j].push_back(n-cnt+m*3),
honkai_star_rail[j].push_back(++cnt);
for(int i(1);i<=m;++i)
{
for(int j:honkai_star_rail[i])
write(j,' ');
*IO::o++='\n';
}
for(int i(1);i<=m;++i)
honkai_star_rail[i].clear();
}
}
}
flush();
return 0;
}

T3混凝土粉末

0pts

  • 小信未孚,神芙芙也——芙宁娜

题解 🈶

  • 用一个下标为询问时间的树状数组,用扫描线化简一维,用来维护混凝土实时高度。
  • 相当于让混凝土当前高度变成一维,只关注当前横坐标的历史高度,之后二分查找 🉑 使该坐标被覆盖的第一个时间,或者无解。
  • 时间复杂度 O(nlogqlogq)

代码 🈶

#include<bits/stdc++.h>
#define int long long
#define N (1000010)
#define I i
#define J j
#define raed read
#define reaD read
#define reAD read
#define rEAD read
#define READ read
#define REAd read
#define REad read
#define Read read
#define Reda read
#define redA read
#define reDA read
#define redA read
#define itn signed
#define Itn signed
#define ITN signed
#define Int signed
#define INT signed
#define foR for
#define fot for
#define foT for
#define sort stable_sort
using namespace std;
namespace IO
{
#define ll long long
const int MAX=1<<24;
char buf[MAX],*p1=buf,*p2=buf;
char obuf[MAX],*o=obuf;
#define gc()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<24,stdin),p1==p2)?EOF:*p1++)
//template<typename T>
//inline T read()
inline int read()
{
int x=0;bool f=1;
char c=gc();
for(;c<48||c>57;c=gc())if(c=='-')f=0;
for(;c>=48&&c<=57;c=gc())x=(x<<3)+(x<<1)+(c^48);
return f?x:~x+1;
}
void print(ll x){if(x>9)print(x/10);*o++=(x%10)+'0';}
void pit(ll x){if(x<0)*o++='-',x=~x+1;print(x);}
void write(ll x,char ed){pit(x);*o++=ed;}
void flush(){fwrite(obuf,o-obuf,1,stdout);}
#undef ll
}
using IO::read;using IO::write;using IO::flush;using std::complex;
inline int min(int x,int y){return y&((y-x)>>31)|x&(~(y-x)>>31);}
inline int max(int x,int y){return x&((y-x)>>31)|y&(~(y-x)>>31);}
inline void swap(int &x,int &y){int tmp=x;x=y;y=tmp;}
long long n,m;
void init_set()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
}
int tot,ans,x,y,z,l,r,v;
int c[2000010];
short honkai[2000010];
struct bb{int id,x;};
vector<bb>furina[2000010],fucaros[2000010];
int fontaine[2000010];
inline int lowbit(int x){return x&(~x+1);}
inline void add(int x,int v)
{for(;x<=m;x+=lowbit(x))c[x]+=v;}
int query(int x)
{
int ans=0;
for(;x;x-=lowbit(x))ans+=c[x];
return ans;
}
signed main()
{
init_set();
n=read(),m=read();
for(signed i(1);i<=m;++i)
{
honkai[i]=read(),l=read(),r=read();
if(honkai[i]==1)
v=read(),
furina[l].push_back({i,v}),//区间始
furina[r+1].push_back({i,~v+1});//区间终
//差分,修改只在区间内有效
else
fucaros[l].push_back({i,r});
//记录询问位置与时间。
}
for(signed i(1);i<=n;++i)
{
for(bb j:furina[i])add(j.id,j.x);//修改到树状数组中(长高或变矮)
for(bb j:fucaros[i])
{
l=1,r=j.id;//二分查找在这段时间内高度最早达到的时间(或者此时达不到)
fontaine[j.id]=0;//答案
//由于树状数组维护的是高度叠加的和,
//也就是位置 i 到时间 mid 为止所有历史高度,具有单调性,可以二分查找。
for(;l<=r;)
{
int mid((l+r)>>1);
if(query(mid)<j.x)l=mid+1;
else fontaine[j.id]=mid,r=mid-1;
}
}
}
for(signed i(1);i<=m;++i)
if(honkai[i]==2)
write(fontaine[i],'\n');
flush();
return 0;
}

T4排水系统

0pts

  • 小信未孚,神芙芙也——芙卡洛斯

题解 🈚

代码 🈚

posted @   minecraft114514  阅读(29)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示