Wonsei's blog

By Wonsei, history, 6 weeks ago, In English
#include <iostream>
#include <cstring>

using namespace std;

int main() {
	int ll = 1, rr = 1000000;
	int ans;
	while (ll <= rr) {
		int mid = (ll + rr) / 2;
		cout << mid;
		fflush(stdout);
		string s;
		cin >> s;
		if (s == ">=") {
			ans = mid;
			ll = mid + 1;
		}
		else {
			rr = mid - 1;
		}
	}
	cout << "! " << ans;
	fflush(stdout);
	return 0;
}

This is an easy interactive question that guesses the number 1 to 1000000 by binary search. However, I am new to the concept of interactive problems, and I am getting an idleness TLE on this problem. Can someone tell me what is causing the Idleness on my code? Thanks in advance.

Problem statement : https://codeforces.com/gym/101021/problem/1

 
 
 
 
  • Vote: I like it
  • +1
  • Vote: I do not like it

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Auto comment: topic has been updated by Wonsei (previous revision, new revision, compare).

»
6 weeks ago, # |
  Vote: I like it +9 Vote: I do not like it

Replace fflush(stdout); with cout<<endl; instead.

  • »
    »
    6 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thanks, you resolved the issue :) But do you know why fflush(stdout) and cout.flush() doesn't work?

    • »
      »
      »
      6 weeks ago, # ^ |
      Rev. 2   Vote: I like it +3 Vote: I do not like it

      I think the main issue is that you forgot to output a line break. The grader can't tell that it's at the end of the number you printed until it sees some whitespace.

»
6 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it
void solve(){
	int ll = 1, rr = 1000000;
	int ans;
	while (ll <= rr) {
		int mid = (ll + rr) / 2;
		cout << mid  << "\n";
		cout << flush;
		string s;
		cin >> s;
		if (s == ">=") {
			ans = mid;
			ll = mid + 1;
		}
		else {
			rr = mid - 1;
		}
	}
	cout << "! " << ans << "\n";
    cout << flush;
}