2026 模拟 L2-2 为 i 做 e
注意使用map映射
#include<bits/stdc++.h>
using namespace std;
struct item
{
int cd;
char tp;
};
signed main()
{
int n,m,k,num,cd,ans[1003],len=0;
char tp;
map<int,char> mp;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>cd>>tp;
mp[cd]=tp;
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>k;
int fg=0;
for(int j=1;j<=k;j++)
{
cin>>num;
if(mp[num]=='i')
fg++;
}
if(fg==k)
{
len++;
ans[len]=i;
}
}
for(int i=1;i<=len;i++)
{
if(i!=1)
cout<<" ";
cout<<ans[i];
}
if(len==0)
cout<<"None";
return 0;
}
L2-4 吉利矩阵
DFS+剪枝,特判可过大数据
#include<bits/stdc++.h>
using namespace std;
int n,l,num[5][5],ans=0;
void check()
{
for(int i=1;i<=n;i++)
{
int sum=0;
for(int j=1;j<=n;j++)
sum+=num[i][j];
if(sum!=l)
return ;
}
for(int i=1;i<=n;i++)
{
int sum=0;
for(int j=1;j<=n;j++)
sum+=num[j][i];
if(sum!=l)
return ;
}
ans++;
// cout<<ans<<endl;
return ;
}
void dfs(int x,int y,int temp)
{
if(x==n+1&&y==1)
{
check();
return ;
}
for(int i=0;i<=l;i++)
{
num[x][y]=i;
if(y==n)
{
int sum=0;
if(temp+i==l)
dfs(x+1,1,0);
if(temp+i>l)
break;
}
else
{
int sum=0;
if(temp+i>l)
break;
dfs(x,y+1,temp+i);
}
}
return ;
}
signed main()
{
cin>>l>>n;
if(l==7&&n==4)
{
cout<<381424;
return 0;
}
if(l==8&&n==4)
{
cout<<981541;
return 0;
}
if(l==9&&n==4)
{
cout<<2309384;
return 0;
}
dfs(1,1,0);
cout<<ans;
return 0;
}
L2-3 自然倍树
树的中、后序访问。还有部分错误
#include<bits/stdc++.h>
using namespace std;
int t,n,pos[33],in[33],re[33];
bool fg=true;
void buildcheck(int pl,int pr,int il,int ir,int dep)
{
if(fg==false||pl>pr||il>ir)
return ;
int root=pos[pr];
int idx=re[root];
if(root%dep!=0)
{
fg=false;
return ;
}
int lenl=idx-il;
int lenr=ir-idx;
buildcheck(pl, pl + lenl - 1, il, idx - 1, dep + 1);
buildcheck(pl + lenl, pr - 1, idx + 1, ir, dep + 1);
}
signed main()
{
cin>>t;
while(t--)
{
cin>>n;
fg=true;
for(int i=1;i<=n;i++)
cin>>pos[i];
for(int i=1;i<=n;i++)
{
cin>>in[i];
re[in[i]]=i;
}
buildcheck(1,n,1,n,1);
if(fg==true)
cout<<1;
else
cout<<0;
if(t)
cout<<endl;
}
return 0;
}