【模拟】【noip2012普及组】寻宝

题目链接:http://wikioi.com/problem/1314/

分析:
裸裸的模拟。

但是要注意细节,不然会死的很惨。

按题目来,在读入时存储每层有楼梯的房间的个数ans[i],每来到新的一层,如果房间里的数字d大于此层有楼梯的个数ans[i],那么d对ans[i]取余,

这里一定要注意余数是0的情况。如果余数是0那么把它赋成ans[i],而不是0!我在这里挂了多次。。

然后就很简单了,逐个找有楼梯的房间,直到找够d个,然后结束这一层,进入下一层。

再次强调:细节!细节!数组下标从0开始而不是1,余数是0要升上去。。。一招不慎,满盘皆输!

代码:

#include
#include
#include
using namespace std;
int n,m,qi;
int aa=0;int a[10010][110][2],ans[11000];
int main()
{
	cin>>n>>m;
    	memset(a,0,sizeof(a));
	memset(ans,0,sizeof(ans));
	for (int i=1;i<=n;i++)
	 {
	 	ans[i]=0;
	   for (int j=0;j>qi;
     for (int i=1;i<=n;i++)
      {
      	int d=a[i][qi][1]; 
          aa=(aa+d)%20123;
        if (i==n) break;
		if (d>ans[i]) d=d%ans[i];
		if (d==0) d=ans[i];  //此处关键
      	while (d>0) 
		 {
			if  (a[i][qi][0]==1) 
			{
				d--;
				if (d==0) 
				break;
			} 
			qi++;	
		    if (qi==m) qi=0;
		 } 
      }
     cout<


你可能感兴趣的:(模拟)