首页 > 其他分享 >集训Day 7

集训Day 7

时间:2023-07-30 16:01:19浏览次数:35  
标签:10 int cin 集训 freopen ans Day dis

 

 

 

 

 

 

 

 比赛开始看了看T1 very Good 有思路,直接用手动全排列A掉(虽然卡了5min左右但get100pt),转过来看T2用暴力模拟A掉(get100pt),接着看T3 虽然第一眼因为最大值最小看成了二分,但很快否决了,这指定是一道多源最短路,但是当时脑子亿抽写了一个适用于单源最短路的bellmaxnford还出了一些错误最后拿了(55pt),T3正解为弗洛伊德。至于T4,想出了各位2 4 8 6的变化周期,但没有思路写程序就写了一个能拿30pt的DFS保分(get30pt) 最后得分285pt

TIPS:
1. floyd 初始化:memset(dis, 0x3F, sizeof(dis)),然后要记得把 dis[i][i] 设为 0
2. 利用 reverse 翻转 string
3. 全源最短路最好还是采用 floyd,另外使用 BellmanFord 时注意双向边问题
4. n的规模和时间复杂度一般是对应的:
n | 10  20+  40            100   500   5000    10^5                 10^6     10^7
O | n!  2^n  n^5/2^(n/2)   n^4   n^3   n^2     nlog^2(n)/n*sqrt(n)  nlogn    n

 

T3题解:

题意:给定一张 n 个点 m 条边的无向图,边有正边权。求一个点使得其到其 他点的最短路的最大值最小。 看到 n ≤ 500,直接 floyd 求出任意两点间的最短路后统计答案即可。 T4题解: 一道数字讨论题。 观察在进行操作后数字的个位会产生什么变化。 5 会变为 0, 0 不动;而 1, 3, 7, 9 变一次后会分别变为 2, 6, 4, 8;对于 2, 6, 4, 8 来说,会按照 2 → 4 → 8 → 6 → 2 的顺序不断循环。 所以,个位为 5 的数字操作一次之后就无法再动,为 0 的无论如何操作都不 会动;而对于 1, 3, 7, 9 而言,操作一次后会变为偶数,对于 2, 6, 4, 8 而言,操作 四次后每 4 轮操作会循环地加上 20。 所以,如果同时出现了个位为 5, 0 以及其他的数字,那么自动无解;如果只 出现了 5, 0,将所有数字一起操作一次之后判断即可(对于 0 来说没有影响); 如果没有出现 5, 0,则考虑将所有数字的个位操作到 2,然后固定个位,每 4 次操作加上二十,所以只需要看除了个位之外的数字是不是同时是奇数和偶数即 可。 T1程序:
#include<bits/stdc++.h>
using namespace std;
int p(int a,int b,int c)
{
    int ans=0;
    if(a%10==0) ans+=a;
    else ans+=a+10-a%10;
    if(b%10==0) ans+=b;
    else ans+=b+10-b%10;
    ans+=c;
    return ans;
}
int main()
{
    freopen( "ord.in", "r", stdin );
     freopen( "ord.out", "w", stdout );
    ios::sync_with_stdio(false);
    int a,b,c; 
    cin>>a>>b>>c;
    cout<<min(p(a,b,c),min(p(a,c,b),min(p(b,a,c),min(p(b,c,a),min(p(c,a,b),p(c,b,a))))));
//    cout<<p(b,c,a);
    return 0;
}

T2程序:

#include<bits/stdc++.h>
using namespace std;
int main()
{
     freopen( "cip.in", "r", stdin );
     freopen( "cip.out", "w", stdout );
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        string s,s1;
        cin>>s;
//        cout<<s;
        for(int i=s.length()-1,j=0;i>=0;i--,j++)
        {
            if(s[i]=='b') s1+='d';
            if(s[i]=='d') s1+='b';
            if(s[i]=='p') s1+='q';
            if(s[i]=='q') s1+='p';
        }
//        cout<<s1<<endl;
        if(s1==s) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}

T3程序:

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int n,m;
int ans[N];
int dis[N][N];
int main()
{
    ios::sync_with_stdio(false);
    memset(dis,0x3F,sizeof(dis));
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        dis[u][v]=min(dis[u][v],w);
        dis[v][u]=min(dis[v][u],w);
    }
    for (int i=1;i<=n;i++) dis[i][i] = 0;
    for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    int mini=1e9;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++) ans[i]=max(ans[i],dis[i][j]);
        mini=min(mini,ans[i]);
    }
    cout<<mini<<endl;
    for(int i=1;i<=n;i++) if(ans[i]==mini) cout<<i<<" "; 
    return 0;
}

T4程序:

#include <iostream>

using namespace std;

const int maxN = 1e5 + 5;

int n;
int a[maxN], cnt[maxN];
int buk[10];

int Oper(int x)
{ return x + (x % 10); }

