> 文章列表 > 求杭州电子科大ACM1005 和1004代码

求杭州电子科大ACM1005 和1004代码

求杭州电子科大ACM1005 和1004代码

1004: map是用来计数的

#include

#include

#include

using namespace std;

int main()

{

int n,max;

char a[16],b[16];

mapqu;

while(scanf(\"%d\",&n)==1&&n)

{

qu.clear();

max=0;

while(n--)

{

scanf(\"%s\",a);

qu[a]++;

if(max<qu[a])

{

max=qu[a];

strcpy(b,a);

}

}

printf(\"%s\\n\",b);

}

return 0;

}

1005:典型矩阵二分,也可以找循环节

#include

int b[2][2];

int A,B;

void f(int n);

int main()

{

int n;

while(scanf(\"%d%d%d\",&A,&B,&n)&&(A||B||n))

{

if(n==1||n==2)

{

printf(\"1\\n\");

continue;

}

A%=7;

B%=7;

b[0][0]=A;

b[0][1]=B;

b[1][0]=1;

b[1][1]=0;

f(n-2);

printf(\"%d\\n\",(b[0][0]+b[0][1])%7);

}

return 0;

}

void f(int n)

{

int b00,b01,b10,b11,c00,c01,c11,c10;

if(n==0)

{

b[0][0]=1;

b[1][0]=b[0][1]=0;

b[1][1]=1;

return;

}

if(n==1)

{

b[0][0]=A;

b[0][1]=B;

b[1][0]=1;

b[1][1]=0;

return;

}

if(n%2==0)

{

n/=2;

f(n);

b00=b[0][0]*b[0][0]+b[0][1]*b[1][0];

b01=b[0][0]*b[0][1]+b[0][1]*b[1][1];

b10=b[1][0]*b[0][0]+b[1][1]*b[1][0];

b11=b[1][0]*b[0][1]+b[1][1]*b[1][1];

b[0][0]=b00%7;

b[0][1]=b01%7;

b[1][0]=b10%7;

b[1][1]=b11%7;

}

else

{

n/=2;

f(n);

b00=b[0][0]*b[0][0]+b[0][1]*b[1][0];

b01=b[0][0]*b[0][1]+b[0][1]*b[1][1];

b10=b[1][0]*b[0][0]+b[1][1]*b[1][0];

b11=b[1][0]*b[0][1]+b[1][1]*b[1][1];

c00=b00*A+b01;

c01=b00*B;

c10=b10*A+b11;

c11=b10*B;

b[0][0]=c00%7;

b[0][1]=c01%7;

b[1][0]=c10%7;

b[1][1]=c11%7;

}

}

幽默笑话