首页 > 代码库 > Codeforces Round #261 (Div. 2)

Codeforces Round #261 (Div. 2)

A. Pashmak and Garden

题意:给你两个正方形的顶点坐标,让你求出另两个顶点的坐标

题解:分情况讨论即可

代码:

 1 var x1,x2,y1,y2:longint; 2 begin 3   readln(x1,y1,x2,y2); 4   if x1=x2 then writeln(x1+abs(y2-y1), ,y1, ,x1+abs(y2-y1), ,y2) 5   else if y1=y2 then writeln(x1, ,y1+abs(x1-x2), ,x2, ,y1+abs(x1-x2)) 6   else 7    begin 8      if abs(x1-x2)<>abs(y1-y2) then writeln(-1) 9      else writeln(x1, ,y2, ,x2, ,y1);10    end;11 end.        
View Code

B. Pashmak and Flowers

题意:给你一个数列,如果从中选2个数,那么这两个数最大差值为多少?有多少种取法可以取到这个最大值?n (2 ≤ n ≤ 2·105).

题解:考场上扫了一遍数列,记录了4个临时变量mx,mi,w1,w2分别表示当前遇到的最大值,最小值,最大值有几个,最小值有几个

        因为没处理好边界,就是刚开始的2个,结果fst了。。。也可以排一下序,直接输出a[n]-a[1],并且把最大值的个数*最小值的个数输出即可

 1 var n,x,y,w1,w2,t,mx,mi:int64; 2     i:longint; 3 begin 4   readln(n); 5   mx:=-1;mi:=1000000000; 6   for i:=1 to n do 7    begin 8      read(x); 9      if x>mx then begin mx:=x;w2:=1;end10      else if x=mx then inc(w2);11      if x<mi then begin mi:=x;w1:=1;end12      else if x=mi then inc(w1);13    end;14   if mx-mi<>0 then writeln(mx-mi, ,w1*w2)15   else writeln(0, ,n*(n-1)>>1);16 end.          
View Code

D. Pashmak and Parmida‘s problem

题意:给你一个数列,定义f(l,r,ax)为 满足 l<=k<=r 并且 a[k]=x 的数量,求这个数列中有多少个二元组i,j是的 i<j 并且满足 f(1,i,a[i])>f(j,n,a[j])  n<=10^6  a[i]<=10^9

题解:因为数很大,数的个数很少,我们可以离散化,这样我们就可以类似桶排从前往后和从后往前各扫一遍求出 f(1,i,a[i])和f(j,n,a[j])

        然后有限制条件 i<j,所以我们使用树状数组求前缀和  从后往前扫 扫到 j 的时候 j之后的g[j]都加上了,我们求 f[i-1]-1的前缀和就是i 对答案的贡献

代码:

 1 const maxn=1000000+100; 2 var a,b,rk,s,f,g,ss:array[0..maxn] of int64; 3     i,n,tot:longint; 4     ans:int64; 5 procedure sort(l,r:longint); 6  var i,j,x,y:longint; 7  begin 8  i:=l;j:=r;x:=a[(i+j)>>1]; 9  repeat10   while a[i]<x do inc(i);11   while a[j]>x do dec(j);12   if i<=j then13    begin14    y:=a[i];a[i]:=a[j];a[j]:=y;15    y:=rk[i];rk[i]:=rk[j];rk[j]:=y;16    inc(i);dec(j);17    end;18  until i>j;19  if i<r then sort(i,r);20  if j>l then sort(l,j);21  end;22 procedure init;23  begin24    readln(n);25    for i:=1 to n do begin read(a[i]);rk[i]:=i;end;26    sort(1,n);27  end;28 procedure add(x:longint);29  begin30  while x<=n do31   begin32    inc(ss[x]);33    inc(x,x and (-x));34   end;35  end;36 function sum(x:longint):int64;37 var t:longint;38  begin39  t:=0;40  while x>0 do41    begin42     inc(t,ss[x]);43     dec(x,x and (-x));44    end;45  exit(t);46  end;47 procedure main;48  begin49    tot:=0;50    for i:=1 to n do51     begin52       if (i=1) or (a[i]<>a[i-1]) then inc(tot);53       b[rk[i]]:=tot;54     end;55    fillchar(s,sizeof(s),0);56    for i:=1 to n do57     begin58       inc(s[b[i]]);59       f[i]:=s[b[i]];60     end;61    fillchar(s,sizeof(s),0);62    for i:=n downto 1 do63     begin64       inc(s[b[i]]);65       g[i]:=s[b[i]];66     end;67    ans:=0;68    //for i:=1 to n do writeln(f[i], ,g[i]);69    for i:=n downto 2 do70     begin71       add(g[i]);inc(ans,sum(f[i-1]-1));//writeln(f[i-1]-1, ,sum(f[i-1]-1));72     end;73    writeln(ans);74  end;75 76 begin77   init;78   main;79 end.  
View Code

C. Pashmak and Buses

题意:有k辆车,有n个学生,问能否给这n个学生安排d天坐车,是的没有两个同学d天都在同一辆车上。 n, k, d (1 ≤ n, d ≤ 1000; 1 ≤ k ≤ 109).

不会捉。。。

E. Pashmak and Graph

题意:n个点,m条边的无向图,请你找出一条最长的路径(可以有环),使的这条路径上的边权严格递增nm (2 ≤ n ≤ 3·105; 1 ≤ m ≤ min(n·(n - 1), 3·105))

不会捉。。。