τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🍭 大家好这里是Κιγιοτάκα-σενπάι , ένας προγραμματιστής που αγαπά τους αλγόριθμους
💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导
✨ Αυτή η σειρά σχεδιάζει να συνεχίσει να ενημερώνεται ερωτήσεις γραπτού τεστ Qiuzhao
👏 感谢大家的订阅➕ 和 喜欢💗
📧 清隆这边最近正在收集近一年半互联网笔试题汇总,有需要的小伙伴可以关注 Τέλος άρθρου Πάρτε την κρουαζιέρα της πριγκίπισσας~
Ο κ. Α έχει ένα κυκλικό παρτέρι, το οποίο χωρίζεται σε nnn περιοχή μπλοκ. Αρχικά ο κ. Α επέλεξε τρεις περιοχές στο παρτέρι για να φυτέψει τριαντάφυλλα.
Τώρα, ο κ. Α θέλει να χρησιμοποιήσει λειτουργίες κινητής τηλεφωνίας για να φτάσει στον ανθόκηποΙσορροπημένη κατάσταση。
Ισορροπημένη κατάσταση: Η απόσταση μεταξύ οποιωνδήποτε δύο περιοχών που φυτεύονται με τριαντάφυλλα δεν είναι μικρότερη από κκκ(Η απόσταση μεταξύ των παρακείμενων περιοχών είναι 1 1 1)。
Λειτουργία μετακίνησης: ανταλλαγή της κατάστασης των παρακείμενων περιοχών (η περιοχή τριαντάφυλλου γίνεται άδεια περιοχή, η κενή περιοχή γίνεται περιοχή τριαντάφυλλου).
Ταυτόχρονα, ο κύριος Α είναι ένα άτομο που δίνει μεγάλη σημασία στην αποτελεσματικότητα, επομένως ελπίζει ότι μπορείτε να χρησιμοποιήσετε τον ελάχιστο αριθμό κινήσεων για να κάνετε το παρτέρι να φτάσει σε μια ισορροπημένη κατάσταση.
Εισαγάγετε έναν θετικό ακέραιο αριθμό στην πρώτη γραμμή ttt, αναφέροντας τον αριθμό των ερωτήσεων.
Επόμενο ttt γραμμές, κάθε γραμμή περιέχει πέντε θετικούς ακέραιους αριθμούς nnn、 κκκ、 a 1 a_1ένα1、 a 2 a_2ένα2、 a 3 a_3ένα3, αντιπροσωπεύοντας αντίστοιχα τον αριθμό των περιοχών παρτέρι, την απαιτούμενη ελάχιστη απόσταση και την αρχική θέση των τριών περιοχών τριανταφυλλιάς.
παραγωγή ttt γραμμές, καθεμία από τις οποίες δίνει έναν ακέραιο αριθμό που αντιπροσωπεύει τον ελάχιστο αριθμό ανταλλαγών που απαιτούνται για να φέρει το παρτέρι σε ισορροπία.Εάν δεν μπορεί να επιτευχθεί ισορροπία, έξοδος − 1 -1 −1。
3
5 1 1 2 3
5 2 1 2 3
6 2 2 3 6
0
-1
1
1 ≤ t ≤ 1 0 4 1 leq t leq 10^41≤t≤104
1 ≤ n ≤ 1 0 9 1 leq n leq 10^91≤n≤109
1 ≤ k , a 1 , a 2 , a 3 ≤ n 1 leq k, a_1, a_2, a_3 leq n1≤κ,ένα1,ένα2,ένα3≤n
Αυτό το πρόβλημα μπορεί να λυθεί με την ανάλυση των συνθηκών ισορροπίας.
Πρώτον, εάν η απαιτούμενη ελάχιστη απόσταση κκκ Υπέρβαση του αριθμού των περιοχών κήπου nnn το ένα τρίτο του , τότε η συνθήκη δεν μπορεί να ικανοποιηθεί ανεξάρτητα από το τι, και αυτή τη στιγμή η έξοδος − 1 -1 −1。
Διαφορετικά, μπορούμε πρώτα να ταξινομήσουμε τις θέσεις των τριών τριαντάφυλλων περιοχών και στη συνέχεια να υπολογίσουμε την απόσταση μεταξύ των παρακείμενων περιοχών τριανταφυλλιάς.Στη συνέχεια, για κάθε απόσταση, αν είναι μικρότερη από κκκ, τότε απαιτείται μια λειτουργία κίνησης και ο αριθμός των κινήσεων είναι κκκ Η διαφορά από αυτή την απόσταση.
Τέλος, όταν όλες οι αποστάσεις πληρούν τις απαιτήσεις, το παρτέρι φτάνει σε μια ισορροπημένη κατάσταση και ο συνολικός αριθμός των κινήσεων μπορεί να βγει.
Η χρονική πολυπλοκότητα είναι O ( t log t ) O (t log t)Ο(tιδούσολt), η πολυπλοκότητα του χώρου είναι O ( 1 ) O (1)Ο(1)。
t = int(input())
for _ in range(t):
n, k, *a = map(int, input().split())
a.sort()
if k * 3 > n:
print(-1)
continue
b = [a[1] - a[0], a[2] - a[1], n - a[2] + a[0]]
ans = sum(max(0, k - d) for d in b)
print(ans)
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-- > 0) {
int n = sc.nextInt();
int k = sc.nextInt();
int[] a = new int[3];
for (int i = 0; i < 3; i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
if (k * 3 > n) {
System.out.println(-1);
continue;
}
int[] b = {a[1] - a[0], a[2] - a[1], n - a[2] + a[0]};
int ans = 0;
for (int d : b) {
ans += Math.max(0, k - d);
}
System.out.println(ans);
}
}
}
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, k, a[3];
cin >> n >> k >> a[0] >> a[1] >> a[2];
sort(a, a + 3);
if (k * 3 > n) {
cout << -1 << endl;
continue;
}
int b[] = {a[1] - a[0], a[2] - a[1], n - a[2] + a[0]};
int ans = 0;
for (int d : b) {
ans += max(0, k - d);
}
cout << ans << endl;
}
return 0;
}
Η κυρία Lu πρόσφατα εθίστηκε σε ένα μουσικό παιχνίδι που επικεντρώνεται στους ήχους του πιάνου.Στο παιχνίδι, κάθε πλακίδιο πιάνου έχει έναν αριθμό, με τον ελάχιστο αριθμό να είναι 1 1 1 . Αν χτυπήσετε πέντε πλακίδια πιάνου με αυξανόμενους αριθμούς στη σειρά, θα πάρετε ένα χρυσό νόμισμα.
Για παράδειγμα, αν η Miss Lu χτυπήσει τον αριθμημένο 1, 2, 3, 4, 5, 6
κομμάτια πιάνου, μετά για1, 2, 3, 4, 5
Για αυτά τα πέντε μπλοκ με διαδοχικούς αυξανόμενους αριθμούς, θα πάρει ένα χρυσό νόμισμα.
Όταν ένα επίπεδο έχει προχωρήσει για μεγάλο χρονικό διάστημα, ο αριθμός θα μηδενιστεί Ο αριθμός επαναφοράς θα αλλάξει από 1 1 1 αρχή. Έτσι, για ένα επίπεδο, είναι δυνατό να χτυπήσετε πολλά πλακίδια πιάνου με τον ίδιο αριθμό αλλά διαφορετικά.
Σημειώστε ότι μόνο πέντε πλακίδια πιάνου με συνεχώς αυξανόμενους αριθμούς στο ίδιο επίπεδο απαιτούνται για την απόκτηση χρυσών νομισμάτων.
Λόγω της ανώτερης δύναμης της Miss Lu, έχει περάσει τέσσερα επίπεδα.Η Miss Lu έχει πλέον τέσσερα επίπεδα δυσκολίας AAΕΝΑ、 ΒΒσι、 CCντο και DDρε Αριθμός του χτυπήματος πλακιδίων για πιάνο Πόσα χρυσά νομίσματα μπορεί να πάρει η κυρία Lu συνολικά σε αυτά τα τέσσερα επίπεδα;
Η πρώτη γραμμή περιέχει έναν θετικό ακέραιο nnn( 1 ≤ n ≤ 1 0 5 1 leq n leq 10^51≤n≤105), που αντιπροσωπεύει τον συνολικό αριθμό των πλακιδίων πιάνου που χτύπησε η Miss Lu στα τέσσερα επίπεδα.
Επόμενο nnn γραμμές, εισαγάγετε τρεις παραμέτρους σε κάθε γραμμή: αι α_ιέναΕγώ、 bi b_iσιΕγώ( 1 ≤ ai , bi ≤ 1 0 9 1 leq a_i, b_i leq 10^91≤έναΕγώ,σιΕγώ≤109)και ci c_iντοΕγώ( ci ∈ { ′ A ′ , ′ B ′ , ′ C ′ , ′ D ′ } c_i σε {'A', 'B', 'C', 'D'}ντοΕγώ∈{′ΕΝΑ′,′σι′,′ντο′,′ρε′}), αντιπροσωπεύοντας αντίστοιχα τον αριθμό, την ποσότητα και το επίπεδο κάθε πλακιδίου πιάνου.
Δώστε έναν ακέραιο αριθμό που αντιπροσωπεύει τον συνολικό αριθμό των χρυσών νομισμάτων που μπορεί να αποκτήσει η Miss Lu.
11
1 1 A
2 2 A
3 2 A
4 2 A
5 2 A
6 1 A
7 1 B
8 2 B
9 2 B
10 2 B
11 1 B
3
Για επίπεδα AAΕΝΑ,πρώτα 1, 2, 3, 4, 5
Μπορείτε να πάρετε ένα χρυσό νόμισμα και μετά2, 3, 4, 5, 6
Μπορείτε να πάρετε ένα άλλο χρυσό νόμισμα.
Για επίπεδα ΒΒσι,7, 8, 9, 10, 11
Μπορείτε να πάρετε ένα χρυσό νόμισμα.
Επομένως, συνολικά 3 3 3 χρυσά νομίσματα.
5
1 1 C
2 2 C
3 2 C
4 2 C
6 1 C
0
στο επίπεδο CCντο Σε , δεν μπορούν να ληφθούν πέντε διαδοχικοί αυξανόμενοι αριθμοί, επομένως ο αριθμός των χρυσών νομισμάτων είναι 0 0 0。
Αυτό το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας πίνακες κατακερματισμού και ταξινόμηση. Οι συγκεκριμένες ιδέες είναι οι εξής:
Χρησιμοποιήστε τον πίνακα κατακερματισμού cnt
Καταγράψτε πόσες φορές εμφανίζεται κάθε αριθμός σε κάθε επίπεδο. Το κλειδί είναι ο συνδυασμός του χαρακτήρα επιπέδου και του αριθμού και η τιμή είναι ο αριθμός των φορών που εμφανίζεται ο αριθμός στο επίπεδο.
Ταξινομήστε τα δεδομένα εισόδου σύμφωνα με τους χαρακτήρες και τους αριθμούς επιπέδου για να βεβαιωθείτε ότι οι αριθμοί του ίδιου επιπέδου είναι διαδοχικοί.
Διασχίστε τα ταξινομημένα δεδομένα και για κάθε αριθμό, προσδιορίστε εάν οι πέντε διαδοχικοί αριθμοί του υπάρχουν όλοι στο τρέχον επίπεδο. Εάν υπάρχει, πάρτε την ελάχιστη τιμή του αριθμού των εμφανίσεων μεταξύ αυτών των πέντε αριθμών, μετρήστε την στην απάντηση και αφαιρέστε την ελάχιστη τιμή από τον αριθμό των εμφανίσεων αυτών των πέντε αριθμών.
Η τελική απάντηση είναι το άθροισμα όλων των χρυσών νομισμάτων που πληρούν τις προϋποθέσεις.
Η χρονική πολυπλοκότητα είναι O ( n log n ) O (n log n)Ο(nιδούσολn), η πολυπλοκότητα του χώρου είναι O ( n ) O(n)Ο(n)。
from collections import defaultdict
import sys
def solve():
n = int(input())
cnt = defaultdict(int)
vec = []
for _ in range(n):
a, b, c = input().split()
a, b = int(a), int(b)
cnt[c + str(a)] += b
vec.append((c, a))
vec.sort()
ans = 0
for v in vec:
arr = [v[0] + str(v[1] + i) for i in range(5)]
t = min(cnt[a] for a in arr)
ans += t
for a in arr:
cnt[a] -= t
print(ans)
if __name__ == '__main__':
solve()
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Map<String, Integer> cnt = new HashMap<>();
List<int[]> vec = new ArrayList<>();
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
int a = Integer.parseInt(input[0]);
int b = Integer.parseInt(input[1]);
String c = input[2];
String key = c + a;
cnt.put(key, cnt.getOrDefault(key, 0) + b);
vec.add(new int[]{c.charAt(0), a});
}
vec.sort((x, y) -> {
if (x[0] != y[0]) {
return x[0] - y[0];
}
return x[1] - y[1];
});
long ans = 0;
for (int[] v : vec) {
String[] arr = new String[5];
for (int i = 0; i < 5; i++) {
arr[i] = (char) v[0] + String.valueOf(v[1] + i);
}
int t = Integer.MAX_VALUE;
for (String a : arr) {
t = Math.min(t, cnt.getOrDefault(a, 0));
}
ans += t;
for (String a : arr) {
cnt.put(a, cnt.get(a) - t);
}
}
System.out.println(ans);
}
}
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <climits>
using namespace std;
using ll = long long;
int main() {
int n;
cin >> n;
map<string, ll> cnt;
vector<pair<string, int>> vec;
for (int i = 1; i <= n; i++) {
int a, b;
string c;
cin >> a >> b >> c;
cnt[c + to_string(a)] += b;
vec.push_back({c, a});
}
sort(vec.begin(), vec.end());
ll ans = 0;
for (auto& v : vec) {
vector<string> arr;
for (int i = 0; i < 5; i++) {
arr.push_back(v.first + to_string(v.second + i));
}
ll t = LLONG_MAX;
for (auto& a : arr) {
t = min(t, cnt[a]);
}
ans += t;
for (auto& a : arr) {
cnt[a] -= t;
}
}
cout << ans << endl;
return 0;
}
Η δεσποινίς Λου έχει μήκος nnn σε έναν κήπο φυτεμένο με nnn Φυτέψτε διαφορετικά λουλούδια.Κάθε λουλούδι έχει μια αξία ομορφιάς αι α_ιέναΕγώ。
Η κυρία Λου νιώθει ότι ένας όμορφος κήπος πρέπει να είναι μοναδικός, έχει δηλαδή n − 1 n-1n−1 Η αξία ομορφιάς των φυτεμένων λουλουδιών είναι η ίδια, μόνο 1 1 1 Η αξία ομορφιάς των φυτεμένων λουλουδιών είναι διαφορετική από άλλα λουλούδια.
Για κάθε επέμβαση, η Miss Lu μπορεί να επιλέξει ένα λουλούδι και να αυξήσει την ομορφιά του. 1 1 1 ή πλην 1 1 1。
Τώρα, η κυρία Lu θέλει να μάθει πόσες επεμβάσεις χρειάζονται για να γίνει ο κήπος μοναδικός.
Η πρώτη γραμμή περιέχει έναν θετικό ακέραιο nnn, υποδεικνύοντας το μήκος του κήπου.
Η δεύτερη γραμμή περιέχει nnn θετικός ακέραιος a 1 , a 2 , … , an a_1, a_2, ldots, a_nένα1,ένα2,…,έναn, υποδεικνύοντας την αξία ομορφιάς κάθε λουλουδιού.
Εξάγει έναν ακέραιο που αντιπροσωπεύει τον ελάχιστο αριθμό πράξεων που απαιτούνται για να γίνει ο κήπος μοναδικός.
4
1 2 3 4
2
Η βέλτιστη λύση είναι να γίνετε ο διάμεσος και να απαριθμήσετε όλα τα κόστη για να γίνετε διάμεσος.
Η χρονική πολυπλοκότητα είναι O ( n log n ) O (n log n)Ο(nιδούσολn), η πολυπλοκότητα του χώρου είναι O ( n ) O(n)Ο(n)。
def main():
n = int(input())
w = list(map(int, input().split()))
w.sort()
if w[0] == w[n - 1]:
print("1")
return
s1, s2 = 0, 0
m1, m2 = w[(n - 1) // 2], w[(n + 1) // 2]
for i in range(n - 1):
s1 += abs(m1 - w[i])
for i in range(1, n):
s2 += abs(m2 - w[i])
print(min(s1, s2))
if __name__ == "__main__":
main()
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] w = new int[n];
for (int i = 0; i < n; i++)
w[i] = scanner.nextInt();
Arrays.sort(w);
if (w[0] == w[n - 1]) {
System.out.println("1");
return;
}
long s1 = 0, s2 = 0;
int m1 = w[(n - 1) / 2], m2 = w[(n + 1) / 2];
for (int i = 0; i < n - 1; i++)
s1 += Math.abs(m1 - w[i]);
for (int i = 1; i < n; i++)
s2 += Math.abs(m2 - w[i]);
System.out.println(Math.min(s1, s2));
}
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 100010;
int main() {
int n, w[N];
cin >> n;
for (int i = 0; i < n; i++)
cin >> w[i];
sort(w, w + n);
if (w[0] == w[n - 1]) {
cout << "1" << endl;
return 0;
}
ll s1 = 0, s2 = 0;
int m1 = w[(n - 1) / 2], m2 = w[(n + 1) / 2];
for (int i = 0; i < n - 1; i++)
s1 += abs(m1 - w[i]);
for (int i = 1; i < n; i++)
s2 += abs(m2 - w[i]);
cout << min(s1, s2) << endl;
return 0;
}
Η LYA έχει αποκτήσει πρόσφατα εμμονή με τη ζωγραφική χαρακτήρων. Πιστεύει ότι η ομορφιά μιας ζωγραφικής χαρακτήρων είναι ίση με τον αριθμό των διαδοχικών πανομοιότυπων συμβόλων στη ζωγραφική των χαρακτήρων.Για παράδειγμα, η αισθητική της ζωγραφικής του χαρακτήρα «aabbccddef» είναι 6 6 6。
Ο φίλος της LYA της έδωσε ένα 0 0 0 και 1 1 1 Η LYA, που έχει γίνει εμμονή με το σχέδιο χαρακτήρων, θέλει να μάθει όλες τις χορδές που αποτελούνται από αυτή τη χορδή.υποσυμβολοσειράΠοιο είναι το άθροισμα της αισθητικής;
Σημείωση: Υπάρχουν C n + 1 2 C^{2}_{n+1}ντοn+12 υποσυμβολοσειρά.
Εισαγάγετε έναν θετικό ακέραιο αριθμό στην πρώτη γραμμή nnn, υποδεικνύοντας το μήκος της χορδής.
Το μήκος της δεύτερης γραμμής είναι nnn του 01 01 01 Σειρά.
Εξαγωγή ακέραιου αριθμού που αντιπροσωπεύει το άθροισμα της αισθητικής όλων των υποσυμβολοσειρών.
4
0011
14
1 ≤ n ≤ 2 × 1 0 5 1 leq n leq 2 φορές 10^51≤n≤2×105
Αυτό το πρόβλημα μπορεί να λυθεί μέσω της ιδέας του αθροίσματος του προθέματος.
Αρχικά, μπορούμε να υπολογίσουμε τον συνολικό αριθμό των υποσυμβολοσειρών της συμβολοσειράς, δηλαδή n ( n + 1 ) 2 frac{n(n+1)}{2}2n(n+1)。
Στη συνέχεια, επαναλαμβάνουμε τη συμβολοσειρά και χρησιμοποιούμε τις μεταβλητές llμεγάλο Καταγράψτε την αρχική θέση των τρεχόντων διαδοχικών πανομοιότυπων συμβόλων, μεταβλητή rrr Καταγράψτε την τρέχουσα τοποθεσία.πότε s [ r ] ≠ s [ r − 1 ] s[r] neq s[r-1]μικρό[r]=μικρό[r−1] Όταν , σημαίνει ότι εμφανίζεται ένα νέο σύμβολο και μπορούμε να υπολογίσουμε [ l , r ) [l, r)[μεγάλο,r) Ο αριθμός των υποσυμβολοσειρών στο διάστημα, δηλαδή ( r − l ) ( r − l + 1 ) 2 frac{(rl)(r-l+1)}{2}2(r−μεγάλο)(r−μεγάλο+1), αφαιρέστε το από τον συνολικό αριθμό των υποσυμβολοσειρών.
Τέλος, αυτό που απομένει είναι ο αριθμός όλων των όμορφων υποσυμβολοσειρών, που μπορούν να βγουν.
χρονική πολυπλοκότητα O ( n ) O(n)Ο(n), πολυπλοκότητα χώρου O ( 1 ) O (1)Ο(1)。
def cal(length):
return length * (length + 1) // 2
n = int(input())
s = input() + '#'
ans = 0
total = cal(n)
l = 0
for r in range(1, n + 1):
if s[r] != s[r - 1]:
ans += total - cal(l) - cal(n - r)
l = r
print(ans)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next() + "#";
long ans = 0;
long total = cal(n);
int l = 0;
for (int r = 1; r <= n; r++) {
if (s.charAt(r) != s.charAt(r - 1)) {
ans += total - cal(l) - cal(n - r);
l = r;
}
}
System.out.println(ans);
}
private static long cal(int len) {
return (long) len * (len + 1) / 2;
}
}
#include <iostream>
#include <string>
using namespace std;
using ll = long long;
ll cal(int len) {
return (ll) len * (len + 1) / 2;
}
int main() {
int n;
cin >> n;
string s;
cin >> s;
s += "#";
ll ans = 0;
ll total = cal(n);
int l = 0;
for (int r = 1; r <= n; r++) {
if (s[r] != s[r - 1]) {
ans += total - cal(l) - cal(n - r);
l = r;
}
}
cout << ans << endl;
return 0;
}
Η Miss Lu έχει ένα πολύ μεγάλο σχέδιο, θέλει να διαγράψει όλες τις συστοιχίες στον κόσμο! Αλλά η ικανότητά της είναι περιορισμένη. Μπορεί να επιλέξει μόνο δύο πανομοιότυπα στοιχεία στον πίνακα κάθε φορά και να διαγράψει όλα τα στοιχεία μεταξύ τους (συμπεριλαμβανομένων των ίδιων των δύο στοιχείων).
Τώρα, μπροστά από τη δεσποινίς Λου, υπάρχει ένα μήκος του nnn συστοιχία από ααένα, θέλει να μάθει πόσα στοιχεία σε αυτόν τον πίνακα μπορεί να διαγράψει το πολύ.
Η πρώτη γραμμή περιέχει έναν θετικό ακέραιο nnn, αντιπροσωπεύει έναν πίνακα ααένα μήκος.
Η δεύτερη γραμμή περιέχει nnn θετικοί ακέραιοι χωρισμένοι με χώρο a 1 , a 2 , … , an a_1, a_2, ldots, a_nένα1,ένα2,…,έναn, αντιπροσωπεύει έναν πίνακα ααένα Στοιχεία.
Καταχωρίστε έναν ακέραιο αριθμό, υποδεικνύοντας τον μέγιστο αριθμό στοιχείων που μπορεί να διαγράψει η Miss Lu.
4
1 2 1 2
1
Αυτό το πρόβλημα μπορεί να λυθεί χρησιμοποιώντας τις ιδέες της ταξινόμησης και των διπλών δεικτών.
Αρχικά, μπορούμε να μετατρέψουμε τον πίνακα ααένα Τα στοιχεία σε ταξινομούνται κατά τιμή και καταγράφεται η αρχική θέση κάθε στοιχείου στον πίνακα. Ο σκοπός αυτού είναι να μας διευκολύνει να βρούμε το εύρος θέσης του ίδιου στοιχείου.
Στη συνέχεια, μπορούμε να επαναλάβουμε τον ταξινομημένο πίνακα και, για κάθε στοιχείο, να βρούμε το εύρος θέσης όλων των στοιχείων που έχουν την ίδια τιμή με αυτό [ L , R ] [L, R][μεγάλο,R] . Τα στοιχεία σε αυτό το εύρος μπορούν να διαγραφούν επειδή βρίσκονται ανάμεσα σε δύο πανομοιότυπα στοιχεία στον αρχικό πίνακα.Μπορούμε να υπολογίσουμε το εύρος [ L , R ] [L, R][μεγάλο,R] Ο αριθμός των στοιχείων σε R − L − 1 R - L - 1R−μεγάλο−1, συγκρίνετε το με τον τρέχοντα μέγιστο αριθμό διαγραμμένων στοιχείων και ενημερώστε τη μέγιστη τιμή.
Τέλος, εξάγετε τον μέγιστο αριθμό διαγραμμένων στοιχείων.
Η χρονική πολυπλοκότητα είναι O ( n log n ) O (n log n)Ο(nιδούσολn) , κυρίως η χρονική πολυπλοκότητα της διαλογής.Η πολυπλοκότητα του χώρου είναι O ( n ) O(n)Ο(n), χρησιμοποιείται για την αποθήκευση της αρχικής θέσης του στοιχείου.
n = int(input())
a = list(map(int, input().split()))
idx = sorted(range(n), key=lambda x: a[x])
ans = 0
i = 0
while i < n:
j = i
L, R = n, -1
while j < n and a[idx[j]] == a[idx[i]]:
L = min(L, idx[j])
R = max(R, idx[j])
j += 1
ans = max(ans, R - L - 1)
i = j
print(ans)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
Integer[] idx = new Integer[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
idx[i] = i;
}
Arrays.sort(idx, Comparator.comparingInt(i -> a[i]));
int ans = 0;
for (int i = 0; i < n;) {
int j = i;
int L = n, R = -1;
while (j < n && a[idx[j]] == a[idx[i]]) {
L = Math.min(L, idx[j]);
R = Math.max(R, idx[j]);
j++;
}
ans = Math.max(ans, R - L - 1);
i = j;
}
System.out.println(ans);
}
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
vector<int> idx(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
idx[i] = i;
}
sort(idx.begin(), idx.end(), [&](int i, int j) {
return a[i] < a[j];
});
int ans = 0;
for (int i = 0; i < n;) {
int j = i;
int L = n, R = -1;
while (j < n && a[idx[j]] == a[idx[i]]) {
L = min(L, idx[j]);
R = max(R, idx[j]);
j++;
}
ans = max(ans, R - L - 1);
i = j;
}
cout << ans << endl;
return 0;
}
Εδώ θα ήθελα να σας προτείνω τη φθινοπωρινή καμπίνα στρατολόγησης των ηλικιωμένων για το check-in.
[Autumn Recruitment Check-in] Day01-Customized Sorting-CSDN Blog
[Autumn Recruitment Check-in] Day02-The Strongest Two-Section Series-Binary Search-CSDN Blog
[Autumn Recruitment Check-in] Day03-The Stronest Two-Point Series-Two-Point Answer-CSDN Blog
Παρέχουμε online κριτικές πραγματικών ερωτήσεων από προηγούμενους μεγάλους κατασκευαστές Οι ενδιαφερόμενοι φίλοι μπορούν να στείλουν ένα ιδιωτικό μήνυμα στην Qinglong για να μάθουν περισσότερα.
Και άλλα! εκτός!