poj 1002 487 - 3279 (YSQ 참조)

4044 단어 mappoj
제목: n 개의 문자열 을 입력 하 십시오. 모든 문자열 은 '-' 밖 에 7 개의 문자 만 있 습 니 다. 모든 영문 자모 에 대응 하 는 맵 이 있 습 니 다. 입력 문자열 의 표준 전화번호 출현 횟수 가 1 이상 인 출력 * * Q 와 Z 는 나타 나 지 않 습 니 다. so map 가 없 으 면 맵 을 구축 하 십시오 ^ ^맵 으로 먼저 공식 을 설명 합 니 다 > o <: x = x * 10 + (c - 'A' - (c > 'Q') / 3 + 2 (c > 'Q') 는 bool 값 1 또는 0 을 되 돌려 줍 니 다. 따라서 알파벳 을 Q 로 입력 한 후 알파벳 이 한 자리 앞으로 이동 합 니 다.(c - 'A' - (c > 'Q') / 3 을 왜 3 으로 나 누 었 을 까 (⊙ o ⊙)?제목 의 세 글자 가 하나의 맵 (c - 'A' - (c > 'Q') 에 대응 하기 때문에 / 3 + 2 는 왜 + 2 를 해 야 합 니까? o < 맵 의 첫 번 째 숫자 는 2 이기 때 문 입 니 다.
#include<cstdio>
#include<map>
using namespace std;
map <int,int> s;
int main(){
    int n;
    scanf("%d",&n);
    char c;
    //     
    for(int i=1;i<=n;i++){//n     
        int x=0;//x       
        for(int cnt=1;cnt<=7;){//       7    
            scanf("%c",&c);
            if(c>='A'&&c<='Z'){//        ,     
                x=x*10+(c-'A'-(c>'Q'))/3+2;//(c>'Q)    bool(1or0)
                cnt++;  
            } 
            else if(c>='0'&&c<='9'){
                x=x*10+c-'0'; 
                cnt++;
            }

        } 
        s[x]++;//        +1 
    }
    bool visi=false;
    for(map<int,int>::iterator it=s.begin();it!=s.end();++it){//  it++     
        if(it->second>1){
            printf("%03d-%04d %d
"
,it->first/10000,it->first%10000,it->second); //%03d , 0 visi=true; } } if(visi==false) printf("No duplicates.
"
); return 0; }

좋은 웹페이지 즐겨찾기