17/7/2012 ICPC培训 第二天

今天上午看了两题,刷出来一题,耗时两个小时。另外那题也花了一个半小时。

1、刷掉的题(HDU1212)。

这题是求模。不过数会很大。我用的是处理字符串,找规律。一步步缩小数。

主要思想就是:用一个字符串数组存下那个大数。然后从后到前每8位取成一个int数(字符串到整数的

转换),存放在一个整型数组内。然后依次对这个整型数组求模。要注意的是,整型数组从后向前第一

位要模b一次,第二位两次,第三位三次,以此类推。最后,把该数组内的所有数相加再模b一次即为结

果。

2、没完成的题(HDU1216),没思路。听说是模拟题。

 

HDU1212代码:

#include<iostream>
using namespace std;

const int constant=100000000;
const int maxSize=1001;
const int help[]={1,10,100,1000,10000,100000,1000000,10000000};

char a[maxSize];
int b,arraySize;
__int64 temp[maxSize/8];

void init()
{
     int len=strlen(a),index=0;
     
     arraySize=0;
     memset(temp,0,sizeof(temp));

     while(len>=1)
     {
         while(index<=7 && len>=1)
         {
              temp[arraySize]+=help[index++]*(a[len-1]-'0');
              len--;
         }
             
         if(len>=1)
         {
               index=0;
               arraySize++;
         }
     }
}

int MOD()
{
     __int64 sum=0;
     
     for(int i=0;i<=arraySize;i++)
     {
         temp[i]%=b;
         for(int j=0;j<i;j++)
         {
              temp[i]*=constant;
              temp[i]%=b;
         }
     }
     
     for(int k=0;k<=arraySize;k++)
     {
        sum+=temp[k];
     }
     
     return sum%b;     
}

int main()
{
    while(cin>>a>>b)
    {
        init();
        
        cout<<MOD()<<endl;
    }
    
    return 0;
}


 

下午的话我们进行了一场比赛。总共5题,做出4题。

前一个半小时做了A、B、D题,又用了一个小时十分左右搞定了C题。还剩20分钟和别人聊天了大笑

C题的数据很变态。被一些特殊情况的处理卡了很长时间。

E题开始了无思路。后来和别人交流下,发现是暴力枚举,和D题解题思路神似,顿时喷血。

其实,我对这次比赛结果还是比较满意的,虽然没能做完。

当然,也有一些问题:

1、前一个半小时很顺利。却不淡定了,思想开小差。觉得自己做的不错,害的自己还得调整。

2、后面一个半小时应该说不顺利。还以为又和上次校赛一样一题不A了呢。明显自己这次表现好点了。

淡定了,敢于积极思考,不再害怕了。

3、对于E题,现在看来很简单。当时就是一点思路也没,这种情况在比赛中应该说很常见,也是我们

必须应对好的。对于这点自己还在思考如何处理中。

最后,这是这次比赛的题目、测试数据以及我的AC代码:点击打开链接

 

 

 

 

 

你可能感兴趣的:(c,测试,聊天)