আমি একটি অ্যারে আছে a[n]। নম্বরটি nআমাদের দ্বারা প্রবেশ করা হয়েছে। আমার ন্যূনতম পণ্যটি খুঁজে পেতে হবে a[i]এবং a[j]যদি:
1) abs(i - j) > k
2) a[i] * a[j]হ্রাস করা হয়
এখানে আমার সমাধান (খুব নিষ্পাপ):
#include <iostream>
using namespace std;
#define ll long long
int main() {
ll n,k; cin >> n >> k;
ll a[n]; for(ll i=0;i<n;i++) cin >> a[i];
ll mn; bool first = true;
for(ll i=0;i<n;i++) {
for(ll j=0;j<n;j++) {
if(i!=j)
if(abs(i-j) > k) {
if(first) {
mn = a[i]*a[j];
first = false;
} else if(a[i]*a[j] < mn) mn = a[i]*a[j];
}
}
}
cout << mn << endl;
}
তবে আমি জানতে চাই যে দূরত্ব সহ কোনও ন্যূনতম পণ্য সন্ধানের কোনও দ্রুত উপায় আছে কিনা?
if (i!=j) if (abs(i - j) > k)বাদ দেওয়া যায়। কেবলমাত্র আই + কে + 1: এ অভ্যন্তরীণ লুপটি শুরু করুন for (ll j = i + k + 1; j < n; ++j)। প্রারম্ভিক উদাহরণস্বরূপ firstযদি এর সাথে চেক করা যায় তবে mnতাও মুছে ফেলা যায় mn = a[0] * a[k + 1];। (সম্ভবত, এই বুলেট-প্রুফ তৈরি করতে প্রথমে তার kবিরুদ্ধে চেক করা উচিত n)) তবে এটি এখনও ও (N²)। এটি অবশ্যই দ্রুত করণীয় হতে পারে ...
std::vector? @ শেফ - বাছাই করা মূল "দূরত্ব" সম্পর্ককে ধ্বংস করে দেবে।