Converting long to int 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ドル \le |S| \le 10^{51} \le Q \le 10^5 1 \le a, b \le 10^{18}\$
Sample Input:
vgxgp 3 2 4 2 5 7 14
Sample Output:
Yes No Yes
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 seconds for various inputs, when I tried the same inputs on this version of the 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 seconds. What is the best way to convert long
to int
optimally? What I'm not able to understand is why the second code snippet is taking so much time when the second version is almost similar. There must be something about the second version that I'm not able to understand.
- 686
- 1
- 8
- 18