"실 용 데이터 구조"

map+vector
UVA11991 Easy Problem from Rujia Liu?
대의: 왼쪽 에서 오른쪽 k 번 째 x 에 나타 난 다음 표 i 응용 map < int, vector < int > a;
int main(){
    a.clear(); //  a     
    if(a.count(x)==0) //  a  (int)x   vector    
    a[x]=vector(); // a  (int)x  create      
    a[x].push_back(n); // a[x]        ,       
    a[x].size() // a[x]        ,     
    printf("%d",a[x][n]); // a        
}

지식의 빈틈:
  • vector 아래 표 시 는 0 부터 시작 합 니 다.
  • map 맵 맵, vector 동적 배열.

  • UVA1203 Argus
    중점
  • priority_queue 대기 열 사용자 정의 우선 순위
  • struct node{
        int Num,Period,Time;
        bool operator < (const node & a) const {
            return Time > a.Time || (Time == a.Time && Num >a.Num);
        }// Time      Time   num    。
    };
    

    UVA11997 K Smallest Sums
    부주의n 개의 배열 은 n 개의 숫자 가 있 고 각 배열 은 하나의 숫자 를 선택 하여 가장 작은 n 개의 합 을 구한다.
    시험 장소
  • 다 중 병합
  • 제 이 해 는 매번 두 개의 배열 을 합 쳐 가장 작은 두 개의 숫자 와 s 를 첫 번 째 배열 에 넣 는 것 입 니 다.
  • 이원 조 (s, b), 현재 a [a] + b [b], b 의 아래 표 시 된 b, 다음 s (s') = (A [a] + B [b]) - B [b] + B [b + 1] = s - B [b] + B [b + 1]. 시간 복잡 도 (nlogn);
  • code
    void merge(int *A,int *B,int *C) {
       priority_queueq;
       for (int i = 1;i <= n;++i)q.push(node(A[i]+B[1],1));
       for (int i = 1;i <= n;++i)
       {   
           node x = q.top();q.pop();
           C[i] = x.s; int b = x.b;
           if(b  <  n)q.push(node(x.s - B[b] + B[b+1],b+1));
       }
     }
     int main() {
    for (int i = 1;i <= n;++i){
         for(int j = 1;j <= n;++j)
           scanf("%d",&a[i][j]);
           sort(a[i]+1,a[i]+1+n);
          if(i >= 2) merge(a[1],a[i],a[1]);
         }
      }
    

    좋은 웹페이지 즐겨찾기