【CROC 2016 — QualificationA】【水题】nm棋盘填人奇偶不相邻
2016-03-19 12:47
453 查看
A. Parliament of Berland
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
There are n parliamentarians in Berland. They are numbered with integers from 1 to n.
It happened that all parliamentarians with odd indices are Democrats and all parliamentarians with even indices are Republicans.
New parliament assembly hall is a rectangle consisting of a × b chairs — a rows
of b chairs each. Two chairs are considered neighbouring if they share as side.
For example, chair number 5 in row number 2 is
neighbouring to chairs number 4 and 6 in
this row and chairs with number 5 in rows 1 and 3.
Thus, chairs have four neighbours in general, except for the chairs on the border of the hall
We know that if two parliamentarians from one political party (that is two Democrats or two Republicans) seat nearby they spent all time discussing internal party issues.
Write the program that given the number of parliamentarians and the sizes of the hall determine if there is a way to find a seat for any parliamentarian, such that no two members
of the same party share neighbouring seats.
Input
The first line of the input contains three integers n, a and b (1 ≤ n ≤ 10 000, 1 ≤ a, b ≤ 100) —
the number of parliamentarians, the number of rows in the assembly hall and the number of seats in each row, respectively.
Output
If there is no way to assigns seats to parliamentarians in a proper way print -1.
Otherwise print the solution in a lines,
each containing b integers. The j-th
integer of the i-th line should be equal to the index of parliamentarian occupying this seat,
or 0 if this seat should remain empty. If there are multiple possible solution, you may print any of them.
Examples
input
output
input
output
input
output
Note
In the first sample there are many other possible solutions. For example,
and
The following assignment
is incorrect, because parliamentarians 1 and 3 are
both from Democrats party but will occupy neighbouring seats.
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; }
const int N = 105, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
int casenum, casei;
int num, n, m;
int a
;
int main()
{
//num个人,n*m的棋盘
while(~scanf("%d%d%d",&num,&n,&m))
{
MS(a, 0);
int x = 1;
int y = 2;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
if ((i + j) % 2 == 0)
{
if (x <= num)a[i][j] = x;
x += 2;
}
else
{
if (y <= num)a[i][j] = y;
y += 2;
}
}
}
if (x <= num || y <= num)puts("-1");
else for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
printf("%d ", a[i][j]);
}puts("");
}
}
return 0;
}
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
There are n parliamentarians in Berland. They are numbered with integers from 1 to n.
It happened that all parliamentarians with odd indices are Democrats and all parliamentarians with even indices are Republicans.
New parliament assembly hall is a rectangle consisting of a × b chairs — a rows
of b chairs each. Two chairs are considered neighbouring if they share as side.
For example, chair number 5 in row number 2 is
neighbouring to chairs number 4 and 6 in
this row and chairs with number 5 in rows 1 and 3.
Thus, chairs have four neighbours in general, except for the chairs on the border of the hall
We know that if two parliamentarians from one political party (that is two Democrats or two Republicans) seat nearby they spent all time discussing internal party issues.
Write the program that given the number of parliamentarians and the sizes of the hall determine if there is a way to find a seat for any parliamentarian, such that no two members
of the same party share neighbouring seats.
Input
The first line of the input contains three integers n, a and b (1 ≤ n ≤ 10 000, 1 ≤ a, b ≤ 100) —
the number of parliamentarians, the number of rows in the assembly hall and the number of seats in each row, respectively.
Output
If there is no way to assigns seats to parliamentarians in a proper way print -1.
Otherwise print the solution in a lines,
each containing b integers. The j-th
integer of the i-th line should be equal to the index of parliamentarian occupying this seat,
or 0 if this seat should remain empty. If there are multiple possible solution, you may print any of them.
Examples
input
3 2 2
output
0 3 1 2
input
8 4 3
output
7 8 3 0 1 4 6 0 5 0 2 0
input
10 2 2
output
-1
Note
In the first sample there are many other possible solutions. For example,
3 2 0 1
and
2 1 3 0
The following assignment
3 2 1 0
is incorrect, because parliamentarians 1 and 3 are
both from Democrats party but will occupy neighbouring seats.
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; }
const int N = 105, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
int casenum, casei;
int num, n, m;
int a
;
int main()
{
//num个人,n*m的棋盘
while(~scanf("%d%d%d",&num,&n,&m))
{
MS(a, 0);
int x = 1;
int y = 2;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
if ((i + j) % 2 == 0)
{
if (x <= num)a[i][j] = x;
x += 2;
}
else
{
if (y <= num)a[i][j] = y;
y += 2;
}
}
}
if (x <= num || y <= num)puts("-1");
else for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
printf("%d ", a[i][j]);
}puts("");
}
}
return 0;
}
相关文章推荐
- 【HDU 5366】The mook jong 详解
- HDU 5240 Exam (好水的题)
- 北大—1006——Biorhythms
- 时间计算(heaven.pas/cpp)
- 工作依赖(job.cpp/pas)
- 题目 英雄 (BFS)
- kmp 学习 hihocoder #1015
- HDU 1096 A+B for Input-Output Practice (VIII)
- HUST-1601 - Shepherd 暴力
- P1478
- P1035
- P1008 难度2.7
- 2020 绝对值排序
- 2021 发工资咯
- 2022 海选女主角
- 2024 C语言合法标识符
- 2025 查找最大元素
- 2026 首字母变大写
- 2027 统计元音
- 2028 Lowest Common Multiple Plus