5446

原创 2008年09月29日 01:11:00

// Map.cpp : Implementation of CMap

#include "stdafx.h"
#include "FunMap.h"
#include "Map.h"
#include <math.h>

/////////////////////////////////////////////////////////////////////////////
// CMap

STDMETHODIMP CMap::get_MaxX(double *pVal)
{ //È¡µÃÊôÐÔ£¬X °ëÖáµÄ×î´óÖµ
 *pVal = m_xMax;

 return S_OK;
}

STDMETHODIMP CMap::put_MaxX(double newVal)
{ //ÉèÖÃÊôÐÔ£¬X °ëÖáµÄ×î´óÖµ
 m_xMax = fabs( newVal );
 FireViewChange();

 return S_OK;
}

STDMETHODIMP CMap::get_MaxY(double *pVal)
{ //È¡µÃÊôÐÔ£¬Y °ëÖáµÄ×î´óÖµ
 *pVal = m_yMax;

 return S_OK;
}

STDMETHODIMP CMap::put_MaxY(double newVal)
{ //ÉèÖÃÊôÐÔ£¬Y °ëÖáµÄ×î´óÖµ
 m_yMax = fabs( newVal );
 FireViewChange();

 return S_OK;
}

STDMETHODIMP CMap::get_Expression(BSTR *pVal)
{ //È¡µÃÊôÐÔ£¬º¯Êýʽ
 *pVal = m_sExpression.Copy();

 return S_OK;
}

STDMETHODIMP CMap::put_Expression(BSTR newVal)
{ //ÉèÖÃÊôÐÔ£¬º¯Êýʽ
 m_sExpression = newVal;

 if(Calc())
 {
  FireViewChange();
  return S_OK;
 }
 else return E_INVALIDARG;
}

BOOL CMap::Calc()
{ //¸ù¾Ýº¯Êýʽ£¬¼ÆË㺯ÊýÇúÏßµÄ×ø±êµã
 CComQIPtr< IActiveScript > pAS;
 pAS.CoCreateInstance( L"VBScript" );
 if( !pAS )
 {
  Fire_ScriptErr( CComBSTR( _T("¼ÓÔØ VBScript ÒýÇæʧ°Ü")) );
  return FALSE;
 }

 CComQIPtr< IActiveScriptParse > pASP(pAS);
 if( !pASP )
 {
  Fire_ScriptErr( CComBSTR( _T("²éѯ½âÎö½Ó¿Úʧ°Ü")) );
  return FALSE;
 }
 pAS->SetScriptSite( this );

 HRESULT hr = pASP->InitNew();
 if( FAILED(hr) )
 {
  Fire_ScriptErr( CComBSTR( _T("½âÎö½Ó¿Ú³õʼ»¯Ê§°Ü")) );
  pAS->Close(); return FALSE;
 }
  
 hr = pAS->AddNamedItem(L"MyObject", SCRIPTITEM_ISVISIBLE | SCRIPTITEM_ISSOURCE);
 if( FAILED(hr) )
 {
  Fire_ScriptErr( CComBSTR( _T("Ìí¼Ó½Å±¾ÃüÃû´íÎó")) );
  pAS->Close(); return FALSE;
 }

 ::memset( m_xVal, 0, sizeof(double) * nPointCount );
 ::memset( m_yVal, 0, sizeof(double) * nPointCount );

 USES_CONVERSION;
 for(int i=0; i<nPointCount; i++)
 {
  TCHAR szScript[1000];
  double x=i*(2*m_xMax)/nPointCount-m_xMax; //ÇóµÃ×Ô±äÁ¿µÄÖµ

  char strX[20];  ::_gcvt(x,7,strX);

  ::wsprintf( szScript,
   _T("i=%d/r/nx=%s/r/ny=%s/r/ncall Result(i,x,y)"),
   i,A2CT(strX),OLE2CT(m_sExpression));
//  ::MessageBox(NULL,szScript,_T("Éú³ÉµÄ½Å±¾³ÌÐò"),MB_OK);
/*****************************************************************
 Éú³É VBScript µÄÑùʽΪ:

 i = 0  'µ±Ç°ÕýÔÚ¼ÆËãµÄµãµÄÐòºÅ(0 ~ 199)
 x = -4.0 '×Ô±äÁ¿µÄÖµ(¸ù¾ÝÐòºÅ¡¢´°¿Ú·¶Î§ºÍXÖá×ø±ê·¶Î§¼ÆËãµÃµ½)
 y = sin(x) 'Óû§ÊäÈëµÄº¯Êýʽf(x)
 call Result( i, x, y )  'µ÷ÓÃ×ÔÉí¶ÔÏóµÄº¯Êý£¬±£´æ×ø±êµã

******************************************************************/
  EXCEPINFO ei;
  hr = pASP->ParseScriptText( CComBSTR( szScript ), L"MyObject",
   NULL, NULL, 0, 0, 0, NULL, &ei);
  if( FAILED( hr ) ) continue;

  hr = pAS->SetScriptState( SCRIPTSTATE_CONNECTED );
  if( FAILED( hr ) ) continue;
 }

 pAS->Close();
 return TRUE;
}

