题面``` 聪明的农民(farmers) 问题描述
在城中有一个贪婪而愚蠢的领主,他总是不管农民的死活,疯狂地敲诈农民们辛勤耕种的劳动成果。眼看每年的秋收日十月十日已经到了,这时城中所有的农民在忙完一年的收成后,又要向领主上缴一年的粮食了。很久以来当地就采用一个特殊的“抽签”决定各户农民上缴粮食的方法:领主将一些写有不同的数的纸条放入一个盒子中,每户农民从中抽取两张纸条并在第二天上缴和两张纸条上的数值相乘结果同样数量的粮食。 城中的农民是个既聪明又团结的整体,他们非常痛恨残暴的领主,不希望向他多交一粒粮食,所以他们每年在抽完签后,秘密地交换一些纸条,使最后向领主上缴的粮食总量最少。不幸的是,以往决定如何交换纸条的老农夫杰克病倒了,不能为大家出力了,所以请你帮助他们决定如何交换纸条。另外,为了瞒过领主,活动只能在夜间悄悄进行,因此务必要使交换次数最少(两个农民将各自的一张纸条对调叫做一次交换)。
输入(farmers.in) 文件的第一行为农户数目n(n≤500),接下来的n行,每行为两个数a、b,其中a、b两数均不超过1000。相邻两个数之间由一个或多个空格分隔。
输出(farmers.out) 输出文件由两个数组成,每个数占一行,分别为交换后向领主上缴的粮食总量和需要交换的总次数。
输入输出示例:
farmers.in 3 10 13 7 12 9 6 Farmers.out 252 1
这是我的代码
```cpp
#include<bits/stdc++.h>
using namespace std;
int a[1009],b[1009],n,cnt,jutc,c=0;
int main()
{
//freopen("farmers.in","r",stdin);
// freopen("farmers.out","w",stdout);
scanf("%d",&n);
n*=2;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
b[i]=a[i];
}
sort(b+1,b+1+n);
for(int i=1;i<=n;i+=2)
{
for(int j=1;j<=n;j++)
{
if(b[j]==a[i])
{
jutc=b[n-j+1];
break;
}
}
for(int j=1;j<=n;j++)
{
if(a[j]==jutc)
{
swap(a[j],a[i+1]);
if(i<j)
{
if(j!=i+1)
{
c++;
}
}
else
{
if(i!=j+1)
{
c++;
}
}
break;
}
}
}
for(int j=1;j<=n;j+=2)
{
cnt+=a[j]*a[j+1];
}
printf("%d\n%d",cnt,c);
return 0;
}
样例是这样:```
200
11 998
15 997
17 996
20 995
24 992
26 990
27 989
28 986
31 985
32 984
33 981
34 980
35 978
36 977
38 974
41 973
42 971
48 970
49 969
50 967
51 965
52 957
60 955
64 952
66 949
68 947
71 946
72 942
73 939
77 938
81 937
86 935
87 933
88 924
89 922
90 915
91 914
100 912
102 911
106 910
107 905
113 901
115 893
116 891
117 889
124 888
125 882
127 880
136 873
137 869
139 868
140 867
141 865
142 863
144 862
146 856
150 853
156 850
157 845
158 844
161 838
162 837
163 832
166 830
176 829
178 825
179 824
180 822
182 820
185 818
187 816
194 815
195 812
198 807
199 806
200 804
202 801
203 796
209 794
210 788
216 786
217 785
218 783
221 780
224 778
225 777
230 775
231 773
232 769
235 767
237 763
240 762
241 758
243 756
244 755
245 754
247 748
250 746
252 741
255 731
257 730
259 729
262 728
264 725
266 724
267 723
269 722
271 720
272 717
273 715
276 714
281 713
282 712
285 710
287 709
296 703
299 697
300 696
305 694
307 691
309 689
312 688
313 685
315 680
317 677
319 675
321 668
324 665
328 664
334 663
336 661
338 659
339 655
341 654
342 653
345 652
346 651
347 650
348 648
350 646
353 645
355 642
357 641
360 640
361 638
362 637
367 635
372 632
376 631
377 630
379 622
382 621
384 620
385 617
386 616
388 614
394 611
396 609
398 606
401 605
404 604
405 598
407 597
408 596
409 594
413 592
415 591
417 590
423 589
424 586
425 581
426 573
429 572
431 570
433 569
436 566
440 564
452 559
453 558
461 555
463 554
465 549
468 548
471 546
472 542
477 540
483 539
490 538
491 537
492 536
494 533
495 531
496 529
500 527
502 525
503 523
509 522
511 520
512 515
514 257
输出是34144613
98
我的输出是34144613
99(只挂了这一个点)