第一题
program crack; type node=record data:string; cost:longint; end; arr=array[1..50000] of node; var a:arr; n,m:longint; table:array[97..122] of integer=(4,2,5,6,1,4,5,6,7,2,3,4,8,9,3,1,2,6,8,9,2,6,3,2,5,7); procedure print; var i:longint; begin for i:=1 to m do writeln(a[i].data,' ',a[i].cost); end; function max(s1,s2:string):boolean; var i:longint; begin if length(s1)>length(s2) then exit(true) else if length(s1)<length(s2) then exit(false); for i:=1 to length(s1) do if ord(s1[i])>ord(s2[i]) then exit(true) else if ord(s1[i])<ord(s2[i]) then exit(false); exit(false); end; procedure qsort(l,r:longint); var i,j,k:longint; ks:string; temp:node; begin i:=l; j:=r; k:=a[random(r-l)+l].cost; ks:=a[random(r-l)+l].data; repeat while (k<a[i].cost) or ((k=a[i].cost) and (max(a[i].data,ks))) do inc(i); while (k>a[j].cost) or ((k=a[j].cost) and (max(ks,a[j].data))) do dec(j); if i<=j then begin temp.cost:=a[i].cost; a[i].cost:=a[j].cost; a[j].cost:=temp.cost; temp.data:=a[i].data; a[i].data:=a[j].data; a[j].data:=temp.data; inc(i); dec(j); end; until i>j; if i<r then qsort(i,r); if j>l then qsort(l,j); end; function cost(s:string):longint; var i:longint; begin cost:=0; for i:=1 to length(s) do inc(cost,table[ord(s[i])]); exit(cost); end; procedure init; var i:longint; begin readln(n,m); for i:=1 to n do begin readln(a[i].data); a[i].cost:=cost(a[i].data); end; end; begin assign(input,'crack.in'); reset(input); assign(output,'crack.out'); rewrite(output); init; qsort(1,n); print; close(input); close(output); end. |
第二题
Program contact; Const infile = 'contact.in'; outfile = 'contact.out'; Var a : Array[1..1001, 1..1001] Of longint; p : Array[1..1001] Of Record x, y : Longint; End; s, back : Array[1..1001] Of Longint; ans, anss, min, i, j, k, n, m, x, y : Longint; Begin Assign(input, infile); Reset(input); Readln(n); Inc(n); For i:=1 To n Do Begin For j:=1 To n Do Begin Read(a[i, j]); End; Readln; End; Readln(m); For i:=1 To m Do Begin Readln(x, y); a[x, y] := -1; a[y, x] := -1; End; For i:=1 To n Do s[i] := 1999999999; s[1] := 0; ans := 0; anss := 0; For i:=1 To n Do Begin min := 1999999999; For j:=1 To n Do If s[j] <> -2 Then Begin If s[j] < min Then Begin min := s[j]; k := j; End; End; s[k] := -2; If min > -1 Then Begin ans := ans + min; anss := anss + 1; p[anss].x := back[k]; p[anss].y := k; End; For j:=1 To n Do If s[j] > -2 Then Begin If a[k, j] < s[j] Then Begin s[j] := a[k, j]; back[j] := k; End; End; End; Assign(output, outfile); Rewrite(output); Writeln(ans); For i:=2 To anss Do Writeln(p[i].x, ' ', p[i].y); Close(output); End. |
第三题
var n,C,i,j:longint; x,w,b,t:array[0..10001]of longint; f:array[0..10001,0..400]of longint; procedure qsort(s,e:longint); var i,j,k,xx,bb:longint; begin i:=s; j:=e; k:=(s+e) shr 1; xx:=x[k]; x[k]:=x[s]; bb:=b[k]; b[k]:=b[s]; while i<j do begin while (i<j) and (x[j]>=xx) do dec(j); if i<j then begin x[i]:=x[j]; b[i]:=b[j]; inc(i); end; while (i<j) and (x[i]<=xx) do inc(i); if i<j then begin x[j]:=x[i]; b[j]:=b[i]; dec(j); end; end; x[i]:=xx; b[i]:=bb; if i-1>s then qsort(s,i-1); if j+1<e then qsort(j+1,e); end; procedure dfs(k,C:longint); var i,j,l:longint; begin if C<=0 then exit; for l:=t[k] to t[k+1]-1 do begin i:=b[l]; for j:=0 to C-1 do f[i,j]:=f[k,j]+w[i]; dfs(i,C-1); for j:=1 to C do if f[i,j-1]>f[k,j] then f[k,j]:=f[i,j-1]; end; end; begin assign(input,'charge.in'); reset(input); assign(output,'charge.out'); rewrite(output); readln(n,C); for i:=1 to n do begin readln(x[i],w[i]); b[i]:=i; end; qsort(1,n); t[0]:=1; for i:=1 to n do if t[x[i]]=0 then t[x[i]]:=i; t[n+1]:=n+1; for i:=n downto 1 do if t[i]=0 then t[i]:=t[i+1]; fillchar(f,sizeof(f),0); f[0,1]:=40000000; dfs(0,C); j:=0; for i:=0 to C do if f[0,i]>j then j:=f[0,i]; writeln(j); close(input); close(output); end. |
第四题
program switch; const num:array[0..15] of integer=(4,2,0,4,0,7,7,2,2,7,7,0,4,0,2,4); s:array[0..15,1..7] of integer=((0,1,4,5,0,0,0),(1,2,0,0,0,0,0),(0,0,0,0,0,0,0),(2,3,6,7,0,0,0), (0,0,0,0,0,0,0),(1,4,5,6,7,9,13),(2,4,5,6,7,10,14),(7,11,0,0,0,0,0), (4,8,0,0,0,0,0),(1,5,8,9,10,11,13),(2,6,8,9,10,11,14),(0,0,0,0,0,0,0), (8,9,12,13,0,0,0),(0,0,0,0,0,0,0),(13,14,0,0,0,0,0),(10,11,14,15,0,0,0)); ni:array[0..15] of boolean=(false,false,true,false,true,false,false,false, false,false,false,true,false,true,false,false); finish:array[0..15] of boolean=(false,false,false,false,false,true,true,false, false,true,true,false,false,false,false,false); six:array[0..15] of string[1]=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); two:array[0..3] of integer=(8,4,2,1); var ans:array[0..15,0..15,0..15,0..15] of string[16]; a,zqm:array[0..15] of boolean; p,p1,i,j,k,n:integer; t,b4:array[1..4] of integer; st:string[16]; ch:string; i0,i1,i3,i5,i6,i7,i8,i9,i10,i12,i14,i15:boolean; sum:longint; begin assign(input,'switch.in'); assign(output,'switch.out'); reset(input); rewrite(output); fillchar(a,sizeof(a),0); for i0:=false to true do for i1:=false to true do for i3:=false to true do for i5:=false to true do for i6:=false to true do for i7:=false to true do for i8:=false to true do for i9:=false to true do for i10:=false to true do for i12:=false to true do for i14:=false to true do for i15:=false to true do begin a[0]:=i0; a[1]:=i1; a[3]:=i3; a[5]:=i5; a[6]:=i6; a[7]:=i7; a[8]:=i8; a[9]:=i9; a[10]:=i10; a[12]:=i12; a[14]:=i14; a[15]:=i15; zqm:=finish; for p:=0 to 15 do if not ni[p] and a[p] then for k:=1 to num[p] do zqm[s[p,k]]:=not zqm[s[p,k]]; fillchar(t,sizeof(t),0); for p:=1 to 4 do for p1:=0 to 3 do if zqm[(p-1)*4+p1] then t[p]:=t[p]+two[p1]; st:=''; for p:=0 to 15 do if a[p] then st:=st+six[p]; ans[t[1],t[2],t[3],t[4]]:=st; end; readln(n); fillchar(b4,sizeof(b4),0); for j:=1 to n do begin readln(ch); for i:=1 to 4 do begin if ch[i] in ['A'..'F'] then b4[i]:=ord(ch[i])-55 else b4[i]:=ord(ch[i])-48; end; writeln(ans[b4[1],b4[2],b4[3],b4[4]]); end; close(input); close(output); end. |
为什么不直接将标程\数据一起发呢
@xx:数据好的时候标程还没好。
ceeji大牛,我想问一下,linux下有没有什么好的测评软件? 还有你有gtalk么?能不能聊聊?
@xx:我有gtalk,hi.ceeji # gmail
@ceeji:加了,可你是offline 🙁