oj.jzxx.net 版本
网址:http://oj.jzxx.net/problem.php?id=1228
题解:
#include<iostream> #include<cstring> using namespace std; int main(){ char star[7],line[7]; int num_star=1,num_line=1;//定义变量 int i,n_star,n_line; cin>>star;//输入 cin>>line; n_star=strlen(star); n_line=strlen(line); for(i=0; i<n_star; i++)//计算 num_star*=(star[i]-64);//数组计算 ‘@’=64 for(i=0; i<n_line; i++) num_line*=(line[i]-64); if(num_star%47==num_line%47)//判断 cout<<"GO"<<endl; else cout<<"STAY"<<endl; return 0;//结束 }
程序运行后是这样的
洛谷版本:
网址:https://www.luogu.org/problemnew/show/P1200
题解:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int main(){ string ride,known; int a[8],b[8]; cin>>ride>>known; long s1=1,s2=1; for(int i=0;i<=ride.length();i++){//计算 注意i=0 a[i]=ride[i]-'@'; s1=s1*a[i]; } for(int j=0;j<=known.length();j++){//计算 b[j]=known[j]-'@'; s2=s2*b[j]; } if(s1%47==s2%47) cout<<"GO"<<endl;//判断 s1 mod 47是不是==s2 mod 47 if(s1%47!=s2%47) cout<<"STAY"<<endl; return 0; }
程序运行后是这样的:
都无法满足USACO这种变态版测试
USACO的满分源代码:
/* ID: a1s2d1f1 LANG: C++ TASK: ride */ #include<iostream> #include<cstring> #include<fstream> using namespace std; int main() { freopen("ride.in","r",stdin); freopen("ride.out","w",stdout); char str1[100],str2[100]; while(cin>>str1>>str2) { int tmp1=1,tmp2=1; for(int i=0;i<strlen(str1);i++) tmp1=(tmp1*(str1[i]-'A'+1))%47; for(int j=0;j<strlen(str2);j++) tmp2=(tmp2*(str2[j]-'A'+1))%47; if(tmp1==tmp2) { cout<<"GO"<<endl; } else cout<<"STAY"<<endl; } return 0; }
如果直接用洛谷答案进行提交,会出现下图情况:(已翻译)
意思就是说提交欠了什么。
解决方法:
在输入第一个头文件前在前面加入一个/* */,里面按照
/* ID:****(你的用户名) LANG:(语言) TASK:(问题) */
如图(以your ride is here为例):
但是如果加进去还是不可以:
USACO需要输入输出文件
freopen("ride.in","r",stdin); freopen("ride.out","w",stdout);
需要一个头文件#include<fstream>
接下来,下图是USACO满分代码的输出(没有使用输入输出文件时的exe文件):
需要重复输出,不管输出多少次。
小技巧:将cin>>n放入while()里变成while(cin>>n)即可
结尾return 0;
否则会出现不必要的麻烦;
最后提一下:尽量不要用万能头(#include<bits/stdc++.h>
)