今天上午看了两题,刷出来一题,耗时两个小时。另外那题也花了一个半小时。
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代码:点击打开链接