首页 > 编程知识 正文

西安邮电大学数学建模大赛,西安邮电大学互联网加比赛

时间:2023-05-04 15:17:27 阅读:238342 作者:3426

西安邮电大学第五届ACM-ICPC校赛(同步赛) A 拯救咕咕咕之史莱姆(签到)B 烦人的依赖(拓扑排序)CDE 无敌阿姨(模拟)FG 校车(水题)H
https://ac.nowcoder.com/acm/contest/5678

A 拯救咕咕咕之史莱姆(签到)

题意:略。

题记:按照题目意思计算一下即可。

#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){ ll n; while(cin>>n&&n){ if(n<=75) cout<<"AOLIGEI!"<<endl; else cout<<"DAAAAAMN!"<<endl; } return 0;} B 烦人的依赖(拓扑排序)

题意:略。

题记:首先将字符串转换为数字的形式存图(需要通过字符串也可以找到相应的数字),然后进行拓扑排序即可。

#include<bits/stdc++.h>using namespace std;const int N=3e4+10,M=1e5+10;string mp2[N];int head[N];int cnt;int g[N];struct Edge{ int to,next;}edge[M];void addedge(int u,int v){ edge[cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt++;}int main(){ int T,cas=1; cin>>T; while(T--){ unordered_map<string,int>mp1; cnt=0; memset(head,-1,sizeof(head)); memset(g,0,sizeof(g)); int n,m; cin>>n>>m; string s; for(int i=1;i<=n;i++){ cin>>s; mp1[s]=i; mp2[i]=s; } string s1,s2; while(m--){ cin>>s1>>s2; int u,v; u=mp1[s1]; v=mp1[s2]; addedge(u,v); g[v]++; } priority_queue<string,vector<string>,greater<string>>q; for(int i=1;i<=n;i++){ if(!g[i]) q.push(mp2[i]); } vector<string>ans; while(!q.empty()){ string str=q.top(); q.pop(); ans.push_back(str); int j=mp1[str]; for(int i=head[j];i!=-1;i=edge[i].next){ int v=edge[i].to; g[v]--; if(!g[v]) q.push(mp2[v]); } } cout<<"Case #"<<cas++<<":"<<endl; if(ans.size()!=n) cout<<"Impossible"<<endl; else for(auto x:ans) cout<<x<<endl; } return 0;} C D E 无敌阿姨(模拟)

题意:略。

题记:简单模拟。

#include<bits/stdc++.h>using namespace std;const int N=110;int a[N];int main(){ int T; cin>>T; while(T--){ int n,m,k; cin>>n>>m>>k; for(int i=0;i<n;i++) cin>>a[i]; int ans=0,i=0; while(i<n){ int x=m; ans++; while(x>0){ if(x<a[i]){ a[i]-=x; x=0; } else{ x-=a[i]; if(x>k){ x-=k; i++; } else{ x=0; i++; } } } } cout<<ans<<endl; } return 0;} F G 校车(水题)

题意:略。

题记:用map记录一下每个点有多少个人上车和下车(上车加下车减),map的长度就是站点数量,从头到尾把map的所有值加上,取过程中的最大值就是座位数量。

#include<bits/stdc++.h> using namespace std;const int N=1e5+10; int main(){ int T; cin>>T; while(T--){ map<int,int>mp; int n; cin>>n; int x,y; for(int i=0;i<n;i++){ cin>>x>>y; mp[x]++; mp[y]--; } map<int,int>::iterator i; int ans1=mp.size(),ans2=0,sum=0; for(i=mp.begin();i!=mp.end();i++){ //cout<<i->second<<endl; sum+=i->second; ans2=max(ans2,sum); } cout<<ans1<<' '<<ans2<<endl; } return 0;} H

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。