【codeforces 758C】Unfair Poll
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
On the Literature lesson Sergei noticed an awful injustice, it seems that some students are asked more often than others.
Seating in the class looks like a rectangle, where n rows with m pupils in each.
The teacher asks pupils in the following order: at first, she asks all pupils from the first row in the order of their seating, then she continues to ask pupils from the next row. If the teacher asked the last row, then the direction of the poll changes, it means that she asks the previous row. The order of asking the rows looks as follows: the 1-st row, the 2-nd row, …, the n - 1-st row, the n-th row, the n - 1-st row, …, the 2-nd row, the 1-st row, the 2-nd row, …
The order of asking of pupils on the same row is always the same: the 1-st pupil, the 2-nd pupil, …, the m-th pupil.
During the lesson the teacher managed to ask exactly k questions from pupils in order described above. Sergei seats on the x-th row, on the y-th place in the row. Sergei decided to prove to the teacher that pupils are asked irregularly, help him count three values:
the maximum number of questions a particular pupil is asked,
the minimum number of questions a particular pupil is asked,
how many times the teacher asked Sergei.
If there is only one row in the class, then the teacher always asks children from this row.
Input
The first and the only line contains five integers n, m, k, x and y (1 ≤ n, m ≤ 100, 1 ≤ k ≤ 1018, 1 ≤ x ≤ n, 1 ≤ y ≤ m).
Output
Print three integers:
the maximum number of questions a particular pupil is asked,
the minimum number of questions a particular pupil is asked,
how many times the teacher asked Sergei.
Examples
input
1 3 8 1 1
output
3 2 3
input
4 2 9 4 2
output
2 1 1
input
5 5 25 4 3
output
1 1 1
input
100 100 1000000000000000000 100 100
output
101010101010101 50505050505051 50505050505051
Note
The order of asking pupils in the first test:
the pupil from the first row who seats at the first table, it means it is Sergei;
the pupil from the first row who seats at the second table;
the pupil from the first row who seats at the third table;
the pupil from the first row who seats at the first table, it means it is Sergei;
the pupil from the first row who seats at the second table;
the pupil from the first row who seats at the third table;
the pupil from the first row who seats at the first table, it means it is Sergei;
the pupil from the first row who seats at the second table;
The order of asking pupils in the second test:
the pupil from the first row who seats at the first table;
the pupil from the first row who seats at the second table;
the pupil from the second row who seats at the first table;
the pupil from the second row who seats at the second table;
the pupil from the third row who seats at the first table;
the pupil from the third row who seats at the second table;
the pupil from the fourth row who seats at the first table;
the pupil from the fourth row who seats at the second table, it means it is Sergei;
the pupil from the third row who seats at the first table;
【题目链接】:http://codeforces.com/contest/758/problem/C
【题解】
画一画;
会发现;
走完第一行之后;
之后每2*(n-1)*m个格子为一个周期;
这一个周期;
固定把第一行和最后一行的格子每个格子递增1;
同时第二行到第n-1行每个格子都递增2;
我是以k<=n*m和k>n*m作为划分的;
对于k<=n*m的情况直接暴力模拟(n*m最大为10000完全可以接受);
对于k>n*m的情况
先把第一行都加上1(先走完第一行);
然后k-=m;
周期的个数就为k/(2*(n-1)*m);
然后对于剩下的k%(2*(n-1)*m)
暴力搞完就好;
特判一下n=1的情就好;
不会很难的;
到了n+1则变成n-1,转个方向;
到了0则变成2,转个方向;
【完整代码】
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int x,y;
LL n,m,k;
LL a[110][110];
int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n >> m >> k >> x >> y;
if (k<=n*m)
{
int rest = k;
int nx = 1,ny = 1,fx=1;
while (rest>0)
{
a[nx][ny]++;
rest--;
ny++;
if (ny>m)
{
ny = 1;
nx+=fx;
}
if (nx>n)
{
nx-=2;
fx=-fx;
}
if (nx<1)
{
nx = 2;
if (nx>n)
nx = 1;
fx=-fx;
}
}
}
else
if (k > n*m)
{
if (n>1)
{
for (int i = 1;i <= m;i++)
a[1][i] = 1;
LL temp,rest;
k-=m;
temp = k/(2*(n-1)*m);
rest = k%(2*(n-1)*m);
for (int i = 1;i <= m;i++)
a[1][i]+=temp,a[n][i]+=temp;
for (int i = 2;i <= n-1;i++)
for (int j = 1;j <= m;j++)
a[i][j]+=temp*2;
int nx = 2,ny = 1,fx=1;
if (nx>n)
nx = 1;
while (rest>0)
{
a[nx][ny]++;
rest--;
ny++;
if (ny>m)
{
ny = 1;
nx+=fx;
}
if (nx>n)
{
nx-=2;
fx=-fx;
}
if (nx<1)
{
nx = 2;
fx = -fx;
}
}
}
else
if (n==1)
{
LL temp = k/m;
LL rest = k%m;
for (int i = 1;i <= m;i++)
a[1][i]+=temp;
for (int i = 1;i <= rest;i++)
a[1][i]++;
}
}
LL ma = a[1][1],mi = a[1][1];
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
{
ma = max(ma,a[i][j]);
mi = min(mi,a[i][j]);
}
cout << ma << ' ' <<mi << ' '<<a[x][y]<<endl;
return 0;
}
【codeforces 758C】Unfair Poll的更多相关文章
- Codeforces 758C:Unfair Poll(思维+模拟)
http://codeforces.com/problemset/problem/758/C 题意:教室里有n列m排,老师上课点名从第一列第一排开始往后点,直到点到第一列第m排,就从第二列第一排开始点 ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
随机推荐
- MFC ClistCtr锁定隐藏某一列
通过设置列的宽度为0, 可以隐藏列表框的某一列,但是用户通过拖动列表框的大小,隐藏的列,可能又被显示出来了. 我们可以自己写一个CListEx继承CListCtr,然后捕获拖动的消息,对该消息进行特殊 ...
- STM32之CAN通讯接收过滤器过滤分析
一.前言 学习了CAN通讯,底层的东东CAN控制器已经帮你处理完成,也就是CAN通讯协议已经做好,你按协议格式往对应的位扔数据发送就好,所以使用CAN通讯,我们只需要去关心制定发送的数据间的协议,也就 ...
- HDU 2489 Minimal Ratio Tree(prim+DFS)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- [Javascript] Different ways to create an new array/object based on existing array/object
Array: 1. slice() const newAry = ary.slice() 2. concat const newAry = [].concat(ary) 3. spread oprea ...
- mysql-cacti-templates-1.1.2.tar.gz 免费下载 cacti MySQL添加监控
cacti MySQL添加监控 1. 安装监控插件 wget http://mysql-cacti-templates.googlecode.com/files/mysql-cacti-templat ...
- HDU1203 I NEED A OFFER! 【贪心】
I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- React评论展示案例(包含知识点:state、props、ref、React声明周期、localStorage本地存储等)
本案例在上一篇的案例(React组件之间通过Props传值的技巧(小案例,帮助体会理解props.state.受控组件和非受控组件等))的基础上加强功能和用户体验,但是当然还有很多需要改进的地方,后期 ...
- 通过wmi获取本地硬件信息的一些疑问。
通过wmi获取本地硬件信息的一些疑问. http://bbs.csdn.net/topics/391017789 http://blog.csdn.net/xcntime/article/detail ...
- update进行跨表之间的更新
有时我们可能须要多个表之间进行更新数据. 我们能够使用这个语句 UPDATE table1,table2 SET table1.column=table2.column, table1.column1 ...
- 很吊炸天的Xcode插件,你想要的这都有
整理自BigPolarBear的博客 .杂技杂记 以及CC此前整理. 古人云"工欲善其事必先利其器",打造一个强大的开发环境.是马上提升自身战斗力的绝佳途径!下面是搜集的一些有力 ...