program ideone;
var
AList, BList: TArray<Integer>;
APairs, BPairs: TArray<TPoint>;
ia, ib, Res, CntA, CntB: Integer ;
s: string ;
begin
AList : = [ 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 ] ;
BList : = [ 1 , 5 , 2 , 3 , 4 , 7 , 5 , 7 ] ;
// AList := [1,2,2,3];
// BList := [2,2,2,3];
SetLength( APairs, Length( AList) ) ;
SetLength( BPairs, Length( BList) ) ;
for ia : = 0 to High( AList) do
if Odd ( ia) then
APairs[ ia] : = Point( AList[ ia] , - 1 )
else
APairs[ ia] : = Point( AList[ ia] , 1 ) ;
TArray. Sort <TPoint>( APairs, TDelegatedComparer<TPoint>. Construct (
function ( const Left, Right: TPoint) : Integer
begin
Result : = 3 * Left. X - Left. Y - 3 * Right. X + Right. Y ;
end ) ) ;
for ib : = 0 to High( BList) do
if Odd ( ib) then
BPairs[ ib] : = Point( BList[ ib] , - 1 )
else
BPairs[ ib] : = Point( BList[ ib] , 1 ) ;
TArray. Sort <TPoint>( BPairs, TDelegatedComparer<TPoint>. Construct (
function ( const Left, Right: TPoint) : Integer
begin
Result : = 3 * Left. X - Left. Y - 3 * Right. X + Right. Y ;
end ) ) ;
CntA : = 0 ;
CntB : = 0 ;
Res : = 0 ;
ia : = 0 ;
ib : = 0 ;
while ( ia < Length( APairs) ) and ( ib < Length( BPairs) ) do begin
Writeln ( Format( '%d:%d (%d) %d:%d (%d)' ,
[ APairs[ ia] . X , APairs[ ia] . Y , CntA, BPairs[ ib] . X , BPairs[ ib] . Y , CntB] ) ) ;
if 3 * APairs[ ia] . X - APairs[ ia] . Y <= 3 * BPairs[ ib] . X - BPairs[ ib] . Y then
begin
CntA : = CntA + APairs[ ia] . Y ;
s : = 'move A' ;
if APairs[ ia] . Y < 0 then begin
Res : = Res + CntB;
s : = s + Format( ' addB %d' , [ CntB] ) ;
end ;
Inc( ia) ;
end
else begin
CntB : = CntB + BPairs[ ib] . Y ;
s : = 'move B' ;
if BPairs[ ib] . Y < 0 then begin
Res : = Res + CntA;
s : = s + Format( ' addA %d' , [ CntA] ) ;
end ;
Inc( ib) ;
end ;
Writeln ( s) ;
end ;
Writeln ( Format( 'Result = %d' , [ Res] ) ) ;
end .
cHJvZ3JhbSBpZGVvbmU7CnZhcgogIEFMaXN0LCBCTGlzdDogVEFycmF5PEludGVnZXI+OwogIEFQYWlycywgQlBhaXJzOiBUQXJyYXk8VFBvaW50PjsKICBpYSwgaWIsIFJlcywgQ250QSwgQ250QjogSW50ZWdlcjsKICBzOiBzdHJpbmc7CmJlZ2luCiAgQUxpc3QgOj0gWzEsMiwyLDMsNCw1LDYsN107CiAgQkxpc3QgOj0gWzEsNSwyLDMsNCw3LDUsN107Ci8vICBBTGlzdCA6PSBbMSwyLDIsM107Ci8vICBCTGlzdCA6PSBbMiwyLDIsM107CiAgU2V0TGVuZ3RoKEFQYWlycywgTGVuZ3RoKEFMaXN0KSk7CiAgU2V0TGVuZ3RoKEJQYWlycywgTGVuZ3RoKEJMaXN0KSk7CgogIGZvciBpYSA6PSAwIHRvIEhpZ2goQUxpc3QpIGRvCiAgICBpZiBPZGQoaWEpIHRoZW4KICAgICAgQVBhaXJzW2lhXSA6PSBQb2ludChBTGlzdFtpYV0sIC0xKQogICAgZWxzZQogICAgICBBUGFpcnNbaWFdIDo9IFBvaW50KEFMaXN0W2lhXSwgMSk7CiAgVEFycmF5LlNvcnQ8VFBvaW50PihBUGFpcnMsIFREZWxlZ2F0ZWRDb21wYXJlcjxUUG9pbnQ+LkNvbnN0cnVjdCgKICAgIGZ1bmN0aW9uKGNvbnN0IExlZnQsIFJpZ2h0OiBUUG9pbnQpOiBJbnRlZ2VyCiAgICBiZWdpbgogICAgICBSZXN1bHQgOj0gMyAqIExlZnQuWCAtIExlZnQuWSAtIDMgKiBSaWdodC5YICsgUmlnaHQuWTsKICAgIGVuZCkpOwoKICBmb3IgaWIgOj0gMCB0byBIaWdoKEJMaXN0KSBkbwogICAgaWYgT2RkKGliKSB0aGVuCiAgICAgIEJQYWlyc1tpYl0gOj0gUG9pbnQoQkxpc3RbaWJdLCAtMSkKICAgIGVsc2UKICAgICAgQlBhaXJzW2liXSA6PSBQb2ludChCTGlzdFtpYl0sIDEpOwogIFRBcnJheS5Tb3J0PFRQb2ludD4oQlBhaXJzLCBURGVsZWdhdGVkQ29tcGFyZXI8VFBvaW50Pi5Db25zdHJ1Y3QoCiAgICBmdW5jdGlvbihjb25zdCBMZWZ0LCBSaWdodDogVFBvaW50KTogSW50ZWdlcgogICAgYmVnaW4KICAgICAgUmVzdWx0IDo9IDMgKiBMZWZ0LlggLSBMZWZ0LlkgLSAzICogUmlnaHQuWCArIFJpZ2h0Llk7CiAgICBlbmQpKTsKCiAgQ250QSA6PSAwOwogIENudEIgOj0gMDsKICBSZXMgOj0gMDsKICBpYSA6PSAwOwogIGliIDo9IDA7CiAgd2hpbGUgKGlhIDwgTGVuZ3RoKEFQYWlycykpIGFuZCAoaWIgPCBMZW5ndGgoQlBhaXJzKSkgZG8gYmVnaW4KICAgIFdyaXRlbG4oRm9ybWF0KCclZDolZCAoJWQpICAlZDolZCAoJWQpJywKICAgICAgW0FQYWlyc1tpYV0uWCwgQVBhaXJzW2lhXS5ZLCBDbnRBLCBCUGFpcnNbaWJdLlgsIEJQYWlyc1tpYl0uWSwgQ250Ql0pKTsKICAgIGlmIDMgKiBBUGFpcnNbaWFdLlggLSBBUGFpcnNbaWFdLlkgPD0gMyAqIEJQYWlyc1tpYl0uWCAtIEJQYWlyc1tpYl0uWSB0aGVuCiAgICBiZWdpbgogICAgICBDbnRBIDo9IENudEEgKyBBUGFpcnNbaWFdLlk7CiAgICAgIHMgOj0gJ21vdmUgQSc7CiAgICAgIGlmIEFQYWlyc1tpYV0uWSA8IDAgdGhlbiBiZWdpbgogICAgICAgIFJlcyA6PSBSZXMgKyBDbnRCOwogICAgICAgIHMgOj0gcyArIEZvcm1hdCgnIGFkZEIgJWQnLCBbQ250Ql0pOwogICAgICBlbmQ7CiAgICAgIEluYyhpYSk7CiAgICBlbmQKICAgIGVsc2UgYmVnaW4KICAgICAgQ250QiA6PSBDbnRCICsgQlBhaXJzW2liXS5ZOwogICAgICBzIDo9ICdtb3ZlIEInOwogICAgICBpZiBCUGFpcnNbaWJdLlkgPCAwIHRoZW4gYmVnaW4KICAgICAgICBSZXMgOj0gUmVzICsgQ250QTsKICAgICAgICBzIDo9IHMgKyBGb3JtYXQoJyBhZGRBICVkJywgW0NudEFdKTsKICAgICAgZW5kOwogICAgICBJbmMoaWIpOwogICAgZW5kOwogICAgV3JpdGVsbihzKTsKICBlbmQ7CiAgV3JpdGVsbihGb3JtYXQoJ1Jlc3VsdCA9ICVkJywgW1Jlc10pKTsKZW5kLg==