AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

AcWing 1165. 单词环

作者: 作者的头像   Azusamitsusa ,  2023-02-28 10:57:49 ,  所有人可见 ,  阅读 29


0


//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
//优化:优化点数 只看两个字符最多就是26*26个点
//时间复杂度大概是1e8但是过不了呢
//郑老师和阿梓一样可爱^_^

#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

using namespace std;
const int mod = 998244353;
const int N = 5e5 + 10;
//const int M = 998244353;
//#define int long long
#define db double
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl " \n"
#define all(x) (x).begin(),(x).end()
#define YES {cout<<"YES"<<endl;return;}
#define NO {cout<<"NO"<<endl;return;}
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define fast ios::sync_with_stdio(false);cin.tie(0);
int n;
vector<pair<int,db>>g[1010];
bool check(db mid){ //676*10000*log
    queue<int>q;
    for(int i=0;i<=676;i++)if(g[i].size())q.push(i);
    vector<int>cnt(1010),st(1010);
    vector<db>dist(1010);
    int count=0;
    while(q.size()){
        auto u=q.front();q.pop();
        if(st[u])continue;
        st[u]=1;
        for(auto [v,W]:g[u]){
            db c=mid-W;
            if(dist[v]>dist[u]+c){
                dist[v]=dist[u]+c;
                cnt[v]=cnt[u]+1;
                if(++count>=10000)return true;
                if(cnt[v]>=676){
                    //cout<<"true:"<<mid<<endl;
                    return true;
                }
                q.push(v);
                st[v]=0;
            }
        }
    }
    //cout<<"false:"<<mid<<endl;
    return false;
}
void solve(){
    while(cin>>n,n){
        for(int i=0;i<=676;i++){
            g[i].clear();
        }
        for(int i=1;i<=n;i++){
            string s;cin>>s;
            if(s.size()<2)continue;
            int v=(s[0]-'a')*26+(s[1]-'a'),u=(s[s.size()-2]-'a')*26+s.back()-'a';
            //cout<<u<<' '<<v<<' '<<s.size()<<endl;
            g[u].push_back({v,s.size()});
        }
        db l=0,r=1000;
        if(!check(0)){
            cout<<"No solution"<<endl;
            continue;
        }
        while(r-l>=1e-4){
            db mid=(l+r)/2;
            if(check(mid))l=mid;
            else r=mid;
        }
        printf("%.2f\n",l);
    }
}
signed main(){
    fast
    int t;t=1;//cin>>t;
    while(t--) {
        //run();
        solve();
    }
    return ~~(0^_^0);
}

0 评论

你确定删除吗?

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息