Exemple #1
0
int b_s(int l,int r,int x)
{
	if(r-l < 2)
	{
		if(D[r] < x)	return r;
		return l;
	}
	
	int mid = (l+r)/2;
	
	if(D[mid] < x)	return b_s(mid, r, x);
	
	return b_s(l, mid, x);
}
Exemple #2
0
 string getHint(string secret, string guess) {
     int n = secret.size();
     vector<int> b_s(10,0); // 10 buckets for 10 digits 0 - 9.
     vector<int> b_g(10,0);
     // go through secret & guess simultaneously, count bulls and count all others into their buckets.
     int bulls = 0;
     for(int i=0; i<n; i++)
     {
         if(secret[i] == guess[i])
         {
             bulls++;
         }
         else
         {
             b_s[secret[i] - '0']++;
             b_g[guess[i] - '0']++;
         }
     }
     int cows = 0;
     for(int i=0; i<10; i++)
     {
         cows += min(b_s[i], b_g[i]);
     }
     // Now generate output. Note that bulls and cows can be multiple digits
     std::ostringstream temp;
     temp << bulls << 'A' << cows << 'B';
     string s = temp.str();
     return s;
 }
Exemple #3
0
int main()
{
	scanf("%d",&n);
	
	for(int h=1; h<=n; h++)	D[h] = MAXN;
	
	for(int h=0; h<n; h++)
	{
		int a;
		
		scanf("%d",&a);
		
		int k =  b_s(0, n-1, a);
		
		if(D[k+1] > a)	D[k+1] = a;
		
		ans = ma(k+1, ans);
	}
	
	printf("%d",ans);
}