보위 안 (경 동 2017 가을 모집 진제)

3049 단어 알고리즘

, , B 。 , n , , B , 。
외적 침입 사건 이 발생 하면 산꼭대기 의 보 초 는 봉화 에 불 을 붙인다.만약 두 초소 가 있 는 산봉우리 사이 에 더 높 은 산봉우리 가 가 려 지지 않 고 둘 사이 에 연결 통로 가 있다 면 초 소 는 다른 산봉우리 의 봉화 연기 가 점화 되 었 는 지 관찰 할 수 있다.작은 산 이 고리 위 에 있 기 때문에 임의의 두 작은 산 사이 에 두 개의 서로 다른 연결 통로 가 존재 한다.위 와 같은 가 려 지지 않 는 조건 에서 한 산봉우리 위의 초소 에 불 을 붙 인 봉 연 은 적어도 한 통 로 를 통 해 다른 한 끝 에서 관찰 할 수 있다.임의의 인접 초소 에 대해 서 는 한쪽 초소 에서 불 이 붙 은 봉 연 기 를 발견 할 수 있 을 것 이다.
소 B 가 설계 한 이런 보위 방안 의 중요 한 특징 중 하 나 는 상대방 의 봉화 초소 의 수량 을 관측 할 수 있다 는 것 이다. 그녀 는 네가 그녀 를 도와 이 문 제 를 해결 할 수 있 기 를 바란다.
입력
입력 중 여러 그룹의 테스트 데이터 가 있 습 니 다.각 조 테스트 데이터 의 첫 번 째 행 위 는 하나의 정수 n (3 < = n < = 10 ^ 6) 으로 수도 주변의 작은 산 수량 이 고 두 번 째 행 위 는 n 개의 정수 로 작은 산 의 높이 h 를 순서대로 나타 낸다. (1 < = h < = 10 ^ 9).
출력
각 조 의 테스트 데 이 터 를 단독 줄 에서 서로 관찰 할 수 있 는 초소 의 대 수 를 출력 합 니 다.
샘플 입력
5 1 2 4 5 3
샘플 출력
7
 
나의 해답
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 
 * @author    
 * @email [email protected]
 * @describe      
 * @date 2018 9 9 
 *
 */
public class BaoWeiFangAn
{
	public static void main(String[] args)
	{
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext())
		{
			int n = scanner.nextInt();
			Map record = new HashMap<>();
			int[] mouns = new int[n];
			int result = 0;
			for(int i = 0 ; i= l)
					{
						str=j+""+(j+i-l+1);
					}
					else
					{
						str= (j+i+1)+""+j;
					}
					if(record.get(str) != null)continue;
					
					int sign = 0;	//             
					//        
					for(int k=i;k>0;k--)
					{
						if(mouns[j] >= getCenterMountain(mouns, j ,k) && getMountain(mouns,j,i) >= getCenterMountain(mouns, j ,k))
						{
							sign = 1;
						}
						else
						{
							sign = 0;
							k=0;
						}
					}
					if(sign==1)
					{
						int le = mouns.length;
						if(j+i+1 >= le)
						{
							record.put(j+""+(j+i-l+1), "1");
							System.out.println("     L"+j+""+(j+i-l+1));
							
						}
						else
						{
							record.put((j+i+1)+""+j, "1");
							System.out.println("     L"+(j+i+1)+""+j);
						}
						result++;
					}
					System.out.println(" "+j+"       ,   "+sign);
				}
			}
			System.out.println(result+n);
		}
	}
	
	//  ,    ,  
	//      
	public static int getMountain(int[] m, int np, int jj)
	{
		int length = m.length;
		if(np+jj+1 >= length)
		{
			return m[np+jj-length+1];
		}
		else
		{
			return m[np+jj+1];
		}
	}
	
	//       
	public static int getCenterMountain(int[] m, int np, int jj)
	{
		int length = m.length;
		if(np+jj >= length)
		{
			return m[np+jj-length];
		}
		else
		{
			return m[np+jj];
		}
	}
}

좋은 웹페이지 즐겨찾기