SDNU 1206.개미 감기[코드가 이렇게 간단해, 사고연습] [7월 29]

2124 단어 코드SDNU1206
개미 감기

Description


길이 100센티미터의 가늘고 곧은 막대기에 n마리의 개미가 있다.그것들의 머리는 어떤 것은 왼쪽을 향하고 어떤 것은 오른쪽을 향한다.개미 한 마리는 초속 1센티미터로 장대를 따라 앞으로 기어갈 수밖에 없다.개미 두 마리가 마주치면 동시에 고개를 돌려 반대 방향으로 기어간다.이 개미 중 한 마리가 감기에 걸렸다.그리고 다른 개미와 마주칠 때 감기를 부딪힌 개미에게 전염시킨다.모든 개미가 장대에서 기어올랐을 때 얼마나 많은 개미가 감기에 걸렸는지 계산해 보세요.

Input


첫 번째 행에는 개미의 총 수를 나타내는 정수 n(1 < n < 50)을 입력합니다.
이어진 행은 n개의 공백으로 나누어진 정수 Xi(-100 < Xi < 100)로, Xi의 절대값은 개미가 막대기의 왼쪽 끝을 떠나는 거리를 나타낸다.양수 값은 머리가 오른쪽을 향하고 음수 값은 머리가 왼쪽을 향하는 것을 의미하며 데이터에 0이 나타나지 않고 두 마리의 개미가 같은 위치를 차지하지 않는다.그중 첫 번째 데이터는 개미가 감기에 걸렸다는 것을 대표한다.

Output


마지막 감기 개미의 수를 나타내는 정수 1개를 출력해 달라고 한다.

Sample Input

3
5 -2 8

Sample Output

1

생각이 없는 거 아니야?처음 이 문제를 푸니 확실히 생각이 없다.그러나 유여가의 훈련 지침은 개미에서 두 개미가 머리를 맞대고 방향을 바꾸어 계속 기어오르는 것이 멀리서 보면 서로 지나가는 것 같다고 언급했다.이렇게 생각하면 간단하다.감기에 걸린 개미가 왼쪽에서 얼마나 오른쪽으로 기어가는지, 오른쪽에서 얼마나 왼쪽으로 기어가는지 판단하는 것을 더하면 답이다.그 자체도 감기에 걸린 개미라는 것을 절대 잊지 마라.코드는 다음과 같습니다.
#include<cstdio>
int main(){
    int n,x,f[110]={0},t,sum=1;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        if(i==0) x>0?t=x:t=-x;
        x>0?f[x]=1:f[-x]=-1;
    }
    for(int i=0;i<t;i++)
        if(f[i]==1)
        sum++;
    for(int i=t+1;i<110;i++)
        if(f[i]==-1)
        sum++;
    printf("%d
",sum); return 0; }

좋은 웹페이지 즐겨찾기