Ejemplo n.º 1
0
void	getRSSwidths(int widths[], int val, int n, int elements, int maxWidth, int noNarrow)
{
	int	bar;
	int	elmWidth;
	int mxwElement;
	int subVal, lessVal;
	int narrowMask=0;

	for(bar = 0; bar < elements - 1; bar++)
	{
		printf("%d\n",n);
		for(elmWidth = 1, narrowMask|=(1<<bar);
			;
			elmWidth++, narrowMask &= ~(1<<bar))
		{
			/*È¡µÃËùÓÐ×éºÏ*/
			subVal = combins(n-elmWidth-1, elements-bar-2);
			/*È¥µôûÓе¥žöÄ£¿éµ¥ÔªµÄ×éºÏ*/
			if((!noNarrow) && (narrowMask==0)&&
				(n-elmWidth-(elements-bar-1) >= elements-bar -1))
			{
				subVal -= combins(n-elmWidth-(elements-bar),elements-bar-2);
			}
			/*È¥µôµ¥Ôª¿í¶È³¬¹ý×îŽóÒªÇóÖµµÄ×éºÏ*/
			if(elements-bar-1 > 1)
			{
				lessVal	= 0;
				for(mxwElement = n - elmWidth - (elements - bar -2);
					mxwElement	> maxWidth;
					mxwElement--)
				{
					lessVal += combins(n-elmWidth-mxwElement-1,elements-bar-3);
				}
				subVal -= lessVal * (elements - 1 - bar);
			}
			else if(n - elmWidth > maxWidth)
			{
				subVal--;
			}
			val -= subVal;
		        printf("val %d subVal: %d\n",val,subVal);
			if(val<0) 
				break;
		}
		val += subVal;
		n	-= elmWidth;
		widths[bar]	= elmWidth;
		
	}




	widths[bar] = n;
	return ;
}
Ejemplo n.º 2
0
int getRSSvalue(int widths[], int elements, int maxWidth, int noNarrow)
{
	int val	= 0;
	int n;
	int bar;
	int elmWidth;
	int i;
	int mxwElements;
	int subVal, lessVal;
	int narrowMask	= 0;

	for(n=i=0; i < elements; i++)
	{
		n += widths[i];
	}
	for (bar = 0; bar < elements-1; bar++)
	{
		for(elmWidth = 1, narrowMask |= (1<<bar);
			elmWidth < widths[bar];
			elmWidth++,narrowMask &= ~(1<<bar))
		{
			/*È¡µÃËùÓÐ×éºÏ*/
			subVal	= combins(n-elmWidth-1, elements-bar-2);
			/*È¥µôûÓе¥žöÄ£¿éµ¥ÔªµÄ×éºÏ*/
			if ((!noNarrow)&&(narrowMask==0)&&
				(n-elmWidth-(elements-bar-1) >= elements-bar-1))
			{
				subVal	-= combins(n-elmWidth-(elements-bar),elements-bar-2);
			}
			/*È¥µôµ¥Ôª¿í¶È³¬¹ý×îŽóÒªÇóÖµµÄ×éºÏ*/
			if(elements-bar-1 > 1)
			{
				lessVal	= 0;
				for(mxwElements = n-elmWidth - (elements-bar-2);
					mxwElements > maxWidth; mxwElements--)
				{
					lessVal	+= combins(n-elmWidth-mxwElements-1,elements-bar-3);
				}
				subVal	-= lessVal * (elements - 1 - bar);
			}else if (n - elmWidth > maxWidth)
			{
				subVal--;
			}
			val += subVal;
		}
		n	-= elmWidth;
	}
	return (val);
}
Ejemplo n.º 3
0
int
ReaderHelper::GetRSSvalue(const std::array<int, 4>& widths, int maxWidth, bool noNarrow)
{
	int elements = static_cast<int>(widths.size());
	int n = Accumulate(widths, 0);
	int val = 0;
	int narrowMask = 0;
	for (int bar = 0; bar < elements - 1; bar++) {
		int elmWidth;
		for (elmWidth = 1, narrowMask |= 1 << bar;
			elmWidth < widths[bar];
			elmWidth++, narrowMask &= ~(1 << bar)) {
			int subVal = combins(n - elmWidth - 1, elements - bar - 2);
			if (noNarrow && (narrowMask == 0) &&
				(n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {
				subVal -= combins(n - elmWidth - (elements - bar),
					elements - bar - 2);
			}
			if (elements - bar - 1 > 1) {
				int lessVal = 0;
				for (int mxwElement = n - elmWidth - (elements - bar - 2);
					mxwElement > maxWidth; mxwElement--) {
					lessVal += combins(n - elmWidth - mxwElement - 1,
						elements - bar - 3);
				}
				subVal -= lessVal * (elements - 1 - bar);
			}
			else if (n - elmWidth > maxWidth) {
				subVal--;
			}
			val += subVal;
		}
		n -= elmWidth;
	}
	return val;
}