// IActiveScriptSite
STDMETHODIMP CMap::GetLCID(/*[out]*/ LCID *plcid)
{ // È¡µÃµ±Ç°Ê¹ÓõÄÓïÑÔ»·¾³
 return E_NOTIMPL; //ʹÓÃĬÈϵÄÓïÑÔ
}

STDMETHODIMP CMap::GetItemInfo(/*[in]*/ LPCOLESTR pstrName,
          /*[in]*/ DWORD dwReturnMask,
          /*[out]*/ IUnknown **ppunkItem,
          /*[out]*/ ITypeInfo **ppTypeInfo)
{
 if(ppTypeInfo)
 { //È¡µÃÀàÐÍÐÅÏ¢¿â£¬¹© VBScript ½øÐк¯Êý½âÎöÓÃ
  *ppTypeInfo = NULL;

  if(dwReturnMask & SCRIPTINFO_ITYPEINFO)
  {
   CComPtr< ITypeLib > sptLib;
   ::LoadTypeLib( L"FunMap.tlb", &sptLib ); //×°ÔØ×ÔÉíµÄÀàÐÍ¿â
   if( sptLib )
    sptLib->GetTypeInfo( 0, ppTypeInfo );
  }
 }

 if(ppunkItem)
 { //È¡µÃ IUnknown Ö¸Õ룬¹© VBScript ½«À´µÄº¯Êýµ÷ÓÃ
  *ppunkItem = NULL;

  if(dwReturnMask & SCRIPTINFO_IUNKNOWN)
  {
   if ( 0 == _wcsicmp( L"MyObject", pstrName ) )
   {
    ControlQueryInterface( IID_IUnknown, (LPVOID *)ppunkItem );
   }
  }
 }

 return S_OK;
}

STDMETHODIMP CMap::GetDocVersionString(/*[out]*/ BSTR *pbstrVersionString)
{
 return E_NOTIMPL;
}

STDMETHODIMP CMap::OnScriptTerminate(/*[in]*/ const VARIANT *pvarResult, /*[in]*/ const EXCEPINFO *pexcepinfo)
{
 return S_OK;
}

STDMETHODIMP CMap::OnStateChange(/*[in]*/ SCRIPTSTATE ssScriptState)
{
 return S_OK;
}

STDMETHODIMP CMap::OnScriptError(/*[in]*/ IActiveScriptError *pase)
{ // µ±Óû§ÊäÈëÁ˲»ÕýÈ·µÄº¯Êýʽ£¬»ò½Å±¾Ö´ÐеÄʱºò³ö´í
 CComBSTR err,msg;
 HRESULT hr = pase->GetSourceLineText( &err );
 if( FAILED(hr) || !err.Length() )
  msg = _T("Ö´ÐдíÎó");
 else
 {
  msg = _T("Óï·¨´íÎó: ");
  msg.AppendBSTR( err );
 }

 Fire_ScriptErr( msg );

 return S_OK;
}

