একজন লোক উত্তর-পশ্চিম কোণে বাস করে (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;
}
স্কোরিং:
- ইউটিএফ -8 জিতে সর্বনিম্ন বাইট গণনা।
- যদি আপনার কোডের চলমান সময়টি স্বতন্ত্র থাকে তবে
n
আপনার স্কোরটি 50% হ্রাস করুন।- এই সমস্ত বোনাস পেতে কেবল সমস্ত 1000000000 দিনের ফলাফল গণনা করবেন না বা অনুরূপ বোকা কিছু করবেন না । একটি কার্যকর অ্যালগরিদম খুঁজুন!
n
, আমার কোডটি সমস্ত 1000000000 দিনের ফলাফল গণনা করে, তারপরে ফলাফলটি আউটপুট দেয় n
, আমি কী এখনও -50% বোনাস পাব?