NOI: 3528 최신 정수

3001 단어 NOI욕심
제목 링크:http://noi.openjudge.cn/ch0406/3528/
3528: 최신 정수
총 시간 제한: 
1000ms 
메모리 제한: 
65536kB
묘사 하 다.
10 진법 정수 n (0 < n < 100000000) 을 지정 합 니 다. 모든 숫자 는 0 이 아 닙 니 다.n 의 자릿수 는 m 이다.현재 m 비트 에서 k 비트 (0 예: n = 9128456, k = 2 를 삭제 하면 생 성 된 새 정 수 는 최소 12456 이다.
입력
첫 번 째 줄 t 는 t 조 데이터 가 있 음 을 나타 낸다.
다음 t 줄 은 각 줄 마다 테스트 데 이 터 를 표시 하고 각 조 의 테스트 데 이 터 는 두 개의 숫자 n, k 를 포함한다.
출력
t 줄, 줄 마다 하나의 숫자 는 n 에서 k 자 리 를 삭제 한 후에 얻 은 최소 정 수 를 나타 낸다.
샘플 입력
2
9128456 2
1444 3

샘플 출력
12456
1

#------------------------------------------------------------------------------#
이 문 제 는 먼저 생각 을 살 펴 보 자.
가장 큰 숫자 를 직접 삭제 하면 반 례 를 들 기 쉽다.
1529 1
가장 큰 9 를 직접 삭제 하면 152, 5 를 삭제 하면 129 로 5 를 삭제 하 는 것 이 최선 이다.
데이터 한 세트 더 보기:
141519 2
가장 큰 9, 5 를 지우 면 1411, 4, 5 를 지우 면 1119 로 4, 5 를 지 우 는 것 이 최선 이다.
뭐 발 견 했 어 요?
1 조 먼저 보기:
1  5  1  9
작은 것 과 큰 것 작은 것 과 큰 것
삭제 하 다 남기다
2 조:
1   4  1  5  1   9
작다 크다 작다 크다 작은 것 과 큰 것
남기다 삭제 하 다. 삭제 하 다 남기다
삭제 한 것 은 '산봉우리', 즉 뒤의 숫자 보다 큰 숫자 이 고 앞으로 갈수 록 '이다.
산.
봉우리
대체적인 사고방식 은 바로 한 마디 이다. 바로 앞 에 있 는 '산봉우리' 를 삭제 하 는 것 이다.
그리고 몇 개의 구 덩이 는 언급 하지 않 을 수 없다.
1. 선도 0 을 삭제 하 는 것 에 주의 하 세 요.
2. 하 나 를 지우 고 길 이 를 기억 하 는 len --.
3. 여러 그룹의 데이터 가 있 습 니 다.
4. 숫자 를 0 (데이터 4 참조) 으로 삭제 할 때 0 을 출력 해 야 합 니 다.
그리고 몇 조 의 데 이 터 를 드 리 겠 습 니 다.
   입력                      출력
133420 2                   120
1444 3                        1
20018 2                      1
10000 1                      0
여기까지 입 니 다. 코드 를 첨부 합 니 다.
[cpp]  view plain
 copy
#include  
#include  
char s[12];  
int main()  
{  
    int n;  
    scanf("%d",&n);  
    for(int q=0;q
    {  
        int k;  
        scanf("%s",s);  
        scanf("%d",&k);  
        int len=strlen(s);   
        while (k - -) / / k 가 0 일 때 k 비트 를 충분히 삭 제 했 음 을 나타 내 고 순환 을 뛰 어 넘 습 니 다.  
        {  
            for(int i=0;i
                if(s[i]>s[i+1])  
                {  
                    for(int j=i;j
                        s[j]=s[j+1];  
                    break; / / '산봉우리' 를 지우 고 break 를 기억 하 세 요. 그렇지 않 으 면... 직접 해 보 세 요.  
                }  
            len --; / / 하 나 를 지 운 이상 길 이 는 반드시 줄 여야 한다.  
        }  
        while (s [0] = = '0') / / 선도 0 삭제 (나 는 방법 이 멍청 하 니 신경 쓰 지 마)  
        {  
            for(int i=0;i
                s[i]=s[i+1];  
            len--;  
        }  
        if (s [0] = = 0) / / 처리 가 없 을 때 까지 삭 제 된 경우  
            printf("0");  
        else  
            printf("%s",s);  
    }  
    return 0;  
}

좋은 웹페이지 즐겨찾기