คนที่อาศัยอยู่ในมุมทิศตะวันตกเฉียงเหนือ(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, และwn
ใน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% อีกหรือไม่