牛客算法周周练3

Serepta ·
更新时间:2024-11-11
· 819 次阅读

只写了一个,打游戏去了

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; }```
作者:LAKERSWXY



牛客 算法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号