踩到的坑:
- 不同于POJ,GCJ有两个测试用例的文档,供你在本地得到输出,我开始的时候下载文档之后直接把文档中的数据复制出来,运行代码时贴上去,也就是,从标准输入流里读了数据。我发现一次需要向.exe里粘贴太多数据的情况下,数据可能粘贴不全。正确操作应该是:直接在源码里写读写文件的代码,否则可能因为复制粘贴出错导致程序出错。
- 该题的大测试用例中,内积用32位的int放不下,粗略算来内积最大能达到2的43次方,所以我用long long类型存放结果。
- 开辟大数组的时候最好把数组放在全局变量区,这样可防止栈溢出。
AC源码
#include <cstdio>
#include<iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define MAX 100000
typedef long long ll;
ll x[MAX];
ll y[MAX];
ll res;
bool comp(ll x,ll y)
{
return x>y;
}
int main()
{
ofstream out("small_output.txt");
ifstream in("A-large-practice.in");
ll loop;
in>>loop;
for(ll i=1;i<=loop;i++)
{
res=0;
ll n;
in>>n;
cout<<"n = "<<n<<endl;
cout<<"thie is no."<<i<<" loop"<<endl;
ll p;
ll q;
for(p=0;p<n;p++)
{
in>>x[p];
}
cout<<"x over!!!! "<<" p= "<<p<<endl;
for(q=0;q<n;q++)
{
in>>y[q];
}
cout<<"y over!!!! "<<" q= "<<q<<endl;
sort(x,x+n,comp);
sort(y,y+n);
for(ll q=0;q<n;q++)
{
res+=x[q]*y[q];
}
out<<"Case #"<<i<<": "<<res<<endl;
cout<<" case "<<i<<"write done"<<endl;
}
out.close();
return 0;
}
markdown语法真是好用。