1 solutions

  • 0
    @ 2025-11-5 15:30:49

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    struct p{
    	int s;
    	int w;
    	int h;
    }a[200001],b[200001],c[200001];
    int n,r,q;
    int cmp(const p & a,const p & b)
    {
    	if(a.s>b.s) return 1;
    	if(a.s<b.s) return 0;
    	if(a.h<b.h) return 1;
    	return 0;
    }
    void quick_read(int &num)
    {
    	char ch;
    	num=0;
    	ch=getchar();
    	while(ch<'!')
    	ch=getchar();
    	while(ch>='0'){
    		num=num*10+ch-48;
    		ch=getchar();
    	}
    	return;
    }
    int main()
    {
    	int i,j;
    	quick_read(n);
    	quick_read(r);
    	quick_read(q);
    	int z=2*n;
    	for(i=0;i<z;++i)
    	{
    		quick_read(a[i].s);
    		a[i].h=i+1;
    	}
    	for(i=0;i<z;++i)
    	quick_read(a[i].w);
    	
    	
    
    	sort(a,a+z,cmp);
    while(r--)
    {
    memset(c,-1,sizeof(c));
    memset(b,-1,sizeof(b));
    int k=0;
    int l=0;
    for(i=0;i<n;i++)
    {
    if(a[2*i].w>a[2*i+1].w )
    {
    a[2*i].s++;
    b[k++] = a[2*i];
    c[l++] = a[2*i+1];
    }
    else
    {
    a[2*i+1].s++;
    b[k++]=a[2*i+1];
    c[l++]=a[2*i];
    }
    }
    int tk = 0;
    int tl = 0;
    for(i=0;i<z;i++)
    {
    if(b[tk].s>c[tl].s)
    a[i]=b[tk++];
    else if( b[tk].s<c[tl].s)
    a[i]=c[tl++];
    else
    if(b[tk].h<c[tl].h )
    a[i]=b[tk++] ;
    else
    a[i]=c[tl++];
    }
    }
    cout<< a[q-1].h<<endl;
    
    return 0;
    }
    
    
    

    Pascal :

    program swiss;
    var
      n,m,r,q,i:longint;
      a,b,c:array[0..200000,1..3]of longint;
    
    procedure swap(var x,y:longint);
    var
      t:longint;
    begin
      t:=x;
      x:=y;
      y:=t;
    end;
    
    procedure qsort(l,r:longint);
    var
      i,j,m1,m2:longint;
    begin
      i:=l; j:=r;
      m1:=a[(i+j) div 2,2];
      m2:=a[(i+j) div 2,1];
      repeat
        while (a[i,2]>m1)or(a[i,2]=m1)and(a[i,1]<m2) do inc(i);
        while (a[j,2]<m1)or(a[j,2]=m1)and(a[j,1]>m2) do dec(j);
        if i<=j then
        begin
          swap(a[i,1],a[j,1]);
          swap(a[i,2],a[j,2]);
          swap(a[i,3],a[j,3]);
          inc(i);
          dec(j);
        end;
      until i>j;
      if l<j then qsort(l,j);
      if i<r then qsort(i,r);
    end;
    
    procedure compare;
    var
      i:longint;
    begin
      for i:=1 to n do
      if a[i*2-1,3]>a[i*2,3] then
      begin
        inc(a[i*2-1,2]);
        b[i,1]:=a[i*2-1,1];
        b[i,2]:=a[i*2-1,2];
        b[i,3]:=a[i*2-1,3];
        c[i,1]:=a[i*2,1];
        c[i,2]:=a[i*2,2];
        c[i,3]:=a[i*2,3];
      end
        else
        begin
          inc(a[i*2,2]);
          c[i,1]:=a[i*2-1,1];
          c[i,2]:=a[i*2-1,2];
          c[i,3]:=a[i*2-1,3];
          b[i,1]:=a[i*2,1];
          b[i,2]:=a[i*2,2];
          b[i,3]:=a[i*2,3];
        end;
    end;
    
    procedure hb;
    var
      i,j,k,p:longint;
    begin
      i:=1; j:=1; k:=1;
      while (i<=n)and(j<=n) do
      begin
        if (b[i,2]>c[j,2])or(b[i,2]=c[j,2])and(b[i,1]<c[j,1]) then
        begin
          a[k,1]:=b[i,1];
          a[k,2]:=b[i,2];
          a[k,3]:=b[i,3];
          inc(i);
        end
          else
          begin
            a[k,1]:=c[j,1];
            a[k,2]:=c[j,2];
            a[k,3]:=c[j,3];
            inc(j);
          end;
        inc(k);
      end;
    
      while j<=n do
      begin
        a[k,1]:=c[j,1];
        a[k,2]:=c[j,2];
        a[k,3]:=c[j,3];
        inc(j);
        inc(k);
      end;
          while i<=n do
          begin
            a[k,1]:=b[i,1];
            a[k,2]:=b[i,2];
            a[k,3]:=b[i,3];
            inc(i);
            inc(k);
          end;
    end;
    
    
    begin
      readln(n,r,q);
      m:=n*2;
      for i:=1 to m do
      begin
        a[i,1]:=i;
        read(a[i,2]);
      end;
      for i:=1 to m do
        read(a[i,3]);
    
      qsort(1,m);
    
      {for i:=1 to m do
      begin
        writeln(a[i,1],' ',a[i,2],' ',a[i,3]);
      end;  }
    
      for i:=1 to r do
      begin
        compare;
        hb;
      end;
      {for i:=1 to m do
        writeln(a[i,1],' ',a[i,2],' ',a[i,3])}
      writeln(a[q,1]);
    end.
    
    
    • 1

    Information

    ID
    16871
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By