คนที่อาศัยอยู่ในมุมทิศตะวันตกเฉียงเหนือ(0, 0)
ของเมืองที่มีความสูงและความกว้างh
w
ทุกวันเขาเดินจากบ้านไปชายแดน(?, w)
หรือ(h, ?)
. ในตัวอย่างต่อไปนี้ชายผู้นี้ไปถึง(3, 3)
วันนี้
(0, 0) +--+ + + . (0, 4)
|
+ +--+--+ .
|
+ + + + .
|
(3, 0) . . . . . (3, 4)
ชายคนนั้นบันทึกแต่ละจุดเล็กน้อย ( +
ในตัวอย่างด้านบน) ทุกครั้งที่เขาไปถึงจุดหนึ่งเขาจะไปทางทิศตะวันออกถ้าบิตอยู่1
ทางทิศใต้ บิตพลิกหลังจากเขาออกไป ตัวอย่างเช่น:
Day 1: 1--0 1 1 Day 2: 0 1 1 1 Day 3: 1--1--1--1-- Day 4: 0 0 0 0
| | |
0 1--0 0 0 0 1 0 1 0 1 0 1--0 1 0
| | |
1 0 1--0 1--0 0 1 0 1 0 1 0 1--0 1
| | |
Destination: (3, 3) Destination: (3, 1) Destination: (0, 4) Destination: (3, 2)
กำหนดขนาดของเมืองและบันทึกของชายคำนวณปลายทางของผู้ชายหลังจากn
วัน
การป้อนข้อมูล:
ในบรรทัดแรกมีสามจำนวนเต็มh
, และw
n
ในh
บรรทัดต่อไปนี้เป็นw
จำนวนเต็มแสดงถึงบันทึกของมนุษย์
h <= 1000, w <= 1000, n <= 1000000000
เอาท์พุท:
จำนวนเต็มสองจำนวนแสดงถึงปลายทางของมนุษย์หลังจากn
ผ่านไปหลายวัน
ตัวอย่างอินพุต:
3 4 3
1 0 1 1
0 1 0 0
1 0 1 0
ตัวอย่างผลลัพธ์:
0 4
รหัสตัวอย่าง:
#include <iostream>
using namespace std;
bool d[1000][1000];
int main(){
int h, w, n;
cin >> h >> w >> n;
for(int i = 0; i < h; i++)
for(int j = 0; j < w; j++)
cin >> d[i][j];
int i, j;
while(n--)
for(i = 0, j = 0; i < h && j < w;){
bool &b = d[i][j];
d[i][j] ? j++ : i++;
b = !b;
}
cout << i << " " << j << endl;
}
เกณฑ์การให้คะแนน:
- จำนวนไบต์ต่ำสุดในการชนะ UTF-8
- ถ้าเวลาทำงานของรหัสของคุณเป็นอิสระจาก
n
ลดคะแนนของคุณ 50%- อย่าเพียงคำนวณผลลัพธ์ทั้งหมด 1000000000 วันหรือทำสิ่งที่คล้ายคลึงกันอย่างโง่เพื่อรับโบนัสนี้ ค้นหาอัลกอริทึมที่มีประสิทธิภาพ!
n
รหัสของฉันจะคำนวณผลลัพธ์ทั้งหมด 1000000000 วันจากนั้นแสดงผลลัพธ์n
ฉันจะยังได้รับโบนัส -50% อีกหรือไม่