winter week4 day5

SMU 2024 winter round 3

7-1猫是液体

void solve() {
    int a,b,c;
    cin>>a>>b>>c;
    cout<<a*b*c;
}
View Code

 

7-2计算指数

void solve() {
    int n;
    cin>>n;
    cout<<"2^"<<n<<" = "<<pow(2,n);
}
View Code

 

7-3电子汪

void solve() {
    int a,b;
    cin>>a>>b;
    for(int i=0;i<a+b;++i)cout<<"Wang!";
}
View Code

 

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';
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

7-11城市间紧急救援

思路: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;
}
View Code

 

7-12秀恩爱分得快

思路:由于已经给出了一对数,只存和这对数有关的信息

#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;
}
View Code

 

7-13地下迷宫探索

思路: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;
}
View Code

 

7-14畅通工程之最低成本建设问题

思路:求最小生成树

#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;
}
View Code

 

7-15Keven打怪兽

posted @ 2024-02-17 01:09  bible_w  阅读(8)  评论(0编辑  收藏  举报