用户:Shmetrofans

来自中国分布式计算总站
Shmetrofans讨论 | 贡献2013年6月2日 (日) 14:40的版本 →‎shmetrofans
跳转到导航 跳转到搜索

shmetrofans

OIer——Shmetrofans提醒您
2013年即将举行NOI 2013,期待您的关注!
如果你希望有更深入的了解,维基百科有一个主题关于:User:ThomasElements

NOIP 2012 解题报告

质因数分解

<source lang="text"> program prime; var

i,n,k,ans:longint;

begin

assign(input,'prime.in');
reset(input);
assign(output,'prime.out');
rewrite(output);
read(input,n);
i:=3;
if n mod 2=0 then i:=2
else while n mod i<>0 do i:=i+2;
write(output,n div i);
close(input);
close(output);

end. </source>

寻宝

<source lang="text"> program treasure; var

f,p:array [1..10005,0..105] of longint;
n,m,i,j,k,start,ans:longint;

function getpos(c,x,k:longint):longint; var

i,j,all:longint;

begin

all:=0;
for i:= 0 to m-1 do
 if f[c,i]=1 then inc(all);
k:= k mod all;
if k=0 then k:=all;
j:=0;
i:=x;
while true do
 begin
  if f[c,i]=1 then inc(j);
  if j=k then exit(i);
  i:= (i+1) mod m;
 end;

end; begin

assign(input,'treasure.in');
reset(input);
assign(output,'treasure.out');
rewrite(output);
readln(input,n,m);
for i:= 1 to n do
 for j:= 0 to m-1 do
  readln(f[i,j],p[i,j]);
read(input,start);
ans:=0;
for i:=1 to n do
 begin
  ans:=(ans+p[i,start]) mod 20123;
  start:=getpos(i,start,p[i,start]);
 end;
write(output,ans);
close(input);
close(output);

end. </source>

摆花

<source lang="text"> program flower; var

f:array[0..105,0..105] of longint;
n,m,k,c,i,j:longint;

begin

assign(input,'flower.in');
reset(input);
assign(output,'flower.out');
rewrite(output);
readln(input,n,m);
fillchar(f,sizeof(f),0);
f[0,0]:=1;
for i:= 1 to n do
 begin
  read(k);
  for j:= 0 to k do
   for c:= 0 to m do
    begin
     if c<j then continue;
     f[i,c]:=(f[i,c]+f[i-1,c-j]) mod 1000007;
    end;
 end;
write(output,f[n,m]);
close(input);
close(output);

end. </source>

文化之旅

<source lang="text"> program culture; type

edge= record
p,cost,next:longint;
end;

var

e:array[1..20005] of edge;
n,k,m,s,t:longint;
dist,wh,map:array[1..105] of longint;
f:array[1..100,1..100]  of longint;
vist:array[1..100] of boolean;
eq:array[1..100] of longint;
h,r,count,now,next,p:longint;
i,j,all,x,y,z:longint;
atk:array[1..100,1..100] of longint;
flag:boolean;

procedure insert(x,y,c:longint); begin

all:=all+1;
e[all].p:=y;
e[all].next:=map[x];
e[all].cost:=c;
map[x]:=all;

end; function find(k,x:longint):longint; begin

if f[k,x]=x then exit(x);
exit(find(k,f[k,x]));

end; procedure union(k,x,y:longint); var

a,b:longint;

begin

a:=find(k,x);
b:=find(k,y);
if a<>b then f[a]:=f[b];

end; begin

assign(input,'culture.in');
reset(input);
assign(output,'culture.out');
rewrite(output);
readln(input,n,k,m,s,t);
for i:= 1 to n do read(input,wh[i]);
readln(input);
for i:= 1 to k do
 begin
  for j:= 1 to k do read(input,atk[i,j]);
  readln(input);
 end;
all:=0;
fillchar(map,sizeof(map),0);
for i:= 1 to m do
 begin
  readln(x,y,z);
  insert(x,y,z);
  insert(y,x,z);
 end;
for i:= 1 to k do f[s,i]:=i;
fillchar(dist,sizeof(dist),$1f);
dist[s]:=0;
fillchar(vist,sizeof(vist),false);
h:=1;
r:=1;
count:=1;
eq[1]:=s;
vist[s]:=true;
while count<>0 do
 begin
  now:=eq[h];
  h:=h+1;
  if h>n then h:=1;
  count:=count-1;
  vist[now]:=false;
  next:=map[now];
  while next<>0 do
   begin
    p:=e[next].p;
    flag:=true;
    for i:= 1 to k do
     if atk[wh[p],i]=1 then
      if find(now,wh[i]) = find(now,wh[s]) then
       begin
        flag:=false;
        break;
       end;
    if flag then
     begin
      if dist[p]>dist[now]+e[next].cost then
       begin
        dist[p]:=dist[now]+e[next].cost;
        f[p]:=f[now];
        union(p,wh[s],wh[p]);
        if not vist[p] then
         begin
          inc(r);
          if r>n then r:=1;
          count:=count+1;
          eq[r]:=p;
          vist[p]:=true;
         end;
       end;
     end;
    next:=e[next].next;
   end;
 end;
if dist[t]=522133279 then write(-1)
else write(output,dist[t]);
close(input);
close(output);

end. </source>