upc2021秋组队训练赛第一场 ICPC North Central NA Contest 2020

简介: upc2021秋组队训练赛第一场 ICPC North Central NA Contest 2020

牛客链接

D: Substring Characters

对于一个字符串s ,求所有不同的最短连续子串的数量,要求不能是s本身并且子串的不同字符的数量与s的不同字符的数量相同。

题意比较绕,最短的含义指的是删除某个子串t的前缀或后缀后,就无法保证不同字符的数量与s相同了。比如10411,可以删除后缀11,变成104。

双指针,队友写的

#include <bits/stdc++.h>
using namespace std;
char str[300];
map<char, bool>mp;
map<char, int>mpp;
map<string, bool> mppp;
void solve()
{
    mp.clear();
    mpp.clear();
    mppp.clear();
    int len = strlen(str);
    int sum = 0;
    for(int i = 0; i < len; i++)
    {
        if(mp[str[i]] == 0) sum++;
        mp[str[i]] = 1;
    }
    int l = 0, r = 0, ans = 0, tmp = 0;
    for(int i = 0; i < len; i++)
    {
        while(r < len)
        {
            if(mpp[str[r]] == 0) tmp++;
            mpp[str[r]]++;
            r++;
            if(tmp == sum)
            {
                while(tmp == sum)
                {
                    if(mpp[str[i]] == 1) tmp--;
                    mpp[str[i]]--;
                    i++;
                }
                i--;
                string s = "";
                for(int j = i; j < r; j++)
                {
                    s += str[j];
                }
                if(i == 0 && r == len)
                {
                    puts("0");
                    return ;
                }
                else if(mppp[s] == 0)
                {
                    mppp[s] = 1;
                    ans++;
                }
                if(r == len)
                {
                    cout << ans << endl;
                    return ;
                }
                break;
            }
        }
        if(r == len)
        {
            cout << ans << endl;
            return ;
        }
    }
}
int main()
{
    while(~scanf("%s", str))
    {
        solve();
    }
    return 0;
}

E: Curve Speed

20200401134307494.png

给出r , s求v

int main() {
    double a,res;
    while(cin>>a>>res){
        double ans=sqrt(a*(res+0.16)/0.067);
        printf("%.d\n",(int)(ans+0.5));
    }   
    return 0;
}

F: Agamemnon’s Odyssey

给定一棵 N 个点的带边权树,可以任选一点作为起点,每条边最多经过 k 次,但只有在首次经过时才会贡献大小等于边权的价值,求价值和最大的一条路径。


当k = = 1时,答案是树的直径;

当k > 1时,答案是所有边权之和

const int maxn=2e5+100;
ll n,k,ans;
vector<PLL>g[maxn];
ll dfs(int u,int fa){
    ll dist=0ll,d1=0ll,d2=0ll;
    for(auto t:g[u]){
        int j=t.first,w=t.second;
        if(j==fa) continue;
        ll d=dfs(j,u)+w;
        dist=max(dist,d);
        if(d>=d1) d2=d1,d1=d;
        else if(d>d2) d2=d;
    }
    ans=max(ans,d1+d2);
    return dist;
}
int main() {
    n=read,k=read;
    rep(i,1,n-1){
        int u=read,v=read,w=read;
        if(k>1) ans+=w;
        else g[u].push_back({v,w}),g[v].push_back({u,w});
    }
    if(k==1) dfs(1,-1);
    printf("%lld\n",ans);
    return 0;
}

H: Digital Speedometer

模拟

int main() {
    double tf,tr;
    cin>>tf>>tr;
    double s;
    double las=100000000;
    while(cin>>s){
        double t=floor(s);
        if(s==0) las=0;
        else if(s>0&&s<1) las=1;
        else if(s>=t&&s<t+tf) las=floor(s);
        else if(s>t+tr&&s<t+1) las=ceil(s);
        else if(s>=t+tf&&s<=t+tr){
            if(s<las) las=ceil(s);
            else las=floor(s);
        }
        printf("%.0f\n",las);
    }
    return 0;
}

K: ICPC Record Matching

模拟。

const int maxn=2e5+100;
string cul(string s){
    string res="";
    for(int i=0;s[i];i++){
        if(s[i]>='A'&&s[i]<='Z'){
            int t=s[i]-'A';
            res+=(t+'a');   
        }
        else res+=s[i];
    }
    return res;
}
struct node{
    string first,last,email;
};
bool cmp(node a,node b){
    return cul(a.email)<cul(b.email);
}
vector<node>g[2];
set<PSS>s_name[2];
set<string>s_email[2];
vector<node>ans[2];
int main() {
    string str;
    while(getline(cin,str)){
        if(str.size()==0) break;
        //cout<<str<<endl;
        stringstream ss;
        ss<<str;
        string a,b,c;
        ss>>a>>b>>c;
        g[0].push_back({a,b,c});
        s_name[0].insert({cul(a),cul(b)});
        s_email[0].insert(cul(c));
    }
    //puts("*****");
    while(getline(cin,str)){
        //cout<<str<<endl;
        stringstream ss;
        ss<<str;
        string a,b,c;
        ss>>a>>b>>c;
        g[1].push_back({a,b,c});
        s_name[1].insert({cul(a),cul(b)});
        s_email[1].insert(cul(c));
    }
    bool flag=1;
    for(int k=0;k<2;k++){
        for(auto t:g[k]){
            string a=cul(t.first),b=cul(t.last),c=cul(t.email);
            PSS ab={a,b};
            int ant=1-k;
            if(!s_name[ant].count(ab)&&!s_email[ant].count(c)){
                ans[k].push_back(t);
                flag=0;
            }
        }
    }
    if(flag) puts("No mismatches.");
    else{
        for(int k=0;k<2;k++){
            sort(ans[k].begin(),ans[k].end(),cmp);
            for(auto t:ans[k]){
                if(k==0) cout<<"I ";
                else cout<<"O ";
                cout<<t.email<<" "<<t.last<<" "<<t.first<<"\n";
            }
        }
    }
    return 0;
}
相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
机器学习/深度学习 算法 数据挖掘
【美赛】2023美赛赛题翻译【美赛】【MCM/ICM】
【美赛】2023美赛赛题翻译【美赛】【MCM/ICM】
|
8月前
2022天梯赛三月冲刺——PAT (Advanced Level)1013 Battle Over Cities (并查集找连通块)
2022天梯赛三月冲刺——PAT (Advanced Level)1013 Battle Over Cities (并查集找连通块)
50 0
|
人工智能
upc 2021秋组队训练赛第三场 2020 Rocky Mountain Regional Contest
upc 2021秋组队训练赛第三场 2020 Rocky Mountain Regional Contest
76 0
UPC组队赛第三场——G: The Famous ICPC Team Again (主席树)
UPC组队赛第三场——G: The Famous ICPC Team Again (主席树)
74 0
2020ICPC昆明M.Stone Games(主席树)
2020ICPC昆明M.Stone Games(主席树)
60 0
|
人工智能 Java BI
HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem D. Team Name
HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem D. Team Name
106 0
|
机器学习/深度学习 算法 Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
135 0
|
Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem H. Dominoes
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem H. Dominoes
105 0
|
人工智能 Java
HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem C. Team Match
HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem C. Team Match
116 0
|
Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem F. Four-tuples
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem F. Four-tuples
117 0