1.
# include <iostream>
# include <cstdio>
using namespace std;
int L, ans;
char a[2002][2002];
int cross(int x, int y) {
int length=1;
if(x<=1||x>=L)return 1;
for (int i=1;; i++) {
if(x-i<=0||x+i>=L+1) return length;
else if (a[x-i][y]!=a[x+i][y]) return length;
else length +=2;
}
}
int down(int x, int y) {
int length=1;
if(y<=1||y>=L) return 1;
for (int i=1;; i++) {
if(y-i<=0||y+i>=L+1)return length;
else if (a[x][y-i]!=a[x][y+i]) return length;
else length += 2;
}
}
int MAXN(int a, int b) {
if(a >= b) return a;
else return b;
}
int main() {
cin>>L;
for(int i=1; i<=L; i++)
for(int j=1; j<=L; j++)
cin>>a[i][j];
int x, y;
cin>>x>>y;
ans=MAXN(cross(x,y),down(x,y));
cout<<ans;
return 0;
}
判断题
1) 第35行若改成 MAXN(down(x,y), cross(x,y)),运行结果不变。()
2) 第34行输入值包含0时,程序可能会产生Runtime Error。( )
3) 程序输出的ans可能等于0。( )
4) 当第34行输入值x>y时,cross(x,y)返回值必然大于down(x,y)返回值。( )
选择题
5) 对于输入的L×L.的字符矩阵,ans值最大是( )。
6) 若输入L=5,x=y=3,aij={{abcba} , {bcdcb} ,{cdedc},{bcdcb},{abcba}},则输出是( )。
3.
#include <iostream>
using namespace std;
const int inf =0x3f3f3f3,N=4e5+5;
struct edge {
int to,nt ;
}E[N<<1];
int cnt, n,m,rt,MX;
int H[N],sz[N],mxs[N];
void add_edge(int u, int v) {
E[++cnt]=(edge) {v,H[u]};
H[u]=cnt;
}
void dfs(int u, int fa) {
sz[u]=1;
for (int e=H[u]; e; e=E[e].nt) {
int v=E[e].to;
if (v==fa) continue;
dfs(v,u);
sz[u]+=sz[v];
mxs[u]=max(mxs[u],sz[v]);
}
mxs[u] =max(mxs[u],n-sz[u]);
if (mxs[u]<mxs[rt])rt=u;
if (mxs[u]==mxs[rt] &&u<rt)rt=u;
}
int main() {
cin>>n,
rt =cnt= 0;
for (int i=1; i<=n; i++) {
int u,v;
cin>>u>>v;
add_edge(u,v);
add_edge(v,u);
}
mxs[0] = inf ;
dfs(1,0);
cout<<rt<<' '<<mxs[rt]<<'\n';
return 0;
}
判断题
1) 第33,34行只需保留任意一行也不会影响程序的正确性。()
2) 第37行函数调用dfs(x,y),只需保证1≤x≤n,y≤0即可。()
3) 第32行输入若有重复(重边),不影响输出结果的正确性。()
4) 程序运行结束时可能存在正整数i(i≤n)使sz[i]等于mxs[i]。()
选择题
5) n=6,二元组(u,v)各个值分别是{(1,3),(6.3),(2,6),(5,6),(3,4)},则输出是()。
6) 若n=1000,则程序运行后mxs[]数组中除初始值 inf 外,最大值是( )。