Skip to main content
Code Review

Return to Revisions

3 of 6
added 3 characters in body
Ankur Anand
  • 686
  • 1
  • 8
  • 18

long to int conversion efficiently?

Like most of the girlfriends, Ashima when asks for something, won’t stop until she gets that. The way she gets that is by keep on repeating the same things again and again. Like if she wants chocolate, she will just keep on repeating "chocolate" again and again.

I have decided to answer to her demands as "Yes" or "No" by not delaying a lot. Otherwise, there would be a lot of repercussions. So, randomly at certain intervals, I just answer with "Yes" or "No" using the following rule, I will just select two integers a and b, if the element at the position a is same as the element as position b in the non-ending chant by Ashima, I will speak "Yes", otherwise say "No".

Your job is to find my side of the conversation given the name of the demand Ashima has and the random integers I picked.

Input: First line of the input contains a string S, the name of the item she is demanding. Next line contains an integer Q, the number of pairs of integers that used to say "Yes" or "No" to her. These pairs are given in order. Next Q line, each contains 2 integers, a and b. (1-based indexing)

Output: For each query, print "Yes" or "No" as described above.

Constraints: 1 ≤ |S| ≤ 10^5 1 ≤ Q ≤ 10^5 1 ≤ a, b ≤ 10^18

Sample Input
 vgxgp 
3 
2 4 
2 5 
7 14 

Sample

Output
 Yes 
No 
Yes

Here are the codes that i have written

public static void main(String args[] ) throws Exception {
 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 String item=br.readLine();
 
 StringBuffer sb=new StringBuffer();
 int len = item.length();
 int inputs = Integer.parseInt(br.readLine());
 
 while(inputs-->0)
 {
 String strarr[] =null;
 
 strarr = br.readLine().split(" ");
 
 long a=Long.parseLong(strarr[0]);
 long b=Long.parseLong(strarr[1]);
 a=a-1;
 b=b-1;
 a=a%len;
 b=b%len;
 
 if(item.charAt((int)a)==item.charAt((int)b))
 sb.append("Yes\n");
 else
 sb.append("No\n");
 
 
 }
 
 System.out.println(sb);
 
 
 }

While this gave me an output in almost 5.2954 sec for various inputs . All INPUTS LINKS

while when i tried the same inputs on this version of code that i wrote

public static void main(String args[] ) throws Exception {
 BufferedReader reader= new BufferedReader(new InputStreamReader(System.in));
 String demanded=reader.readLine();
 int length = demanded.length();
 int T=Integer.parseInt(reader.readLine());
 for(int i = 0;i < T; i++){
 String[] pairedAAndB=reader.readLine().split(" ");
 long a = ((Long.parseLong(pairedAAndB[0]) - 1) % length);
 long b = ((Long.parseLong(pairedAAndB[1]) -1) %length);
 System.out.println((demanded.charAt((int)a)==demanded.charAt((int)b)) ? "Yes" : "No");
 
 }
 
}

It took around 15.7819 (sec) . What are the best way to convert long to int optimally . What i'm not able to understand Why second code is taking so much of time when the second version is almost similar or there must be something about the second version that i'm not able to get

Ankur Anand
  • 686
  • 1
  • 8
  • 18
lang-java

AltStyle によって変換されたページ (->オリジナル) /