ধরুন আমাদের (x, y) কোঅর্ডিনেটস সম্বলিত ডেটা-পয়েন্টগুলোর একটি লিস্ট আছে, আমাদের চেক করতে হবে ডেটা-পয়েন্টগুলো স্ট্রেট লাইন তৈরি করছে কিনা। তাই যদি পয়েন্টগুলো [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7)] এর মতো হয়, তবে তারা স্ট্রেট লাইন তৈরি করছে।
এটি সমাধানের জন্য, আমরা প্রতিটি কনsekutিভ ডেটা-পয়েন্টের মধ্যে ডিফারেন্স নিব এবং স্লোপ বের করব। প্রথমটির জন্য স্লোপ বের করব। বাকি সব পয়েন্টের জন্য চেক করব স্লোপ একই কিনা। যদি একই হয়, তবে সিম্পলি true রিটার্ন করব, অন্যথায় false।
উদাহরণ
বুঝতে নিচের ইমপ্লিমেন্টেশনটি দেখুন −
#include <bits/stdc++.h> using namespace std; class Solution { public: int gcd(int a, int b){ return !b?a:gcd(b,a%b); } bool checkStraightLine(vector<vector<int>>& c) { bool ans =true; bool samex = true; bool samey = true; int a = c[1][0]-c[0][0]; int b = c[1][1]-c[0][1]; int cc = gcd(a,b); a/=cc; b/=cc; for(int i =1;i<c.size();i++){ int x = c[i][0]-c[i-1][0]; int y = c[i][1]-c[i-1][1]; int z = gcd(x,y); x/=z; y/=z; ans =ans &&(x == a )&& (y == b ); } return ans; } }; main(){ Solution ob; vector<vector<int>> c = {{1,2},{2,3},{3,4},{4,5},{5,6},{6,7}}; cout << ob.checkStraightLine(c); }
ইনপুট
[[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
আউটপুট
1 (1 indicates true)