2022年《数据结构试验》上机考试一(计科2103,2105班+数据2101,2102班)题解
创始人
2024-04-09 06:44:04

 这个波一OJ我真是***

一直给我交之前的main.cpp,我新换上去一直交不上去,一直wa

2208: 该谁发球了?

这是个小思维

大于10以后看的是%2结果

小于10看的是%4的结果

#include
#define int long long
#define pb push_back
using namespace std;
const int N=1e6+10;
signed main(){int n,m;while(cin>>n>>m){if(abs(n-m)==2&&max(n,m)>=11){cout<<"Game Over\n";}else if(n>=10&&m>=10){if((n+m)&1==0){cout<<"A\n";}else{cout<<"B\n";}}else{if((n+m)%4>=2){cout<<"B\n";}else{cout<<"A\n";}}}
}

2375: 判断三角形的形状

模拟即可

#include
#define int long long
#define pb push_back
using namespace std;
const int N=1e6+10;
signed main(){int a,b,c;while(cin>>a>>b>>c){if(a==b&&b==c){cout<<"DB\n";}else if(a+b

5873: 3.5.2 悲剧文本

虽然也是模拟

但这题用list写会好写很多

因为list可以指定插入,通过begin和end调整位置

#include
#define int long long
#define pb push_back
using namespace std;
const int N=1e6+10;
signed main(){string s;while(cin>>s){list li;auto it=li.begin();for(auto t:s){if(t==']'){it=li.end();}else if(t=='['){it=li.begin();}else{li.insert(it,t);}}for(auto t:li){cout<<(char)t;}cout<<'\n';}
}

5867: 4.4.3 矩阵连乘

这道题是之前四则运算的一个简化版本

用栈存括号来辅助计算

#include
#define int long long
#define pb push_back
using namespace std;
#define pll pair
const int N=1e6+10;
pll q[N];
int n,m;
signed main(){cin>>n;for(int i=1;i<=n;++i){char x;cin>>x;cin>>q[x].first>>q[x].second;}string s;while(cin>>s){int f=0;int res=0;stack stk;for(auto i:s){if(isalpha(i)) stk.push(q[i]);else if(i==')'){auto k2=stk.top();stk.pop();auto k1=stk.top();stk.pop();if(k1.second!=k2.first){f=1;break;}res+=k1.first*k1.second*k2.second;stk.push({k1.first,k2.second});}}if(f) cout<<"error\n";else cout<

5874: 4.4.4 打印队列

第i次被打印的一定是第i大的数

排序之后用队列模拟

是直接输出,不是就pop

#include
#define int long long
#define pb push_back
using namespace std;
#define pll pair
const int N=1e6+10;
pll q[N];
int n,m;
void solve(){queue q;vector a,b;int k=0;cin>>n>>m;for(int j=0;j>x;a.push_back(x);b.push_back(x);q.push(j);}sort(b.begin(),b.end(),greater());int w=0;int max=0;while(q.size()){max=b[w];int t=q.front();if(a[t]>T;while(T--){solve();}}

5907: 5.3.5.3 树

几乎是作业原题了

通过中序和前序建树

(不懂这个可以搜一下,很多教程)

然后dfs

#include
#define int long long
#define pb push_back
using namespace std;
#define pll pair
const int N=1e6+10;
int n,lc[N],rc[N];
int minsum,minv;
int ino[N],pos[N];
int create(int L,int R,int m){if(m<=0) return 0;int root=pos[R+m-1];int len=0;while(ino[L+len]!=root){len+=1;}lc[root]=create(L,R,len);rc[root]=create(L+len+1,R+len,m-len-1);return root;
}
bool readline(int *a){string line;if(!getline(cin,line))return false;stringstream s(line);n=0;int x;while(s>>x){a[n++]=x;}return n>0;
}
void dfs(int v,int sum){sum+=v;if(lc[v]==0&&rc[v]==0){if(sum

5917: 5.4.2 信息熵

题面花里胡哨的

这题哈夫曼树板子题

每次取两个最小的,合并在塞回去

直到剩下一个

#include
#define int long long
#define pb push_back
using namespace std;
#define pll pair
const int N=1e6+10;
int a[100];
string s;
void work(){priority_queue,greater > q;if(s=="END") exit(0);for(int i=0;i<=99;++i) a[i]=0;for(int i=0;i<=s.size()-1;++i){if(s[i]=='_'){a[26]+=1;}else{a[s[i]-'A']++;}}for(int i=0;i<27;++i){if(a[i]!=0){q.push(a[i]);}}int sum=0;while(q.size()>=2){int x1=q.top();q.pop();int x2=q.top();q.pop();q.push(x1+x2);sum+=(x1+x2);}if(!sum) sum=s.size();cout<>s){work();}}

相关内容

热门资讯

王予波在检查值班值守情况时强调... 来源:云南日报2月17日农历正月初一,省委副书记、省长王予波到省政府应急指挥中心,视频检查调度值班值...
透过新春热力图看各地文旅市场“... 央视网消息:2月16日是春节假期的第二天,很多人选择走出家门,享受假期美好时光,全国文旅市场也持续火...
马年新春,“小上海”步行街年味... (来源:上观新闻)土布秀腰鼓舞、骏马糖画、红马剪纸、画灶画、手工制作甜酒酿、挑棚棚线,大年初一的周浦...
武警新春园游会,吃喝玩乐什么都... (来源:百姓关注)2月17日大年初一武警贵州总队某支队营区内张灯结彩 人头攒动一场热闹的新春游园会正...
游戏工坊游戏哪些好玩 下载量高... 探寻游戏世界中的宝藏!游戏工坊游戏哪些好玩 下载量高的游戏工坊游戏排行榜揭示了玩家们的心头好。这篇文...