1433. 数码问题

题目:https://jzoj.net/senior/#main/show/1433


这套比赛因为当时做的太差,所以这道刚刚一眼看出的题目也写一下吧。

完全不知道为什么当时我这题会爆0?

k<=1000,很明显的暴力也能过啊。

对于第i个数,如果知道了它的坐标,答案显然。

那么对于第i个数,我们就拿它去更新其它的与它同一行的,更新完同一行之后再更新同一列,就可以啦~


代码:

var
        x,r,c,xx,yy,t:array[1..1000] of longint;
        n,k,i,j,ans1,ans2:longint;
begin
        readln(n,k);
        for i:=1 to k do
        begin
                readln(x[i],r[i],c[i]);
                xx[i]:=(x[i]-1) div n+1;
                yy[i]:=(x[i]-1) mod n+1;
        end;

        for i:=1 to k do
        begin
                if yy[i]>c[i] then ans1:=c[i]+n-yy[i] else ans1:=c[i]-yy[i];
                if xx[i]>r[i] then ans2:=r[i]+n-xx[i] else ans2:=r[i]-xx[i];
                writeln(ans1+ans2);

                for j:=i+1 to k do
                        if xx[j]=xx[i] then yy[j]:=(yy[j]+ans1-1) mod n+1;
                for j:=i+1 to k do
                        if yy[j]=c[i] then xx[j]:=(xx[j]+ans2-1) mod n+1;
        end;
end.


难度:**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值