QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#141198#6532. Tradingcy1999AC ✓234ms9220kbC++1.2kb2023-08-17 09:24:242023-08-17 09:24:24

Judging History

你现在查看的是最新测评结果

  • [2023-08-17 09:24:24]
  • 评测
  • 测评结果:AC
  • 用时:234ms
  • 内存:9220kb
  • [2023-08-17 09:24:24]
  • 提交

answer

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#include<map>
using namespace std;

int t, n; 

int main() {
	scanf("%d", &t);
	while(t--) {
		map<int, long long> mp;
		scanf("%d", &n);
		long long sum = 0, in = 0, out = 0, cost = 0; 
		//in就是买入的,手上有的商品。 
		//out事卖出的。 
		for(int i=1; i<=n; i++) {
			int a, b; scanf("%d%d", &a, &b);
			mp[a] += b; 
			sum += 1ll*a*b; //首先全给卖了。 
			out += b;
		}
		//啊,,错了。
		//那反过来想,, 
		for(auto it = mp.begin(); it!=mp.end(); it++) {
			long long a = it->first, b = it->second;
			//最优的肯定是最终手上剩0个。 
			out -= b; 
			in += b;//啊对,总之先把现在遍历到的这个减掉。
			if(out>=in) {
				sum -= a*b;
				cost += a*b;
				if(out==in) break;
			} else {
				//这样的话就是减多了。
				//显然是有 (out-in)%2 == 1的时候。我事sb吗。 
//				out += b;
//				in -= b; //加回来先(
				sum -= a*b;
				cost += a*(b+out-in);
//				if((out-in)%2==1) sum -= a; 
				
				break;
			}
		}
		cout<<sum - cost<<endl;
	}
	
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3564kb

input:

2
4
10 2
30 7
20 4
50 1
2
1 100
1 1000

output:

100
0

result:

ok 2 number(s): "100 0"

Test #2:

score: 0
Accepted
time: 234ms
memory: 3500kb

input:

100000
8
567091 283679
875020 918237
314684 148083
456411 304598
766056 882388
135371 326501
578773 250140
221306 874117
5
126777 129517
846433 679825
649281 330021
427768 362636
390068 692169
5
657677 231119
941936 991342
901241 15133
660372 970476
698958 209343
10
478657 163635
752788 819629
82110...

output:

974212656325
422801098045
290923055490
905027520640
1029190811448
678507966352
198954424176
854342493784
14257598794
988991921252
588571689752
736448232231
1193610112068
190497179448
0
931985141715
607845823133
684919543290
764055201744
1066998333316
404829201204
908985930972
518916157132
0
18970544...

result:

ok 100000 numbers

Test #3:

score: 0
Accepted
time: 110ms
memory: 3684kb

input:

1000
943
72269 378475
977924 359650
767015 807123
588692 74765
415453 560758
928758 428092
806008 738436
208619 75109
42177 669012
962462 479504
590660 677629
539374 152571
248543 325297
781505 297957
16148 319989
551104 444452
227850 215480
851246 491844
513358 739037
788832 628842
60861 351413
302...

output:

114201255531485
53276337328736
92046111258743
103154270867625
105744931013248
32643398141462
88110706162215
47935111239811
15241903293912
111168188920159
40432059191865
31710483882560
76824850524735
5062330895031
699195293530
102704425622910
62567748918438
111989972317852
70973066348865
748113762268...

result:

ok 1000 numbers

Test #4:

score: 0
Accepted
time: 215ms
memory: 9220kb

input:

10
3648
321905 608337
913130 232679
807842 182580
108666 826799
649762 754578
461310 612685
351739 113156
227668 993674
779322 394130
762123 235998
591912 252590
648451 525516
758596 858327
444142 632425
993345 476968
987323 970898
664888 739790
582325 596631
537216 606677
30160 316873
32104 109750
...

output:

456752959290141
11993792944026063
11554678993093858
9453515389111085
8600545413208495
5664061450260769
2045423469498213
7668923751962719
2600263474973873
3635314464114077

result:

ok 10 numbers