普及练习场之交叉模拟

前言:不要被标题所迷惑!也不要被我的话所迷惑!

P1023 税收与补贴问题
请点击:税收与补贴问题题解

P1031 均分纸牌
总:这个……真的是模拟了。

var
  n,i,s,ans:longint;
  a:array [1..10001] of longint;
begin
  readln(n); s:=0;
  for i:=1 to n do
   begin
    read(a[i]);
    s:=s+a[i];
   end;
  s:=s div n;
  ans:=0;
  if a[1]<>s then begin if a[1]<s then begin a[2]:=a[2]-(s-a[1]); a[1]:=s; end else begin a[2]:=a[2]+(a[1]-s); a[1]:=s; end; inc(ans); end;
  if a[n]<>s then begin if a[n]<s then begin a[n-1]:=a[n-1]-(s-a[n]); a[n]:=s; end else begin a[n-1]:=a[n-1]+(a[n]-s); a[n]:=s; end; inc(ans); end;
  for i:=2 to n-1 do       
   begin
    if a[i]<>s then begin if a[i]<s then begin a[i+1]:=a[i+1]-(s-a[i]); a[i]:=s; end else begin a[i+1]:=a[i+1]+(a[i]-s); a[i]:=s; end; inc(ans); end;
   end;
  write(ans);
end.

P1042 乒乓球
总:怀念小学,那时用字符串写,坑了我啊(忘了怎么坑的)。
这题……又是模拟。

var
  a:array [1..1000001] of char;
  i,j,k,n,w,l,w1,l1:longint;
begin
  repeat
    i:=i+1;
    read(a[i]);
  until a[i]='E';
  i:=0;
  repeat
    i:=i+1;
    if (a[i]='W') or (a[i]='L') then
      begin
        if a[i]='W' then inc(w)
                    else inc(l);
        if ((w>=11) or (l>=11)) and (abs(w-l)>=2) then
          begin
            writeln(w,':',l);
            w:=0; l:=0;
          end;
      end;
  until a[i]='E';
  writeln(w,':',l);
  writeln;
  i:=0; w:=0; l:=0;
  repeat
    i:=i+1;
    if (a[i]='W') or (a[i]='L') then
      begin
        if a[i]='W' then inc(w)
                    else inc(l);
        if ((w>=21) or (l>=21)) and (abs(w-l)>=2) then
          begin
            writeln(w,':',l);
            w:=0; l:=0;
          end;
      end;
  until a[i]='E';
  write(w,':',l);
end.

P1086 花生采摘
总:贪心策略,先拿大的。

var
  m,n,k,nm,ans:longint;
  x,y,a:array [0..401] of longint;
procedure init;
var
  i,j,o:longint;
begin
  readln(m,n,k);
  for i:=1 to m do
    for j:=1 to n do
      begin
        read(o);
        if o>0 then
          begin
            inc(nm);
            x[nm]:=i; y[nm]:=j;
            a[nm]:=o;
          end;
      end;
end;

procedure pd;
var
  i,j,t:longint;
begin
  for i:=1 to nm do
    for j:=1 to nm do
      if a[i]>a[j] then
        begin
          t:=a[i]; a[i]:=a[j]; a[j]:=t;
          t:=x[i]; x[i]:=x[j]; x[j]:=t;
          t:=y[i]; y[i]:=y[j]; y[j]:=t;
        end;
end;

procedure main;
var
  i:longint;
begin
  ans:=0; y[0]:=y[1];
  if k<>0 then
    for i:=0 to nm do
      if k>=abs(x[i]-x[i+1])+abs(y[i]-y[i+1])+1+x[i+1] then
        begin
          k:=k-abs(x[i]-x[i+1])-abs(y[i]-y[i+1])-1;
          ans:=ans+a[i+1]
        end else break;
  write(ans);
end;

begin
  init;
  pd;
  main;
end.

P1098 字符串的展开
总:就是判断输出啊。

var
  s,s1,s2:ansistring;
  i,j,n,m,x,y,z:longint;

procedure hjy(o:longint);
var
  i,j:longint;
begin
  s1:=''; s2:='';
  if ord(s[o-1])>=ord(s[o+1]) then exit;
  if ord(s[o-1])+1=ord(s[o+1]) then
    begin
      delete(s,o,1);
      exit;
    end;
  for i:=ord(s[o-1])+1 to ord(s[o+1])-1 do
    for j:=1 to y do
      s1:=s1+chr(i);
  if x=2 then
    for i:=1 to length(s1) do
      if (s1[i]>='a') and (s1[i]<='z') then s1[i]:=chr(ord(s1[i])-32);
  if x=3 then
    for i:=1 to length(s1) do
      s1[i]:='*';
  if z=2 then
    begin
      for i:=1 to length(s1) do
      s2:=s2+s1[length(s1)-i+1];
      s1:=s2;
    end;
  delete(s,o,1); insert(s1,s,o);
end;

begin
  readln(x,y,z);
  readln(s);
  n:=length(s);
  i:=2; s:=s+'+';
  while s[i]<>'+' do
    begin
      if (s[i-1]<>'-') and (s[i+1]<>'-') then  
        if (s[i]='-') and (((ord(s[i-1])>=97) and (ord(s[i+1])>=97)) or ((ord(s[i-1])<=57) and (ord(s[i+1])<=57))) then
           hjy(i);
      inc(i);
    end;
  delete(s,length(s),1);
  writeln(s);
end.
posted @ 2017-02-04 19:02  猪都哭了  阅读(232)  评论(0)    收藏  举报