loj 3236 [POI2019 R1] Uk?ad scalony

Posted ljzalc1022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj 3236 [POI2019 R1] Uk?ad scalony相关的知识,希望对你有一定的参考价值。

loj 3236 [POI2019 R1] Uk?ad scalony

https://loj.ac/problem/3236

https://loj.ac/submission/747558

技术图片

技术图片

Tutorial

技术图片

考虑一种特殊情况 (n,m) 均为偶数且 (k) 较小的情况.

技术图片

(n,m) 均为偶数时,合法的 (k in [n+m-1, nm-1])

(n,m) 不均为偶数时,合法的 (k in [n+m-2,nm-1])

Code

#include <cstdio>
#include <iostream>
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
inline char nc()
{
	return getchar();
	static char buf[100000],*l=buf,*r=buf;
	return l==r&&(r=(l=buf)+fread(buf,1,100000,stdin),l==r)?EOF:*l++;
}
template<class T> void read(T &x)
{
	x=0; int f=1,ch=nc();
	while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=nc();}
	while(ch>=‘0‘&&ch<=‘9‘){x=x*10-‘0‘+ch;ch=nc();}
	x*=f;
}
const int maxn=1000+5;
const int maxm=1000+5;
int n,m,k;
bool f;
bool vis[maxn][maxm];
inline void adde(int a,int b,int c,int d)
{
//	debug("%d %d %d %d
",a,b,c,d);
	if(f) swap(a,b),swap(c,d);
	printf("%d %d %d %d
",a,b,c,d);
}
int main()
{
	read(n),read(m),read(k);
	if(k>=n*m||k<n+m-1-((n|m)&1)) {puts("NIE"); return 0;}
	puts("TAK");
	if(m&1) swap(n,m),f=1;
	int mid=(n>>1)+1;
	k-=n+m-2;
	int a=min(k,(mid-1)*(m-1)),b=k-a;
	if((~n&1)&&k<m-1) --a;
//	debug("%d %d
",n,m);
	for(int x=1,y=1;a--;)
	{
		int _x=x,_y=(x&1)?y+1:y-1;
		if(_y==m+1) _y=m,++_x;
		if(_y==1) _y=2,++_x;
		adde(x,y,_x,_y);
		x=_x,y=_y,vis[x][y]=1;
	}
	for(int x=n,y=m;b--;)
	{
		int _x=x,_y=((n-x)&1)?y+1:y-1;
		if(_y==0) _y=1,--_x;
		if(_y==m) _y=m-1,--_x;
		adde(x,y,_x,_y);
		x=_x,y=_y,vis[x][y]=1;
	}
	for(int i=1;i<m;++i) adde(mid,i,mid,i+1);
	for(int i=1;i<n;++i) for(int j=1;j<=m;++j)
	{
		if(!vis[i][j]&&!vis[i+1][j]) adde(i,j,i+1,j);
	}
	return 0;
}

以上是关于loj 3236 [POI2019 R1] Uk?ad scalony的主要内容,如果未能解决你的问题,请参考以下文章

「Loj #2163」「Poi2011」Tree Rotations

[POI2013]?uk triumfalny

怎么用java poi 修改word里面所有重复文字的字体颜色

「POI2011 R1」Conspiracy

Loj#6432「PKUSC2018」真实排名(二分查找+组合数)

java用poi生成word文档,并且给word文档中的中文设置字体,我测试只能改英文字体?