只写了一个,打游戏去了
A题就是个搜索模板,直接写就行
#include
#include
#include
#include
#include
#include
using namespace std;
#define mid 1000000007
typedef long long ll;
int book[106][106][106];
char h[106][106][106];
int w[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{-1,0,0},{1,0,0}};
struct www{
int e;
int f;
int g;
int step;
};
int main(){
int a,i,j,p,t=0;
cin>>a;
for(i=1;i<=a;i++){
for(j=1;j<=a;j++){
for(p=1;p>h[i][j][p];
}
}
}
queuec;
www k;
k.e=1;
k.f=1;
k.g=1;
k.step=0;
c.push(k);
if(k.e==k.f&&k.f==k.g&&k.g==a){
cout<<"0";
return 0;
}
while(!c.empty()){
k=c.front();
c.pop();
for(i=0;i=1&&pe=1&&pf=1&&pg<=a&&book[pe][pf][pg]==0&&h[pe][pf][pg]=='.'){
www q;
book[pe][pf][pg]=1;
q.e=pe;
q.f=pf;
q.g=pg;
q.step=k.step+1;
if(pe==pf&&pf==pg&&pg==a){
cout<<q.step+1;
t=1;
break;
}
c.push(q);
}
}
if(t==1)
break;
}
if(t!=1)
cout<<"-1";
return 0;
}
B题
这题不就是动态规划吗????
为啥要有记忆化??
方程 c[ a ] [ b ]=c[ a-1 ] [ b ]+c[ a ] [ b-1 ];
让我看看题解再来泄愤
一开始我就以为起点在(1,1),终点在(a , b)
结果前面就把我搞崩了
自己写快读也没对
这是啥呀
不需要记忆化
#include
#include
#include
#include
#include
#include
using namespace std;
#define mid 1000000007
typedef long long ll;
int c[3001][3001];
int ans[3001][3001];
int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<>a>>b;
//把他读成从(0,0)开始,(a,b)结束
//否则后面容易出错,我就是这么死的
for(i=a;i>=1;i--){
for(j=1;j<=b;j++){
c[i][j]=read();//不用快读也能过
}
}
ans[1][1]=1;
for(i=1;i<=a;i++){
for(j=1;j<=b;j++){
if(c[i][j]==0)
ans[i][j]+=(ans[i-1][j]+ans[i][j-1])%2333;
else
ans[i][j]=0;
}
}
cout<<ans[a][b];
return 0;
}
D题
模拟模拟
//主要因为题目运算简单
//思路:用一个栈实现 ,用来记录数
//有乘法就先计算出结果,结果再放入栈中,最后栈中元素求和
//每个数只记录后4位,因为题目要求
//因为输入是一个数,一个符号的输入。所以可以很好处理
#include
#include
#include
#include
#include
#include
using namespace std;
#define mid 1000000007
typedef long long ll;
//主要因为题目运算简单
//思路:用一个栈实现 ,用来记录数
//有乘法就先计算出结果,再放入栈中,最后栈中元素求和
//每个数只记录后4位,因为题目要求
//因为输入是一个数,一个符号的输入。所以可以很好处理
stackc1;
int sum=0;
int main(){
int i,a,b;
char ch;
//模拟输入,符号,数字交替输入
for(i=1;;i++){
if(i%2==1){
cin>>a;
a=a%10000;
c1.push(a);
}
else{
ch=getchar();//输入回车符,就断开
if(ch=='\n')
break;
else{
if(ch=='*'){
cin>>a;//直接把下一个数读进来,进行计算
a=a%10000;
b=c1.top();
c1.pop();
c1.push(a*b%10000);
i++;//因为多输入了一个
}
}
}
}
//栈中元素求和
while(!c1.empty()){
sum=(sum+c1.top())%10000;
c1.pop();
}
cout<<sum;
return 0;
}```