↵
[problem:↵
↵
import java.lang.*;↵
import java.io.*;↵
import java.util.*;↵
↵
public class B {↵
static class FastReader {↵
BufferedReader br;↵
StringTokenizer st;↵
↵
public FastReader() {↵
try {↵
br = new BufferedReader(↵
new FileReader("input.txt"));↵
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));↵
System.setOut(out);↵
} catch (Exception e) {↵
br = new BufferedReader(new InputStreamReader(System.in));↵
}↵
}↵
↵
String next() {↵
while (st == null || !st.hasMoreElements()) {↵
try {↵
st = new StringTokenizer(br.readLine());↵
} catch (IOException e) {↵
e.printStackTrace();↵
}↵
}↵
return st.nextToken();↵
}↵
↵
int nextInt() {↵
return Integer.parseInt(next());↵
}↵
↵
long nextLong() {↵
return Long.parseLong(next());↵
}↵
↵
double nextDouble() {↵
return Double.parseDouble(next());↵
}↵
↵
String nextLine() {↵
String str = "";↵
try {↵
str = br.readLine();↵
} catch (IOException e) {↵
e.printStackTrace();↵
}↵
return str;↵
}↵
}↵
static class Rating{↵
int rat;↵
int indx;↵
Rating(int r, int in){↵
rat = r;↵
indx = in;↵
}↵
}↵
// end of fast i/o code↵
public static void main(String[] args) {↵
FastReader reader = new FastReader();↵
int t = reader.nextInt();↵
while(t-->0){↵
int n = reader.nextInt();↵
int ratings[] = new int[n];↵
for(int indx = 0; indx<n; indx++){↵
ratings[indx] = reader.nextInt();↵
}↵
String likeDislike = reader.nextLine();↵
// System.out.println(likeDislike);↵
ArrayList<Rating> highRat = new ArrayList<>();↵
ArrayList<Rating> lowRat = new ArrayList<>();↵
for(int indx = 0; indx<n; indx++){↵
char rat = likeDislike.charAt(indx);↵
if(rat == '0'){↵
lowRat.add(new Rating(ratings[indx], indx));↵
}else{↵
highRat.add(new Rating(ratings[indx], indx));↵
}↵
}↵
Collections.sort(highRat, (a, b)->b.rat - a.rat);↵
Collections.sort(lowRat, (a, b)->b.rat - a.rat);↵
// for(Rating r : highRat){↵
// System.out.print(r.rat+" ");↵
// }↵
↵
// System.out.println();↵
int maxRat = n, currRat = maxRat;↵
for(Rating r : highRat){↵
ratings[r.indx] = currRat--;↵
}↵
for(Rating r : lowRat){↵
ratings[r.indx] = currRat--;↵
}↵
for(int r : ratings){↵
System.out.print(r+" ");↵
}↵
System.out.println();↵
}↵
}↵
}]
[problem:↵
↵
import java.lang.*;↵
import java.io.*;↵
import java.util.*;↵
↵
public class B {↵
static class FastReader {↵
BufferedReader br;↵
StringTokenizer st;↵
↵
public FastReader() {↵
try {↵
br = new BufferedReader(↵
new FileReader("input.txt"));↵
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));↵
System.setOut(out);↵
} catch (Exception e) {↵
br = new BufferedReader(new InputStreamReader(System.in));↵
}↵
}↵
↵
String next() {↵
while (st == null || !st.hasMoreElements()) {↵
try {↵
st = new StringTokenizer(br.readLine());↵
} catch (IOException e) {↵
e.printStackTrace();↵
}↵
}↵
return st.nextToken();↵
}↵
↵
int nextInt() {↵
return Integer.parseInt(next());↵
}↵
↵
long nextLong() {↵
return Long.parseLong(next());↵
}↵
↵
double nextDouble() {↵
return Double.parseDouble(next());↵
}↵
↵
String nextLine() {↵
String str = "";↵
try {↵
str = br.readLine();↵
} catch (IOException e) {↵
e.printStackTrace();↵
}↵
return str;↵
}↵
}↵
static class Rating{↵
int rat;↵
int indx;↵
Rating(int r, int in){↵
rat = r;↵
indx = in;↵
}↵
}↵
// end of fast i/o code↵
public static void main(String[] args) {↵
FastReader reader = new FastReader();↵
int t = reader.nextInt();↵
while(t-->0){↵
int n = reader.nextInt();↵
int ratings[] = new int[n];↵
for(int indx = 0; indx<n; indx++){↵
ratings[indx] = reader.nextInt();↵
}↵
String likeDislike = reader.nextLine();↵
// System.out.println(likeDislike);↵
ArrayList<Rating> highRat = new ArrayList<>();↵
ArrayList<Rating> lowRat = new ArrayList<>();↵
for(int indx = 0; indx<n; indx++){↵
char rat = likeDislike.charAt(indx);↵
if(rat == '0'){↵
lowRat.add(new Rating(ratings[indx], indx));↵
}else{↵
highRat.add(new Rating(ratings[indx], indx));↵
}↵
}↵
Collections.sort(highRat, (a, b)->b.rat - a.rat);↵
Collections.sort(lowRat, (a, b)->b.rat - a.rat);↵
// for(Rating r : highRat){↵
// System.out.print(r.rat+" ");↵
// }↵
↵
// System.out.println();↵
int maxRat = n, currRat = maxRat;↵
for(Rating r : highRat){↵
ratings[r.indx] = currRat--;↵
}↵
for(Rating r : lowRat){↵
ratings[r.indx] = currRat--;↵
}↵
for(int r : ratings){↵
System.out.print(r+" ");↵
}↵
System.out.println();↵
}↵
}↵
}]
↵
Any suggestions, corrections, or optimizations to code are welcomed :)




