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代码:点击打开链接