天天看點

USACO送出與洛谷或jzxx的差別和技巧

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;//結束 
}
           

程式運作後是這樣的

USACO送出與洛谷或jzxx的差別和技巧

洛谷版本:

網址: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送出與洛谷或jzxx的差別和技巧

都無法滿足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;
}
           

如果直接用洛谷答案進行送出,會出現下圖情況:(已翻譯)

USACO送出與洛谷或jzxx的差別和技巧

意思就是說送出欠了什麼。

解決方法:

在輸入第一個頭檔案前在前面加入一個,裡面按照

/*
ID:****(你的使用者名)
LANG:(語言)
TASK:(問題)
*/
           

如圖(以your ride is here為例):

USACO送出與洛谷或jzxx的差別和技巧

但是如果加進去還是不可以:

USACO需要輸入輸出檔案

freopen("ride.in","r",stdin);
 freopen("ride.out","w",stdout);
           

需要一個頭檔案

#include<fstream>

接下來,下圖是USACO滿分代碼的輸出(沒有使用輸入輸出檔案時的exe檔案):

USACO送出與洛谷或jzxx的差別和技巧

需要重複輸出,不管輸出多少次。

小技巧:将cin>>n放入while()裡變成while(cin>>n)即可

結尾return 0;

否則會出現不必要的麻煩;

最後提一下:盡量不要用萬能頭(

#include<bits/stdc++.h>

如有更多的注意事項,請去官網查找

繼續閱讀