首页 > 其他分享 >23 暑假友谊赛 No.4(UKIEPC 2017)

23 暑假友谊赛 No.4(UKIEPC 2017)

时间:2023-08-10 16:12:25浏览次数:41  
标签:23 int cin second No.4 友谊赛 col dp first

23 暑假友谊赛 No.4(UKIEPC 2017)

Problem A

Alien Sunset

hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分肯定能做(

说下枚举思路吧,就是把每个区间都存起来,选出自转周期的最大值为\(ma\),然后去枚举\(0 \sim ma \times 1825\),每次看枚举的这个数是否都不在给定的区间内即可,复杂度\(\mathcal{O}(Max(H_i)\times1825 \times N)\)

#include<bits/stdc++.h>

using namespace std;

struct Node{
    int H,R,T;
};

int main() {
    int n,mn = 1,ma = 0;
    cin >> n;
    vector<Node> A(n);
    for(int i = 0;i < n;i ++){
        cin >> A[i].H >> A[i].R >> A[i].T;
        ma = max(ma, A[i].H);
    }

    for(int i = 0;i <= ma * 1825;i ++){

        bool f = true;
        while(f){
            for(int j = 0;j < n;j ++){
                int k = i % A[j].H;
                if(A[j].R < A[j].T){
                    if(k > A[j].R && k < A[j].T){
                        f = false;
                        break;
                    }
                }else{
                    if(k < A[j].T || k > A[j].R){
                        f = false;
                        break;
                    }
                }
            }
            if(f){
                cout << i << '\n';
                return 0;
            }
        }
    }

    cout << "impossible\n";

    return 0;
}

Problem C(贪心)

Cued In

推倒一下样例大概就能发现:

第一个样例:黑红黑红黑红黑粉

第三个样例:棕红棕红棕红棕红棕红棕绿黄

其实就是先把分最大打进洞,然后场上存在红球就又把分最大的捞出来,再打进红球,最后一定会存在除红球以外的所有球,这时候一一打进去即可.

#include<bits/stdc++.h>

#define endl '\n'

using namespace std;

int main() {

    int n;
    cin >> n;
    unordered_map<string,int> col;
    col["red"] = 1,col["yellow"] = 2,col["green"] = 3;
    col["brown"] = 4,col["blue"] = 5,col["pink"] = 6, col["black"] = 7;
    int num[8] = {0};

    int ma = 0,sum = 0,rednum = 0;
    for(int i = 0;i < n;i ++){
        string s;
        cin >> s;
        rednum += (s == "red");
        num[col[s]]++;
        sum += col[s];
        ma = max(ma, col[s]);
    }

    if(rednum == n){
        cout << "1\n";
    }else{
        cout << (ma + 1) * rednum + (sum - rednum) << '\n';
    }

    return 0;
}

Problem D

Deranging Hat


思路就是将给的字符串排序后再还原到原字符串,然后哪项更大就放前边输出

#include<bits/stdc++.h>

#define endl '\n'

using namespace std;

int32_t main() {

    string s;
    cin >> s;

    string str = s;

    sort(str.begin(), str.end());

    for (int i = 0; i < str.size(); i++) {

        if (s[i] != str[i]) {
            for (int j = i + 1; j < str.size(); j++) {
                if (str[j] == s[i]) {
                    if (str[j] > str[i])cout << j + 1 << ' ' << i + 1 << endl;
                    else cout << i + 1 << ' ' << j + 1 << endl;
                    swap(str[j],str[i]);
                    break;
                }
            }
        }
    }

    return 0;
}

Problem E(贪心)

Education

本题就是一个排序贪心的问题,将房子按租金从小到大排序,然后学生也是人数从多到少排序,最后将学生放进房子就行(

#include<bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef pair<int,int> PII;
typedef pair<PII,int> PPI;

int main() {

    int n,m;
    cin >> n >> m;
    vector<PII> s(n + 1);
    vector<pair<PII,int>> p(m + 1);
    for(int i = 1;i <= n;i ++) {
        cin >> s[i].first;
        s[i].second = i;
    }
    for(int i = 1;i <= m;i ++) cin >> p[i].first.first;
    for(int i = 1;i <= m;i ++){
        cin >> p[i].first.second;
        p[i].second = i;
    }

    std::sort(s.begin() + 1, s.end(),[](PII a,PII b){
        return a.first > b.first;
    });
    std::sort(p.begin() + 1, p.end(),[](PPI a, PPI b){
        if(a.first.second == b.first.second) return a.first.first < b.first.first;
        return a.first.second < b.first.second;
    });

    vector<int> ans(n + 1);
    vector<bool> vis(m + 1,false);
    int cnt = 0;
    for(int i =1;i <= n;i ++){

        for(int j = 1;j <= m;j ++){
            if(p[j].first.first >= s[i].first && !vis[j]){
                vis[j] = true;
                cnt ++;
                ans[s[i].second] = p[j].second;
                break;
            }
        }
    }

    if(cnt != n){
        cout << "impossible\n";
    }else{
        for(int i = 1;i <= n;i ++){
            cout << ans[i] << " \n"[i == n];
        }
    }


    return 0;
}

Problem F(概率dp)

Flipping Coins

设\(dp[i][j]\)表示抛i次j个向上的概率,根据全概率公式:\(dp[i][j] = dp[i - 1][j] * 0.5 + dp[i - 1][j - 1] * 0.5\),

特别的,当\(j = (n - 1)\) 时,有\(dp[i][j] = dp[i - 1][j] * 0.5 + dp[i - 1][j + 1] * 0.5 + dp[i - 1][j - 1] * 0.5\)。

因为在\(j = (n-1)\)时,还可以是由全部面朝上的硬币得到,比如抛了一枚面朝上的硬币但最后那枚硬币面朝下,这个时候也能得到\((n-1)\)枚向上,另外概率不能直接除以2,会丢失小数.

#include<bits/stdc++.h>
using namespace std;

double dp[610][610];

int main(){
    ios::sync_with_stdio(0),cin.tie(0);//,cout.tie();
    int n, k;
    cin >> n >> k;
    dp[0][0] = 1;
    for(int i=1;i<=k;i++) {
        for (int j = 0; j <= k; j++) {
            dp[i][j] += dp[i - 1][j] * 0.5 + dp[i - 1][j - 1] * 0.5;
            if(j == n-1) dp[i][j] += dp[i - 1][n] * 0.5;
        }
    }
    double ans = 0;
    for(int i=0;i<=n;i++) ans += i*dp[k][i];
    printf("%.8lf",ans);
    return 0;
}

Problem I

I Work All Day

就是选择一个长度使得木头被这个长度均分后剩余的边角料(?)最少,所以直接取模看哪个余数最小就选哪个长度

#include<bits/stdc++.h>
//#define int long long
#define endl '\n'

using namespace std;

int32_t main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (auto &i: a)cin >> i;
    int m;
    cin >> m;
    int ans = INT_MAX;
    int x = INT_MAX;
    for (auto i: a) {
        if (m % i < x) {
            x = m % i;
            ans = i;
        }
    }
    cout << ans << endl;
    return 0;
}


标签:23,int,cin,second,No.4,友谊赛,col,dp,first
From: https://www.cnblogs.com/Kescholar/p/17620613.html

相关文章

  • 2023.8.10-格律诗乐器的生产流程和质量控制流程
    应王建民老师的要求,要求观看王志文主演的电视剧《天道》,重点观看格律诗乐器的生产流程,如何控制质量,对于格律诗乐器的生产流程和质量控制流程有以下总结和感想。格律诗乐器的生产流程:主要为王庙村扶贫、农户式生产、半成品,购买乐圣等公司的配件,在北京进行组装等。在王庙村进行扶......
  • PantTool SAI(绘图软件) v2023.04.05 中文永久使用
    PantToolSAI是一款流行的绘图软件,专为数字艺术家和插画师设计。它提供了丰富的绘画工具和功能,使用户能够轻松地创作出精美的插图、漫画和动画作品。点击获取PantToolSAI 以下是PantToolSAI的主要特点和功能:简单直观的界面:PantToolSAI采用简洁、直观的界面设计,使用户可......
  • 第五期(2022-2023)传统行业云原生技术落地调研报告——央国企篇
     随着国务院国资委印发《关于加快推进国有企业数字化转型工作的通知》,开启了国有企业数字化转型的新篇章。大型央、国企纷纷顺应趋势,加速云化布局,将数字化转型工作定位为“十四五”时期重点任务。同时,越来越多的企业通过云原生技术推动IT变革,驱动业务创新发展,促进企业自身以及......
  • 2023年十款开源测试开发工具推荐(自动化、性能、造数据、流量复制)
    ​1、AutoMeter-API自动化测试平台AutoMeter是一款针对分布式服务,微服务API做功能和性能一体化的自动化测试平台,一站式提供发布单元,API,环境,用例,前置条件,场景,计划,报告等管理在项目开发,迭代交付过程中开发人员,测试人员需要针对系统提供的API做调试,回归测试,性能测试。自动......
  • 【2023-08-09】仁者爱人
    20:00说别人错很容易,但重要的是自己怎么做才是对的。                                                 ——汪成为今天想东西时,忽然想到了连叔说过的一个本质现象:“市......
  • 全方位对比 Postgres 和 MySQL(2023 版)
    根据2023年的StackOverflow调研(https://survey.stackoverflow.co/2023/),Postgres已经取代MySQL成为最受敬仰和渴望(themostadmired,desired)的数据库。  随着Postgres的发展势头愈发强劲,在Postgres和MySQL之间做选择变得更难了。 如果看安装数量......
  • 2023 Gartner RPA魔力象限报告解读:象限跃升彰显国产RPA厂商实力
    2023GartnerRPA魔力象限报告解读:象限跃升彰显国产RPA厂商实力2023GartnerRPA魔力象限报告四大行业趋势,国产RPA厂商已在践行文/王吉伟8月3日,全球著名咨询调查机构Gartner发布了《2023年全球RPA魔力象限(GartnerRPAMQ)》报告。报告从执行能力和企业战略两大维度对全球RPA厂商进行......
  • 2023-2029全球阻燃反光带行业调研及趋势分析报告
     2022年全球阻燃反光带市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。从核心市场看,中国阻燃反光带市场占据全球约%的市场份额,为全球最主要的消费市场之一,且增速高于全球。2022年市场规模约亿......
  • 2023-2029全球远程信息处理网关行业调研及趋势分析报告
     2022年全球远程信息处理网关市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。从核心市场看,中国远程信息处理网关市场占据全球约%的市场份额,为全球最主要的消费市场之一,且增速高于全球。2022年......
  • 2023-2029全球喉部金属探测器行业调研及趋势分析报告
     2022年全球喉部金属探测器市场规模约亿元,2018-2022年年复合增长率CAGR约为%,预计未来将持续保持平稳增长的态势,到2029年市场规模将接近亿元,未来六年CAGR为%。从核心市场看,中国喉部金属探测器市场占据全球约%的市场份额,为全球最主要的消费市场之一,且增速高于全球。2022年市场......