1.朴素算法
贪心
输入数据时进行记录,
譬如4 2 4 3
说明在 2列 和 3列 中同学说话 记录一下
2 3 3 3
说明在 2行 和 3行 中同学说话 记录一下
找出说话列最多 行最多的 按人数排位置序 输出位置
#include
#include
using namespace std;
typedef long long ll;
const int MAXN = 1010;
int ah[1100] = {0}, al[1100] = {0};
int ph[1100], pl[1100];
int main()
{
for(int i = 0; i < 1100; i++)
{
ph[i] = i;
pl[i] = i;
}
int M, N, K, L, D;
cin>>M>>N>>K>>L>>D;
int tmp = D;
while(tmp--)
{
int tx, ty, ta, tb;
cin>>tx>>ty>>ta>>tb;
if(tx == ta)
{
al[min(ty, tb)] ++;
}
else if(ty == tb)
{
ah[min(tx, ta)] ++;
}
}
for(int i = 0; i < MAXN; i++)
{
for(int j = i + 1; j < MAXN; j++)
{
if(al[i] < al[j])
{
swap(al[i], al[j]);
swap(pl[i], pl[j]);
}
}
}
for(int i = 0; i < MAXN; i++)
{
for(int j = i + 1; j < MAXN; j++)
{
if(ah[i] < ah[j])
{
swap(ah[i], ah[j]);
swap(ph[i], ph[j]);
}
}
}
sort(ph, ph + K);
sort(pl, pl + L);
for(int i = 0; i < K; i++)
{
cout<
可以用快排提升程序效率 以行列为关键字排位置
#include
using namespace std;
const int MAXN = 1010;
int arrh[MAXN], arrl[MAXN];
int parrh[MAXN], parrl[MAXN];
void qsort(int *arr, int *brr, int fst, int lst)
{
int i = fst, j = lst;
int mid = arr[(i + j) / 2];
while(i <= j)
{
while(arr[i] < mid)
i++;
while(arr[j] > mid)
j--;
if(i <= j)
{
swap(arr[i], arr[j]);
swap(brr[i], brr[j]);
i++;
j--;
}
}
if(i < lst)
qsort(arr, brr, i, lst);
if(j > fst)
qsort(arr, brr, fst, j);
}
int main()
{
for(int i = 0; i < MAXN; i++)
{
parrh[i] = i;
parrl[i] = i;
}
int n, m, h, l, t;
cin>>n>>m>>h>>l>>t;
int ta, tb, tc, td;
while(t--)
{
cin>>ta>>tb>>tc>>td;
if(ta == tc)
{
arrl[ min(tb, td) ] ++;
}
else if(tb == td)
{
arrh[ min(ta, tc) ] ++;
}
}
qsort(arrl,parrl, 0, MAXN - 1);
qsort(arrh,parrh, 0, MAXN - 1);
qsort(parrl, arrl, MAXN - l, MAXN - 1);
qsort(parrh, arrh, MAXN - h, MAXN - 1);
for(int i = MAXN - h; i < MAXN ; i++)
{
cout<