小白月赛 F.草方块与牛排(构造)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白月赛 F.草方块与牛排(构造)相关的知识,希望对你有一定的参考价值。

小白月赛 F.草方块与牛排(构造)

显然 r = n 2 − 4 4 = n 2 4 − 1 r=\\dfracn^2-44=\\dfracn^24-1 r=4n24=4n21

使用的个数 r r r为整数, n n n必须为偶数。

将行按照奇偶染色(第一行染0,第二行染1…)。那么牛排的类型只能为3个1、1个0 或者是3个0,1个1。

因为0和1的个数相等。

3 x + y = 3 y + x 3x+y=3y+x 3x+y=3y+x,所以 x = y x=y x=y

r = 2 x r=2x r=2x r r r为偶数。

假设 n = 4 k n=4k n=4k,那么 r = 4 k 2 − 1 r=4k^2-1 r=4k21为奇数,矛盾。

因此 n = 4 k + 2 n=4k+2 n=4k+2型。

// Problem: 草方块与牛排
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/41173/F
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&(-(x)))
#define lg2(x) ((int)(__lg(x)/__lg(2)))
typedef long long LL;
typedef unsigned long long ull;
const int N=1e6+10,INF=2e9+10;
inline int read()
    int ret=0,f=1; 
    char ch=getchar();
    while(ch<'0'||ch>'9') if(ch=='-') f=-f; ch=getchar(); 
    while(ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
    return ret*f;

inline void write(int x)        
    if(x<0) putchar('-'); x=-x;       
    if(x>9) write(x/10);     
    putchar(x%10+'0');     

int n;
inline int get(int x,int y)
    return (x-1)*n+y;

void print1(int x,int y)
    write(get(x,y)),putchar(' ');
    write(get(x,y+1)),putchar(' ');
    write(get(x,y+2)),putchar(' ');
    write(get(x+1,y)),putchar('\\n');

    write(get(x+1,y+3)),putchar(' ');
    write(get(x+1,y+2)),putchar(' ');
    write(get(x+1,y+1)),putchar(' ');
    write(get(x,y+3)),putchar('\\n');

void print2(int x,int y)
    write(get(x,y)),putchar(' ');
    write(get(x+1,y)),putchar(' ');
    write(get(x+2,y)),putchar(' ');
    write(get(x,y+1)),putchar('\\n');

    write(get(x+3,y+1)),putchar(' ');
    write(get(x+2,y+1)),putchar(' ');
    write(get(x+1,y+1)),putchar(' ');
    write(get(x+3,y)),putchar('\\n');

int main()
    n=read();
    if(n%4==2)
        write((n*n-4)/4),putchar('\\n');
        for(int j=3;j<=n;j+=4)
            for(int i=1;i<=n;i+=2)
                print1(i,j);
        for(int i=3;i<=n;i+=4) print2(i,1);
    else write(-1);
    return 0;

以上是关于小白月赛 F.草方块与牛排(构造)的主要内容,如果未能解决你的问题,请参考以下文章

牛排的做法?

牛客白月赛2 题解

可可牛排cocoa cafe携小幸福伴您永恒

请问牛排的生熟这个几分熟怎么翻译?

牛客白月赛29题解

牛客白月赛29题解