int main()
{
#ifndef ONLINE_JUDGE
    freopen("num.in", "r", stdin);
    freopen("num.out", "w", stdout);
#endif
    ios::sync_with_stdio(false);

    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i], ++buk[a[i] % 10];
    if (buk[5] != 0 or buk[0] != 0)
    {
        for (int i = 1; i <= n; ++i)
        {
            if (a[i] % 10 != 0 and a[i] % 10 != 5)
            {
                cout << "-1" << endl;
                return 0;
            }
            if (a[i] % 10 == 5)
                cnt[i] = 1, a[i] = Oper(a[i]);
            if (i != 1 and a[i] != a[i - 1])
            {
                cout << "-1" << endl;
                return 0;
            }
        }
        for (int i = 1; i <= n; ++i)
            cout << cnt[i] << ' ';
        cout << endl;
        return 0;
    }
    for (int i = 1; i <= n; ++i)
        while (a[i] % 10 != 2)
            ++cnt[i], a[i] = Oper(a[i]);

    int maxi = 0;
    buk[0] = buk[1] = 0;
    for (int i = 1; i <= n; ++i)
    {
        ++buk[(a[i] / 10) % 2];
        maxi = max(maxi, a[i]);
    }
    if (buk[0] and buk[1])
        cout << -1 << endl;
    else
    {
        for (int i = 1; i <= n; ++i)
            cnt[i] += (maxi - a[i]) / 20 * 4;
        for (int i = 1; i <= n; ++i)
            cout << cnt[i] << ' ';
        cout << endl;
    }

    return 0;
}

 

标签:10,int,cin,集训,freopen,ans,Day,dis
From: https://www.cnblogs.com/wjk53233/p/17591554.html

相关文章

  • 7.30 day7字符串
    60+10+100+0=170连续2天没写出来简单题了,不过我的字符串是真的弱,趁着这次复习一下T1倒序考虑即可T2之前模拟赛里有,但是只记得做过不记得做法了定义一个字符串的本质是\(A_x=x-pre(A_x)\)\(pre(x)\)指上一次出现\(x\)的位置,如果是第一个字符则是0两个字符串相等的条件是本......
  • Day09_列表类型
    1.list()类型转换用法和作用: 2.列表操作:正向取值、反向去之、可取也可以改、索引不存在则报错: 3.列表操作:列表追加值: 4.列表操作:列表插入值: 5.列表操作:extend用法两个列表元素合并、字符串合并到列表中: 6.列表操作:列表删除方式一del: 7.列表操作:列表删除方......
  • 2023暑假集训记1
    训练7.1~7.3(组合数学)上课上午来了两名学弟一起听\(\texttt{yny}\)学长讲组合数学。学长先讲了最基础的组合数定义,接着讲了亿些公式,和些恒等变换。注:之后的两天(7.2和7.3)我进行了消化,并且全部理解。讲了基本的公式恒等式后,学长通过讲例题使我们将知识进行运用。运用题对我来......
  • DAY8
    函数指针使用案例(回调函数)代码:#include<stdio.h>voidA(){printf("Hello");}voidB(void(*ptr)())//B函数有一个函数指针作为它的参数{//ptr指向一个函数,这个函数应该是不带参数的而且返回void,就像A那样ptr();//使用函数指针ptr调用......
  • Day6: Shell函数和参数传递
    学习目标学习内容1.函数的定义和调用2.参数传递3.返回值4.练习任务大树哥个人信息学习目标学习Shell中函数的概念和用法。理解如何在函数中定义和调用命令序列。掌握如何传递参数给函数并获取返回值。练习编写脚本,使用函数进行模块化编程。学习内容今天我们将学习如......
  • [代码随想录]Day04-链表part02
    题目:24.两两交换链表中的节点思路:首先给他加一个虚拟头结点,然后思考反转的逻辑,这是每两个为一组,比如1,2是一组、3,4是一组,如果说1,2一组2,3一组就变成了链表的逆转了。那么指针的逻辑是:两个指针一个r指向要交换的二元组的第一个节点一个l指向前一个节点二元组的第二个节......
  • 暑假集训D6 2023.7.29 补题
    原比赛链接2022年华中科技大学程序设计新生赛(重现赛)官方题解华中科技大学2022新生赛(HUSTFCPC2022)题解&滚榜\(underset\)\(\underset{\sim}Λ\)\(\underset{\sim}{abcd}\)N.WalkAlone'sConjecture题意:给定一个整数\(n\),找出两个数\(x\)和\(y\),使得满足如下......
  • Day6
    Day6T1没啥玩意好说的,就是别忘删freopen#include<bits/stdc++.h>#definelllonglong#defineullunsignedlonglong#definegtgetcharusingnamespacestd;inlinellread(){llx=0,f=1;charch=gt();while(!isdigit(ch)){if(ch=='-')f=-1;ch=gt()......
  • 暑期竞赛配训 Day 1,本蒟蒻的第一篇题解qwq!
    洛谷P8725[蓝桥杯2020省AB3]画中漂流:-[1]读题:在梦境中,你踏上了一只木䇝,在江上漂流。根据对当地的了解,你知道在你下游D米处有一个峡谷,如果你向下游前进大于等于D米则必死无疑。现在你打响了急救电话,T秒后救援队会到达并将你救上岸。水流速度是1m/s,你现在有M点体力......
  • 集训Day 6
            Double心态=0,自信=0,勇猛=0;比赛开始,由于起晚了10分钟(心态-=50%;)心态不好,看了一眼第一题,很简单,一定能写对!但写了估摸10min还是没过样例(自信-=90%;)就换了一种写法调了30min才过了所有样例,(自信-=100%;),接着看第二题,题目数据比较水就慌忙写了一个DFS水一......