1、晕,看完题瞬间想到了数论,其实是个超级大水题。。。怪我没看懂英文,唉~
/* ID:mrxy564 PROG:ride LANG:C++ */ #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; int main() { freopen("ride.in","r",stdin); freopen("ride.out","w",stdout); char a[10],b[10]; bool flag; int num1,num2,maxnum,len1,len2; while(scanf("%s%s",&a,&b)==2){ num1=num2=1;flag=false; len1=strlen(a);len2=strlen(b); for(int i=0;i<len1;i++) num1*=a[i]-'A'+1; for(int i=0;i<len2;i++) num2*=b[i]-'A'+1; if(num1%47==num2%47)flag=true; if(flag) printf("GO\n"); else printf("STAY\n"); memset(a,'\0',sizeof(a)); memset(b,'\0',sizeof(b)); } return 0; } 官方题解:
This is probably the easiest problem in the entire set of lessons. An `ad hoc' problem, no particular algorithms or tricks are needed save one: one must be careful to get all 72 characters of input without processing the newline on the end!
Here is a prototype solution:
#include <stdio.h> #include <ctype.h> int hash(char *s) { int i, h; h = 1; for(i=0; s[i] && isalpha(s[i]); i++) h = ((s[i]-'A'+1)*h) % 47; return h; } void main(void) { FILE *in, *out; char comet[100], group[100]; /* bigger than necessary, room for newline */ in = fopen("input.txt", "r"); out = fopen("output.txt", "w"); fgets(comet, sizeof comet, in); fgets(group, sizeof group, in); if(hash(comet) == hash(group)) fprintf(out, "GO\n"); else fprintf(out, "STAY\n"); exit (0); }Solutions generally run in under 0.01 seconds.
比我写得专业多了!学习!