题目链接.
题意:
操作
1
1
1:选两个数
i
,
j
(
1
<
i
<
j
<
m
)
i,j(1<i<j<m)
i,j(1<i<j<m),使得
c
[
i
]
=
c
[
i
]
−
1
,
c
[
j
]
=
c
[
j
]
−
1
,
c
[
i
−
1
]
=
c
[
i
−
1
]
+
1
,
c
[
j
+
1
]
=
c
[
j
+
1
]
+
1
c[i]=c[i]-1,c[j]=c[j]-1,c[i-1]=c[i-1]+1,c[j+1]=c[j+1]+1
c[i]=c[i]−1,c[j]=c[j]−1,c[i−1]=c[i−1]+1,c[j+1]=c[j+1]+1。
操作 2 2 2:选两个数 i , j ( 1 < i < j < m − 1 ) i,j(1<i<j<m-1) i,j(1<i<j<m−1),使得 c [ i ] = c [ i ] − 1 , c [ j ] = c [ j ] − 1 , c [ i − 1 ] = c [ i − 1 ] + 1 , c [ j + 2 ] = c [ j + 2 ] + 1 c[i]=c[i]-1,c[j]=c[j]-1,c[i-1]=c[i-1]+1,c[j+2]=c[j+2]+1 c[i]=c[i]−1,c[j]=c[j]−1,c[i−1]=c[i−1]+1,c[j+2]=c[j+2]+1。
有一个初始数组 b b b,长度为 m m m,有 n n n个数组 c c c, n n n个数组中有 1 1 1个数组是对 b b b进行不限次操作 2 2 2得到的,其余数组是对 b b b进行不限次操作 1 1 1得到的。
求哪个数组是通过操作 2 2 2得到的,以及进行操作 2 2 2的次数。
思路:
求数组后缀和的和
操作
1
1
1数组后缀和的和全都相同
操作
2
2
2数组后缀和的和
>
>
>操作
1
1
1数组后缀和的和
操作
2
2
2的次数
=
=
=操作
2
2
2数组后缀和的和
−
-
−操作
1
1
1后缀和的和。
对于操作1:
a
[
i
−
1
]
∗
(
i
−
1
)
+
a
[
i
]
∗
i
+
a
[
j
]
∗
j
+
a
[
j
+
1
]
∗
(
j
+
1
)
a[i-1]*(i-1)+a[i]*i+a[j]*j+a[j+1]*(j+1)
a[i−1]∗(i−1)+a[i]∗i+a[j]∗j+a[j+1]∗(j+1)
=
(
a
[
i
−
1
]
+
1
)
∗
(
i
−
1
)
+
(
a
[
i
]
−
1
)
∗
i
+
(
a
[
j
]
−
1
)
∗
j
+
(
a
[
j
+
1
]
+
1
)
∗
(
j
+
1
)
=(a[i-1]+1)*(i-1)+(a[i]-1)*i+(a[j]-1)*j+(a[j+1]+1)*(j+1)
=(a[i−1]+1)∗(i−1)+(a[i]−1)∗i+(a[j]−1)∗j+(a[j+1]+1)∗(j+1)
对于操作2:
a
[
i
−
1
]
∗
(
i
−
1
)
+
a
[
i
]
∗
i
+
a
[
j
]
∗
j
+
a
[
j
+
2
]
∗
(
j
+
2
)
a[i-1]*(i-1)+a[i]*i+a[j]*j+a[j+2]*(j+2)
a[i−1]∗(i−1)+a[i]∗i+a[j]∗j+a[j+2]∗(j+2)
<
(
a
[
i
−
1
]
+
1
)
∗
(
i
−
1
)
+
(
a
[
i
]
−
1
)
∗
i
+
(
a
[
j
]
−
1
)
∗
j
+
(
a
[
j
+
2
]
+
1
)
∗
(
j
+
2
)
<(a[i-1]+1)*(i-1)+(a[i]-1)*i+(a[j]-1)*j+(a[j+2]+1)*(j+2)
<(a[i−1]+1)∗(i−1)+(a[i]−1)∗i+(a[j]−1)∗j+(a[j+2]+1)∗(j+2)
#include<bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
using namespace std;
int n,m;
void solve()
{
cin>>n>>m;
ll minn=9e17,maxn=0;
int id=-1;
for(int i=1;i<=n;i++)
{
ll sum=0;
for(int j=1;j<=m;j++)
{
ll x;cin>>x;
sum+=x*j;
}
minn=min(sum,minn);
maxn=max(sum,maxn);
if(maxn==sum)id=i;
}
cout<<id<<" "<<maxn-minn<<"\n";
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int t;cin>>t;
while(t--)solve();
return 0;
}