TABLIC - Tablica

Tác giả: khuc_tuan

Ngôn ngữ: C++

#include <iostream>

#include <iomanip>

#include <fstream>

#include <set>

#include <map>

#include <queue>

#include <deque>

#include <stack>

#include <cmath>

#include <cstring>

#include <string>

#include <sstream>

#include <algorithm>

#include <functional>

#include <ctime>

#include <cstdio>

#include <cstdarg>



using namespace std;



#define Rep(i,n) for(int i=0;i<(n);++i)

#define For(i,a,b) for(int i=(a);i<=(b);++i)

#define Ford(i,a,b) for(int i=(a);i>=(b);--i)

#define Fit(i,v) for(__typeof(v.begin()) i=v.begin();i!=v.end();++i)

#define Fill(a,b) memset( (a), (b), sizeof(a))

#define pb push_back

#define MP make_pair

#define fi first

#define se second



typedef pair<int,int> PII;

typedef vector<int> VI;

typedef long long LL;



int nextInt() { int x; scanf("%d", &x); return x; }

#define ni nextInt()

int n,k;
vector<PII> step;

void process(PII ins,int &i,int &j){
	if(ins.fi>=0){
		if(i==ins.fi) j=(j+ins.se)%n;
	}
	else
		if(j==(-ins.fi-1)) i=(i+ins.se)%n;
}

int main() {
	n=ni,k=ni;

	Rep(tt,k){
		int res=0;
		int x=ni-1;
		int r=ni-1;
		int c=ni-1;
		int i=x/n;
		int j=x%n;
		Rep(k,step.size())process(step[k],i,j);
		if(j!=c) step.pb(MP(i,(c+n-j)%n)),res+=(c+n-j)%n;
		if(i!=r) step.pb(MP(-c-1,(r+n-i)%n)),res+=(r+n-i)%n;
		cout<<res<<endl;
	}
	return 0;
}

Download