在这一次csp-j中,我特遗憾地拿下 200 200 200 分,第三题CE了!
我自己打的错误报告,仅供参考。
神奇的代码:13:33:error:reference to 'prev' is ambiguous
if(I<=14) printf("%d\n",prev[I]);
^---
文件stl_iterator_base_funcs.h:193:
note:inline _BidirectionalIterator prev(_BidirectionalIterator,typename)
prev(_BidirectionalIterator __x, typename
^---
神奇的代码:4:note:const int prev[33]
const int prev[33]={0,-1,1,7,4,2,6,8,10,18,22,20,28,68,88};
^---
在代码中第
4
4
4 行声明常量数组prev[33]
,与c++中一个内置函数重名。
所以在代码中第
13
13
13 行使用常量数组prev[33]
,不知道使用的是定义的还是内置的,即出现:error:reference to 'prev' is ambiguous
(对prev
的引用含糊不清)。
但是最不可思议的是,在我考试的时候,编译器没有帮我找出错误!
考试的c++版本为5.11
,我们的c++版本为6.7.5
!
CE代码见结尾。
(yesterday…)
我满怀期待地坐上汽车,踏进郑州大学,开启人生中第一次CSP,一看题:多简单!(第四题除外)
第一题我直接用set
轻松过。
第二题,就是set
记录坐标和大模拟,也简单。
第三题,我先动态规划打表找规律,再用规律写,但是因为定义prev[33]
直接CE,失去整整
100
100
100 分!
第四题,不会。
由于考试的c++编译器比最新版本老,所以,这个第三题编译错误没有检查出来,因此我一阵欣喜地觉得能拿下 300 300 300 分,但是只有 200 200 200,之后我终于知道为什么我只拿了 200 200 200 分。
我要吸取教训,争取下次不CE!
就在文章结尾:
奉上第一题AC代码!!!
#include<bits/stdc++.h>
using namespace std;
set<string>s;int n;
int main(){
freopen("poker.in","r",stdin);
freopen("poker.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
string I;cin>>I;s.insert(I);
}cout<<52-s.size();
fclose(stdin);fclose(stdout);
return 0;
}
奉上第二题AC代码!!!
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,d,t;
bool a[1001][1001]={};
set<pair<int,int> >p;
void movement(){
int ax=x,ay=y;
if(d==0)y++;
else if(d==1) x++;
else if(d==2) y--;
else if(d==3) x--;
if(!a[x][y]||x==0||y==0||x>n||y>m) x=ax,y=ay,d=(d+1)%4;
p.insert(make_pair(x,y));
}void detect(){
p.clear();
cin>>n>>m>>k>>x>>y>>d;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
char I;cin>>I;a[i][j]=(I=='.');
}p.insert(make_pair(x,y));
for(int i=1;i<=k;i++)movement();
cout<<p.size()<<endl;
}int main(){
freopen("explore.in","r",stdin);
freopen("explore.out","w",stdout);
cin>>t;
for(int i=1;i<=t;i++)detect();
fclose(stdin);fclose(stdout);
return 0;
}
奉上第三题ACCE代码!!!
#include<bits/stdc++.h>
using namespace std;
const int r[8]={0,108,188,200,208,288,688,888};
const int prev[33]={0,-1,1,7,4,2,6,8,10,18,22,20,28,68,88};//这里
int main(){
freopen("sticks.in","r",stdin);
freopen("sticks.out","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;i++){
int I;
cin>>I;
if(I<=14) printf("%d\n",prev[I]);//这里
else{
int mod=I%7,divide=(I-1)/7;
if(!mod) mod=7;
printf("%d",r[mod]);for(int i=1;i<=divide-2;i++)printf("8");
printf("\n");
}
}
fclose(stdin);fclose(stdout);
return 0;
}
奉上第四题代码!!!