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>
)
如有更多的注意事項,請去官網查找