আমি একটি অ্যারে আছে 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
? @ শেফ - বাছাই করা মূল "দূরত্ব" সম্পর্ককে ধ্বংস করে দেবে।