#P2039. 计算机笔试复习题.10

计算机笔试复习题.10

(4)连续区间

现有 n 个整数,每个整数用 aia_i 表示(1ain1 \le a_i \le n)。现希望找出连续的一段区间,要求区间内不能出现重复数字。求符合要求的区间的最大长度。

#include<bits/stdc++.h>
using namespace std;
int n, a[100001], m=-1, b[1000001];
int main()
{
	cin>>n;
	for(int i=1; i<=n; i++)
		scanf("%d",&a[i]);
	for(int 填空(1) ; R<=n; 填空(2))
	{
		填空(3);
		while(填空(4))
		{
			b[a[L]]--;
			L++;			
		}
		m=max(m,填空(5));
	}
	cout<<m;
	return 0;	
}
  1. 填空(1) 处应填{{ select(1) }}
  • L=0, R=0
  • L=0, R=1
  • L=1, R=0
  • L=1, R=1
  1. 填空(2) 处应填{{ select(2) }}
  • L++
  • R++
  • L++,R++
  • 不填
  1. 填空(3) 处应填{{ select(3) }}
  • b[a[R]]++
  • a[R]++
  • b[a[L]]++
  • a[L]++
  1. 填空(4) 处应填{{ select(4) }}
  • a[R]>1
  • b[a[R]]>1
  • a[L]>1
  • b[a[L]]>1
  1. 填空(5) 处应填{{ select(5) }}
  • b[a[R]]
  • b[a[L]]
  • R-L
  • R-L+1

(5)风景点

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
填空(1) a[1001][1001];
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++)
		{
			bool book=true;
			if( 填空(2) )
			{
				for(int k=1;k<=填空(3) ;k++)
					if( 填空(4) != '.') book=false;
				for(int k=1;k<=n;k++)
					if(a[k][j] != '.') book=false;
				if(填空(5)) ans++;
			}
		}
	cout<<ans;
	return 0;	
}

给出 N 行 M 列的二维格子, 每个格子要么是 '#' ,要么是 '.' 。 一个格子是“ 风景点” ,它同时满足如下两个条件:1、 该格子是‘ .’;2、 该格子的上、 下、 左、 右, 四个方向整条线全部都是‘ .’(该点处于边缘的话可以忽略该点没有的方向,如点在左边缘只需考虑上、下、右三个方向) 。你的任务是统计总共有多少个“ 风景点” 。

  1. 填空(1) 处应填{{ select(6) }}
  • int
  • long long
  • char
  • string
  1. 填空(2) 处应填{{ select(7) }}
  • a[i][j]=='.'
  • a[i][j]=='#'
  • a[i][j]==1
  • a[i][j]==0
  1. 填空(3) 处应填{{ select(8) }}
  • i
  • j
  • n
  • m
  1. 填空(4) 处应填{{ select(9) }}
  • a[i][k]
  • a[j][k]
  • a[k][i]
  • a[k][j]
  1. 填空(5) 处应填{{ select(10) }}
  • a[i][j]=='.'
  • a[i][j]=='#'
  • book==true
  • book==false