winter week4 day5
SMU 2024 winter round 3
7-1猫是液体

void solve() { int a,b,c; cin>>a>>b>>c; cout<<a*b*c; }
7-2计算指数

void solve() { int n; cin>>n; cout<<"2^"<<n<<" = "<<pow(2,n); }
7-3电子汪

void solve() { int a,b; cin>>a>>b; for(int i=0;i<a+b;++i)cout<<"Wang!"; }
7-4最佳情侣身高差

void solve() { char op; double x,y; cin>>op>>x; if(op=='M'){ y=x/1.09; }else{ y=x*1.09; } cout<<fixed<<setprecision(2)<<y<<'\n'; }
7-5不变初心数

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; int is[N]; void init(){ auto check=[](int x){ set<int>se; for(int i=2;i<10;++i){ int c=i*x,s=0; while(c){ s+=c%10; c/=10; } se.insert(s); } if(se.size()==1)return *se.begin(); return 0ll; }; for(int i=1;i<=1e5;++i){ is[i]=check(i); } } void solve() { int n; cin>>n; if(is[n])cout<<is[n]<<'\n'; else cout<<"NO\n"; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; cin>>t; init(); while(t--){ solve(); } return 0; }
7-6吃火锅

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; void solve() { string s; string p="chi1 huo3 guo1"; int num=0,is=0,fi=0; while(getline(cin,s)){ if(s==".")break; num++; string t; bool ok=false; for(int i=0;i<s.size();++i){ t.push_back(s[i]); if(i+1>=14){ if(t==p){ if(fi==0)fi=num; ok=true; } t.erase(t.begin()); } } if(ok)is++; } cout<<num<<'\n'; if(fi) cout<<fi<<' '<<is; else cout<<"-_-#"; } //chi1 huo3 guo1 signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
7-7敲笨钟

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; void solve() { int n; cin>>n; ::getchar(); string s; for(int i=0;i<n;++i){ getline(cin,s); bool ok=true; for(int j=0;j<s.size();++j){ if(s[j]==','){ if(j+1<3||s[j-1]!='g'||s[j-2]!='n'||s[j-3]!='o')ok=false; j=s.size()-1; if(s[j-1]!='g'||s[j-2]!='n'||s[j-3]!='o')ok=false; } } if(!ok)cout<<"Skipped\n"; else{ int cnt=0; for(int i=s.size()-1;i>=0;--i){ if(s[i]==' ')cnt++; if(cnt==3){ s+="qiao ben zhong."; break; } s.pop_back(); } cout<<s<<'\n'; } } } signed main(){ // ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
7-8查找书籍

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; void solve() { int n; cin>>n; map<double,string>mp; vector<double>ve; for(int i=0;i<n;++i){ string s; double x; ::getchar(); getline(cin,s); cin>>x; ve.push_back(x); mp[x]=s; } sort(ve.begin(),ve.end()); cout<<fixed<<setprecision(2)<<*ve.rbegin()<<", "<<mp[*ve.rbegin()]<<'\n'; cout<<fixed<<setprecision(2)<<*ve.begin()<<", "<<mp[*ve.begin()]; } signed main(){ // ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
7-9梯云纵

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; vector<double>ans(N),p(N); void init(){ ans[1]=1; ans[2]=1.5; p[1]=1; p[2]=0.5; for(int i=3;i<=1e5;++i){ p[i]=(p[i-1]+p[i-2])/2; ans[i]=ans[i-1]+p[i]; } } void solve() { int n; cin>>n; cout<<fixed<<setprecision(6)<<ans[n]<<'\n'; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; cin>>t; init(); while(t--){ solve(); } return 0; }
7-10家庭房产
思路:并查集维护下

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-9; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; struct E{ int fa,all,mi; double cnt,sum; bool operator<(const E&e)const{ if(fabs(sum-e.sum)>eps)return sum>e.sum; return mi<e.mi; } }; vector<E>p; int find(int x){ if(x==-1)return x; if(x!=p[x].fa)p[x].fa=find(p[x].fa); return p[x].fa; } void solve() { int n; cin>>n; p=vector<E>(1e5); map<int,int>mp; for(int i=0;i<1e5;++i)p[i].fa=p[i].mi=i,p[i].cnt=p[i].sum=0,p[i].all=1; for(int i=0;i<n;++i){ int a,b; cin>>a; cin>>b; mp[a]=1; if(b!=-1)mp[b]=1; a=find(a),b=find(b); if(b!=-1&&a!=b){ p[b].fa=a; p[a].mi=min(p[a].mi,p[b].mi); p[a].cnt+=p[b].cnt; p[a].sum+=p[b].sum; p[a].all+=p[b].all; } cin>>b; if(b!=-1)mp[b]=1; b=find(b); if(b!=-1&&a!=b){ p[b].fa=a; p[a].mi=min(p[a].mi,p[b].mi); p[a].cnt+=p[b].cnt; p[a].sum+=p[b].sum; p[a].all+=p[b].all; } int k; cin>>k; for(int j=0;j<k;++j){ cin>>b;mp[b]=1; b=find(b); if(a!=b){ p[b].fa=a; p[a].mi=min(p[a].mi,p[b].mi); p[a].cnt+=p[b].cnt; p[a].sum+=p[b].sum; p[a].all+=p[b].all; } } double c,s; cin>>c>>s; p[a].cnt+=c,p[a].sum+=s; } set<int>se; for(auto [x,y]:mp){ int a=find(x); se.insert(a); // cout<<a<<'\n'; } vector<E>ans; for(auto v:se){ E s; s.mi=p[v].mi; s.sum=p[v].sum/p[v].all; s.cnt=p[v].cnt/p[v].all; s.all=p[v].all; ans.push_back(s); } sort(ans.begin(),ans.end()); cout<<ans.size()<<'\n'; for(int i=0;i<ans.size();++i){ cout<<setw(4)<<setfill('0')<<ans[i].mi; cout<<' '<<ans[i].all<<' '; cout<<fixed<<setprecision(3)<<ans[i].cnt<<' '<<ans[i].sum; if(i!=ans.size()-1)cout<<'\n'; } } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; while(t--){ solve(); } return 0; }
思路:dijs求最短路同时维护权值和最大值,路径条数,路径

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=100+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-9; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; void solve() { int n,m,st,ed; cin>>n>>m>>st>>ed; vector<int>dis(n,INF),path(n,-1),vis(n),v(n),num(n),cnt(n); vector<vector<int>>g(n+1,vector<int>(n+1)); for(int i=0;i<n;++i)cin>>v[i]; for(int i=0;i<m;++i){ int a,b,c; cin>>a>>b>>c; g[a][b]=g[b][a]=c; } dis[st]=0,num[st]=1,cnt[st]=v[st]; priority_queue<PII,vector<PII>,greater<PII>>q; q.push({dis[st],st}); while(q.size()){ auto t=q.top(); q.pop(); int u=t.second,dist=t.first; if(vis[u]||u==ed)continue; vis[u]=1; for(int i=0;i<n;++i){ if(g[u][i]&&g[u][i]+dist<dis[i]){ dis[i]=g[u][i]+dist; cnt[i]=cnt[u]+v[i]; num[i]=num[u]; path[i]=u; q.push({dis[i],i}); }else if(g[u][i]&&g[u][i]+dist==dis[i]){ num[i]+=num[u]; if(cnt[u]+v[i]>cnt[i]){ cnt[i]=cnt[u]+v[i]; path[i]=u; } } } } cout<<num[ed]<<' '<<cnt[ed]<<'\n'; stack<int>s; int p=ed; while(p!=-1){ s.push(p); p=path[p]; } while(s.size()){ cout<<s.top(); s.pop(); if(s.size())cout<<' '; } } signed main(){ // ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; while(t--){ solve(); } return 0; }
思路:由于已经给出了一对数,只存和这对数有关的信息

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e3+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; int fm[N]; void solve() { int n,m; cin>>n>>m; vector<double>va(n),vb(n); vector<vector<int>>ve(m); for(int i=0;i<m;++i){ int k; cin>>k; for(int j=0;j<k;++j){ string x; int xx; cin>>x; if(x[0]=='-'){ x.erase(x.begin()); xx= stoi(x); fm[xx]=1; }xx=stoi(x); ve[i].push_back(xx); } } int a,b; string x; cin>>x; if(x[0]=='-'){ x.erase(x.begin()); a= stoi(x); fm[a]=1; }a=stoi(x); cin>>x; if(x[0]=='-'){ x.erase(x.begin()); b= stoi(x); fm[b]=1; }b=stoi(x); for(int i=0;i<m;++i){ bool oka=false,okb=false; double k=(double)1/ve[i].size(); for(int j=0;j<ve[i].size();++j){ if(ve[i][j]==a)oka=true; if(ve[i][j]==b)okb=true; } if(oka||okb){ for(int j=0;j<ve[i].size();++j){ if(oka&&fm[ve[i][j]]^fm[a])va[ve[i][j]]+=k; if(okb&&fm[ve[i][j]]^fm[b])vb[ve[i][j]]+=k; } } } double ma=0,mb=0; for(int i=0;i<n;++i){ if(fm[a]^fm[i])ma=max(ma,va[i]); if(fm[b]^fm[i])mb=max(mb,vb[i]); } bool oka=false,okb=false; vector<int>ansa,ansb; for(int i=0;i<n;++i){ if(fm[a]^fm[i]&&va[i]==ma){ if(i==b)oka=true; ansa.push_back(i); } if(fm[b]^fm[i]&&vb[i]==mb){ if(i==a)okb=true; ansb.push_back(i); } } if(oka&&okb){ if(fm[a])cout<<'-'; cout<<a<<' '; if(fm[b])cout<<'-'; cout<<b; }else{ for(int i=0;i<ansa.size();++i){ if(fm[a])cout<<'-'; cout<<a<<' '; if(fm[ansa[i]])cout<<'-'; cout<<ansa[i]; cout<<'\n'; } for(int i=0;i<ansb.size();++i){ if(fm[b])cout<<'-'; cout<<b<<' '; if(fm[ansb[i]])cout<<'-'; cout<<ansb[i]; if(i!=ansb.size()-1)cout<<'\n'; } } } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
思路:dfs,dfs过程中存路径,还要原路返回,回来的时候也存路径就好了

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e3+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; int n,m,st; int g[N][N],vis[N]; int pa[3*N],idx=0,cnt=1; void dfs(int u){ if(cnt==n)return ; for(int i=1;i<=n;++i){ if(!vis[i]&&g[u][i]){ cnt++; vis[i]=1; pa[idx++]=i; dfs(i); pa[idx++]=u; // return ; } } } void solve() { cin>>n>>m>>st; for(int i=0;i<m;++i){ int a,b; cin>>a>>b; g[a][b]=g[b][a]=1; } vis[st]=1; pa[idx++]=st; dfs(st); for(int i=0;i<idx;++i){ cout<<pa[i]; if(i!=idx-1)cout<<' '; } if(cnt!=n)cout<<" "<<0; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
思路:求最小生成树

#include<bits/stdc++.h> using namespace std; #define int long long //#define int __int128 #define double long double typedef pair<int,int>PII; typedef pair<string,int>PSI; typedef pair<string,string>PSS; const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353; const int MAXN=1e8+5; const double eps=1e-12; const int dx[4]={-1,1,0,0}; const int dy[4]={0,0,-1,1}; struct E{ int a,b,w; bool operator<(const E&e)const{ return w<e.w; } }; vector<int>p; int find(int x){ if(x!=p[x])p[x]=find(p[x]); return p[x]; } void solve() { int n,m; cin>>n>>m; vector<E>ve(m); for(int i=0;i<m;++i){ cin>>ve[i].a>>ve[i].b>>ve[i].w; } sort(ve.begin(),ve.end()); p=vector<int>(n+1); for(int i=1;i<=n;++i)p[i]=i; int res=0,cnt=0; for(int i=0;i<m;++i){ int a=ve[i].a,b=ve[i].b,w=ve[i].w; a=find(a),b=find(b); if(a!=b){ p[a]=b; res+=w; cnt++; } } if(cnt<n-1)cout<<"Impossible"; else cout<<res; } signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int t=1; // cin>>t; // init(); while(t--){ solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现