专栏文章
4.8错题总结
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipnz0v0
- 此快照首次捕获于
- 2025/12/03 15:06 3 个月前
- 此快照最后确认于
- 2025/12/03 15:06 3 个月前
T2(P1234 小 A 的口头禅)
考试思路:统计以a[i][j]为头能组成的"hehe"的数量
考试代码:
CPP#include<bits/stdc++.h>
using namespace std;
char a[1005][1005];
int n,m,ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j+3<=m)
{
if(a[i][j]=='h'&&a[i][j+1]=='e'&&a[i][j+2]=='h'&&a[i][j+3]=='e')
ans++;
}
if(j-3>=1)
{
if(a[i][j]=='e'&&a[i][j-1]=='h'&&a[i][j-2]=='e'&&a[i][j-3]=='h')
ans++;
}
if(i+3<=n)
{
if(a[i][j]=='h'&&a[i+1][j]=='e'&&a[i+2][j]=='h'&&a[i+3][j]=='e')
ans++;
}
if(i-3>=1)
{
if(a[i][j]=='e'&&a[i-1][j]=='h'&&a[i-2][j]=='e'&&a[i-3][j]=='h')
ans++;
}
}
}
cout<<ans<<'\n';
return 0;
}
错误原因:没考虑周全
正确思路:找到h就判断四个方向是否有"hehe",有多少个就加多少个
正确代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
char a[1005][1005];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='h')
{
if(a[i-1][j]=='e'&&a[i-2][j]=='h'&&a[i-3][j]=='e')
ans++;
if(a[i+1][j]=='e'&&a[i+2][j]=='h'&&a[i+3][j]=='e')
ans++;
if(a[i][j-1]=='e'&&a[i][j-2]=='h'&&a[i][j-3]=='e')
ans++;
if(a[i][j+1]=='e'&&a[i][j+2]=='h'&&a[i][j+3]=='e')
ans++;
}
}
}
cout<<ans;
return 0;
}
T5(P11380 [GESP202412 八级] 排队)
考试思路:把输出0的分拿了,再把结果小于1000000007,的分拿了
考试代码:
CPP#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
map<int,int>mp;
int n,m,ans=1;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
if(mp[u]==v||mp[v]==u)
{
cout<<0;
return 0;
}
mp[u]=v;
mp[v]=u;
}
for(int i=1;i<=n-m;i++)
{
ans*=i;
ans%=mod;
}
cout<<ans<<'\n';
return 0;
}
错误原因:没时间写了
正确思路:并查集
正确代码:
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+1,MOD=1e9+7;
int fa[N],l[N],r[N],n,m,ans=0,sum=1,F=0;
struct stu
{
int a1,a2,f;
}a[N];
int Father(int x)
{
if(fa[x]!=x)
return fa[x]=Father(fa[x]);
return x;
}
bool comp(stu b1,stu b2)
{
if(b1.a1==b2.a1&&b1.a2==b2.a2&&b1.f!=b2.f)
F=1;
if(b1.a1==b2.a1)
return b1.a2<b2.a2;
return b1.a1<b2.a1;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
fa[i]=i;
for(int i=1,x,y;i<=m;++i)
{
cin>>x>>y;
if(r[x]==y||l[y]==x)
continue;
if(r[x]||l[y]||Father(x)==Father(y))
{
cout<<"0";
return 0;
}
r[x]=y;
l[y]=x;
fa[Father(y)]=Father(x);
}
for(int i=1;i<=n;++i)
ans+=(Father(i)==i);
for(int i=1;i<=ans;++i)
sum=(sum*i)%MOD;
cout<<sum;
return 0;
}
T6(P1205 [USACO1.2] 方块转换 Transformations)
考试思路:每种都判断一遍
考试代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n;
char a[15][15],b[15][15],yq[15][15];
void xz()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=a[j][n-i+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
bool pd()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]!=yq[i][j])
return 1;
return 0;
}
void fz()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=a[i][n-j+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>yq[i][j];
if(pd()==0)
{
cout<<6;
return 0;
}
xz();
if(pd()==0)
{
cout<<3;
return 0;
}
xz();
if(pd()==0)
{
cout<<2;
return 0;
}
xz();
if(pd()==0)
{
cout<<1;
return 0;
}
xz();
fz();
if(pd()==0)
{
cout<<4;
return 0;
}
xz();
if(pd()==0)
{
cout<<5;
return 0;
}
xz();
if(pd()==0)
{
cout<<5;
return 0;
}
xz();
if(pd()==0)
{
cout<<5;
return 0;
}
cout<<7;
return 0;
}
错误原因:要按先后顺序来输出符合的
正确思路:按顺序判断一遍
正确代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n,mn=100;
char a[15][15],b[15][15],yq[15][15];
void xz()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=a[j][n-i+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
bool pd()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]!=yq[i][j])
return 1;
return 0;
}
void fz()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]=a[i][n-j+1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>yq[i][j];
xz();
if(pd()==0)
mn=min(mn,3);
xz();
if(pd()==0)
mn=min(mn,2);
xz();
if(pd()==0)
mn=min(mn,1);
xz();
fz();
if(pd()==0)
mn=min(mn,4);
xz();
if(pd()==0)
mn=min(mn,5);
xz();
if(pd()==0)
mn=min(mn,5);
xz();
if(pd()==0)
mn=min(mn,5);
xz();
fz();
if(pd()==0)
mn=min(mn,6);
if(mn==100)
cout<<7;
else
cout<<mn;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...