STDMETHODIMP CMap::OnEnterScript(void)
{
 return S_OK;
}

STDMETHODIMP CMap::OnLeaveScript(void)
{
 return S_OK;
}

STDMETHODIMP CMap::Result(long i, double x, double y)
{ // ¶¯Ì¬Éú³ÉµÄ½Å±¾µ÷Óøú¯Êý£¬ÓÃÀ´±£´æº¯ÊýÇúÏßµÄ×ø±ê
 if( ( i >= 0 ) && ( i < nPointCount ) )
 {
  m_xVal[i] = x;
  m_yVal[i] = y;
 }

 return S_OK;
}

STDMETHODIMP CMap::get_Pi(double *pVal)
{ // È¡µÃÊôÐÔ PI
 *pVal = 3.1415926;

 return S_OK;
}

STDMETHODIMP CMap::Log10(double dbVal, double *pdbVal)
{ // ¼ÆËã 10 Ϊµ×µÄ¶ÔÊý
 *pdbVal = ::log10( dbVal );

 return S_OK;
}

hdu 5446 Unknown Treasure(lucas+中国剩余定理)

题目链接:hdu 5446 Unknown Treasure lucas+中国剩余定理裸题,注意在中国剩余定理里面,有可能两数相乘爆long long,要用按位乘的方式,但是这样的话exgc...
  • u011328934
  • u011328934
  • 2015年09月13日 21:59
  • 1289

ubuntu 查看显卡

lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bri...
  • drbinzhao
  • drbinzhao
  • 2017年12月20日 17:44
  • 73

hdu 5446(中国剩余+lucas+按位乘)

题意:c( n, m)%M    M = P1 * P2 * ......* Pk Lucas定理是用来求 c(n,m) mod p,p为素数的值。得出一个存余数数组,在结合中国剩余定理求值 其中...
  • Fun_Zero
  • Fun_Zero
  • 2015年09月15日 21:53
  • 533

HDU5446

http://blog.csdn.net/helloworld10086/article/details/48446457 这题解讲的超级好,我这数学白痴都明白了。。 #include #inc...
  • wang57389675
  • wang57389675
  • 2015年09月16日 20:38
  • 317

hdu 5446

卢卡斯定理:
  • qq_26594571
  • qq_26594571
  • 2015年09月16日 21:05
  • 189

HDU 5446

题意: 大组合数取余 (素数连乘) 思路: 对于答案 X X % pi = ai === C(m,n) % pi; 然后就是用孙子定理求出X, ai 用 卢卡斯定理求得 中间 LL * LL...
  • Aoxuets
  • Aoxuets
  • 2016年03月14日 10:55
  • 127

HDU 5446 Unknown Treasure

排列组合求模。lucas+crt 直接贴模板。比赛时候直接WA,结果是LL*LL会爆,手写一个就行。 #include #include #include #include #include #in...
  • sinat_21243261
  • sinat_21243261
  • 2015年09月13日 16:59
  • 340

HDU 5446 (中国剩余定理 Lucas)

题目链接:点击这里题意:求Cmn%M,(M=m1∗…mp且mi都是质数)C_n^m\% M,(M=m_1*\dots m_p且m_i都是质数)。用Lucas定理求出Cmn%mi=aiC_n^m\% m...
  • morejarphone
  • morejarphone
  • 2016年08月17日 22:34
  • 338

HDU 5446 Unknown Treasure

Problem Description On the way to the next secret treasure hiding place, the mathematician discover...
  • jtjy568805874
  • jtjy568805874
  • 2015年09月16日 13:36
  • 217

HDU 5446 Lucas + 中国剩余定理 + 快速乘法

HDU 5446 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题意: 求,n,m的范围很大 思路: Lucas + 中国剩余定...
  • beihai2013
  • beihai2013
  • 2015年09月21日 17:10
  • 226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5446
举报原因:
原因补充:

(最多只允许输入30个字)