AcWing 105. 七夕祭
原题链接
困难
作者:
fanypcd
,
2020-07-13 14:25:33
,
所有人可见
,
阅读 536
###这是我遇见的看起来最复杂却写完不测样例就提交ac的唯一一道…
C++ 代码
#include<bits/stdc++.h>
using namespace std;
long long n, m, t, x, y, h[100005], s[100005], tot = 0;
int main()
{
cin >> n >> m >> t;
for(long long i = 1; i <= t; i++)
{
cin >> x >> y;
h[x]++;
s[y]++;
tot++;
}
long long tot1, tot2;
if(tot % n == 0 || tot % m == 0)
{
tot1 = tot / n;
tot2 = tot / m;
}
else
{
cout << "impossible";
return 0;
}
for(long long i = 1; i <= n; i++)
{
h[i] += h[i - 1] - tot1;
}
for(long long i = 1; i <= m; i++)
{
s[i] += s[i - 1] - tot2;
}
sort(h + 1, h + n + 1);
sort(s + 1, s + m + 1);
long long ans = 0;
if(tot % n == 0 && tot % m != 0)
{
if(n % 2 == 1)
{
for(long long i = 1; i <= n; i++)
{
ans += abs(h[i] - h[n / 2 + 1]);
}
}
else
{
for(long long i = 1; i <= n; i++)
{
ans += abs(h[i] - h[n / 2]);
}
}
cout << "row " << ans;
return 0;
}
else if(tot % m == 0 && tot % n != 0)
{
if(m % 2 == 1)
{
for(long long i = 1; i <= m; i++)
{
ans += abs(s[i] - s[m / 2 + 1]);
}
}
else
{
for(long long i = 1; i <= m; i++)
{
ans += abs(s[i] - s[m / 2]);
}
}
cout << "column " << ans;
return 0;
}
else
{
if(n % 2 == 1)
{
for(long long i = 1; i <= n; i++)
{
ans += abs(h[i] - h[n / 2 + 1]);
}
}
else
{
for(long long i = 1; i <= n; i++)
{
ans += abs(h[i] - h[n / 2]);
}
}
if(m % 2 == 1)
{
for(long long i = 1; i <= m; i++)
{
ans += abs(s[i] - s[m / 2 + 1]);
}
}
else
{
for(long long i = 1; i <= m; i++)
{
ans += abs(s[i] - s[m / 2]);
}
}
cout << "both " << ans;
return 0;
}
return 0;
}