(File IO): input:rooster.in output:rooster.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
鸡国中有两只最喜欢打鸣的公鸡
G
1
G1
G1 和
G
2
G2
G2,它们每一次打鸣都有一个声音的响度值。一天清晨,
G
1
G1
G1 开始先开始打鸣,响度值为
x
x
x,
G
2
G2
G2 听到
G
1
G1
G1 的打鸣后也开始打鸣,响度值为
y
y
y。
G
1
G1
G1 和
G
2
G2
G2 很想把它们打鸣声音的响度值调成一样。所以它们进行了
k
k
k 次协商,每一次协商后就各自增加或减少一定的响度值再打鸣一次(打鸣的响度值不能小于
0
0
0)。
G
1
G1
G1 和
G
2
G2
G2 生性迟钝,它们不知道其实经过 s(s≤k)次协商后,打鸣声音的响度值已经相同了。请编程帮
G
1
G1
G1 和
G
2
G2
G2 计算一下它们打鸣声音的响度值相同时最少经过了几次协商(即最小的
s
s
s)?
注意:如果
x
x
x 一开始就等于
y
y
y,则不需要协商。
输入
输入共
k
+
1
k+1
k+1 行。
第
1
1
1 行三个整数
x
,
y
x,y
x,y 和
k
k
k,分别表示
G
1
、
G
2
G1、G2
G1、G2 第一次打鸣时声音的响度值,共进行了
k
k
k次协商并调整打鸣声音的响度值。
接下来
k
k
k 行,每行包含
4
4
4 个整数
a
i
,
x
i
,
b
i
,
y
i
ai,xi,bi,yi
ai,xi,bi,yi,表示第
i
i
i 次协商
G
1
G1
G1 增加(
a
i
ai
ai等于
1
1
1)或减少(
a
i
ai
ai等于
−
1
-1
−1) 的响度值为
x
i
,
G
2
xi,G2
xi,G2 增加(
b
i
bi
bi等于
1
1
1)或减少(
b
i
bi
bi等于
−
1
-1
−1)的响度值 yi。
输出
输出
1
1
1 行一个整数,表示至少经过多少次协商后
G
1
G1
G1 和
G
2
G2
G2 的打鸣响度值已经相同。如果经过
k
k
k 次协商后仍然无法相同,则输出
“
−
1
”
“-1”
“−1”(不包含双引号)。
样例输入
Input1:
2 3 3
1 1 -1 0
-1 1 1 1
1 1 -1 1
Input2:
2 3 4
1 2 -1 2
-1 1 1 1
-1 4 1 1
1 4 1 1
Input3:
2 3 1
1 2 -1 2
样例输出
Output1:
1
Output2:
4
Output3:
-1
数据范围限制
提示
Sample1:
在样例
1
1
1 中,
G
1
G1
G1 和
G
2
G2
G2 第
1
1
1 次打鸣的响度值分别为
2
2
2 和
3
3
3,不相同。第
1
1
1 次协商
G
1
G1
G1 增加
1
1
1,
G
2
G2
G2减少
0
0
0,响度值分别为
3
3
3 和
3
3
3,所以经过
1
1
1 次协商后它们两个打鸣的响度值已经相同。经过
3
3
3 次协商时,它们的声音也能调成一样,但至少需要
1
1
1 次协商就可以了。
Sample2:
在样例
2
2
2 中,
G
1
G1
G1 和 G2 第
1
1
1 次打鸣的响度值分别为
2
2
2 和
3
3
3,不相同。第
1
1
1 次协商后打鸣的响度值分别为
4
4
4 和
1
1
1,第 2 次协商后打鸣的响度值分别为
3
3
3 和
2
2
2,第
3
3
3 次协商后打鸣的响度值分别为
0
0
0(不能小于
0
0
0)和
3
3
3,第
4
4
4 次协商后打鸣的响度值分别为
4
4
4 和
4
4
4, 所以经过
4
4
4 次协商后它们两个打鸣的响度值相同。
Sample3:
在样例
3
3
3 中,
G
1
G1
G1 和
G
2
G2
G2 第
1
1
1 次打鸣的响度值分别为
2
2
2 和
3
3
3,不相同。第
1
1
1 次协商
G
1
G1
G1 增加
2
2
2,
G
2
G2
G2 减少
2
2
2,响度值分别为
4
4
4 和
1
1
1,所以经过
1
1
1 次协商后它们两个打鸣的响度值仍然无法相同,则输出
“
−
1
”
“-1”
“−1”。
解题思路
此题非常的水。直接暴力模拟搞事情。学过数组、
I
F
IF
IF的都可以做。如果
A
[
I
]
=
1
A[I]=1
A[I]=1就加
X
[
I
]
X[I]
X[I],否则就减
X
[
I
]
X[I]
X[I]。如果
B
[
I
]
=
1
B[I]=1
B[I]=1就加
Y
[
I
]
Y[I]
Y[I],否则就减
Y
[
I
]
Y[I]
Y[I]。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,m,k,a,b,a1,b1;
int main(){
freopen("rooster.in","r",stdin);
freopen("rooster.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
if(n==m)
{
printf("0\n");
return 0;
}
for(int i=1;i<=k;i++)
{
scanf("%d%d%d%d",&a,&b,&a1,&b1);
if(a==1) n+=b;
else n=max(n-b,0);
if(a1==1) m+=b1;
else m=max(m-b1,0);
if(n==m)
{
printf("%d",i);
return 0;
}
}
printf("-1");
}