บทนำ
คุณได้รับมอบหมายให้เขียนโปรแกรมที่แบ่งอาร์เรย์จำนวนเต็มสี่เหลี่ยมเท่า ๆ กันครึ่งหนึ่ง (ไม่ว่าด้วยเหตุผลใดก็ตาม) งานนี้มีการคำนวณอย่างเข้มข้น แต่โชคดีที่คุณมีเครื่องดูอัลคอร์เพื่อทำการคำนวณ เพื่อให้ได้ประโยชน์สูงสุดจากการขนานคุณตัดสินใจที่จะแบ่งโปรแกรมเท่า ๆ กันครึ่งหนึ่งแล้วปล่อยให้แต่ละคอร์รันส่วนใดส่วนหนึ่งโดยไม่ขึ้นต่อกัน
อินพุตและเอาต์พุต
ข้อมูลของคุณเป็นอาร์เรย์ 2 มิติรูปสี่เหลี่ยมผืนผ้าของจำนวนเต็มที่ไม่ใช่ค่าลบอย่างน้อย1 × 1ซึ่งถ่ายในรูปแบบที่เหมาะสม การแบ่งอาเรย์ดังกล่าวทำได้โดยการแบ่งแต่ละแถวในแนวนอนเป็นส่วนนำหน้าและคำต่อท้าย (ซึ่งอาจว่างเปล่า) เพื่อให้การแยกถูกต้องสองแถวที่อยู่ติดกันจะต้องถูกแยกที่ดัชนีเดียวกันหรือดัชนีที่อยู่ติดกัน ตัวอย่างเช่นพิจารณาอาร์เรย์
2 4 5 5 6 3
9 7 1 7 7 0
0 0 3 6 7 8
1 2 4 7 6 1
6 6 8 2 0 0
นี่คือการแยกที่ถูกต้อง:
2;4 5 5 6 3
;9 7 1 7 7 0
;0 0 3 6 7 8
1;2 4 7 6 1
6 6;8 2 0 0
นี่คือการแยกที่ถูกต้อง:
2 4 5 5 6 3;
9 7 1 7 7;0
0 0 3 6 7;8
1 2 4 7;6 1
6 6 8;2 0 0
นี่ไม่ใช่การแยกที่ถูกต้อง:
2 4;5 5 6 3
9 7 1;7 7 0
0;0 3 6 7 8
1 2;4 7 6 1
6 6;8 2 0 0
ผลลัพธ์ของคุณจะเป็นค่าต่ำสุดของ
abs(sum_of_prefixes - sum_of_suffixes)
มากกว่าตัวต่อที่ถูกต้องทั้งหมดของอินพุต
กฎและการให้คะแนน
คุณจะต้องเขียนสองโปรแกรม (ทั้งโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ) ในภาษาเดียวกันซึ่งจะต้องไม่มีรหัสที่ใช้ร่วมกันระหว่างพวกเขา ขอเรียกว่าP1และP2 โปรแกรมP1ใช้เวลาอาร์เรย์อินพุตและเอาต์พุตบางสิ่งบางอย่าง โปรแกรมP2ใช้สิ่งนี้เป็นอินพุตและเอาต์พุตคำตอบของภารกิจด้านบนสำหรับอาร์เรย์อินพุต
คะแนนของคุณคือจำนวนสูงสุดของไบต์นับเป็นP1และP2คะแนนที่ต่ำกว่าจะดีกว่า
คำอธิบายบางอย่าง:
- คุณสามารถเขียนสอง prorgams เต็มหนึ่งฟังก์ชันและหนึ่งโปรแกรมเต็มหรือสองฟังก์ชั่น
- ในกรณีที่สองโปรแกรมเต็มรูปแบบการส่งออกทั้งหมดของP1จะถูกป้อนเข้าP2เป็น input
P1 | P2
ในขณะที่ท่อยูนิกซ์ โปรแกรมจะต้องทำงานอย่างถูกต้องหากคอมไพล์ / ตีความจากไฟล์ต้นฉบับสองไฟล์แยกกัน - หากโปรแกรมใดโปรแกรมหนึ่งเป็นฟังก์ชั่นโปรแกรมจะถูกแปลงเป็นโปรแกรมแบบเต็มโดยการเพิ่มรหัสสำเร็จรูปที่จำเป็นและใช้กฎข้างต้น โดยเฉพาะอย่างยิ่งฟังก์ชั่นที่สองไม่สามารถใช้ฟังก์ชั่นเสริมที่ใช้ร่วมกันงบการนำเข้าที่ใช้ร่วมกันหรือตัวแปรทั่วโลกที่ใช้ร่วมกัน
กรณีทดสอบ
[[1]] -> 1
[[4,5],[8,3]] -> 4
[[8],[11],[8],[10],[4]] -> 1
[[5,7,0,9,11,2,1]] -> 7
[[146,194,71,49],[233,163,172,21],[121,173,14,302],[259,169,26,5],[164,30,108,37],[88,55,15,2]] -> 3
[[138,2,37,2],[168,382,33,77],[31,199,7,15],[192,113,129,15],[172,88,78,169],[28,6,97,197]] -> 7
[[34,173,9,39,91],[169,23,56,74,5],[40,153,80,60,28],[8,34,102,60,32],[103,88,277,4,2]] -> 0
[[65,124,184,141],[71,235,82,51],[78,1,151,201],[12,24,32,278],[38,13,10,128],[9,174,237,113]] -> 2
[[164,187,17,0,277],[108,96,121,263,211],[166,6,57,49,73],[90,186,26,82,138],[173,60,171,265,96]] -> 8