ccpc女生赛题目总结

第一场:2017年ccpc女生赛

分类: a) 数论&数学,a) 矩阵快速幂,a) 模拟,a) 找感觉题,a) 动态规划

题解:https://www.cnblogs.com/zhangmingzhao/p/7256603.html

第一题:Automatic Judge http://acm.hdu.edu.cn/showproblem.php?pid=6023 水题

第二题:Easy Summation   http://acm.hdu.edu.cn/showproblem.php?pid=6027快速幂或者暴力||(k最大就5不用快速乘法吧。。。。。每次相乘就取模,每次运算取一下摸,能取就取,避免出现高精度运算,暴力ll肯定能过。)分块打表

第三题:1002 Building Shops  http://acm.hdu.edu.cn/showproblem.php?pid=6024动态规划,dp,状态转移

第四题:1008 Happy Necklace  http://acm.hdu.edu.cn/showproblem.php?pid=6030   规律+矩阵快速幂

第五题:6025  枚举(暴力)

第六题:6029  找规律

第七题:6026  最短路+计数

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x, y) memset(x, y, sizeof(x))
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b > a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b < a)a = b; }
const int N = 55, M = N * N, Z = 1e9 + 7, inf = 0x3f3f3f3f;
template <class T1, class T2>inline void gadd(T1 &a, T2 b) { a = (a + b) % Z; }
int casenum, casei;
int n;
char s[N][N];
struct node
{
    int x;        //x表示当前点的编号
    int dis;    //dis表示从起点到当前点的距离,注意有时需要LL
    bool operator < (const node&b)const
    {
        return dis > b.dis;
    }
};
struct Dijkstra
{
    int first[N], id;
    struct Edge
    {
        int w, c, nxt;
    }edge[M];
    int f[N];    //f[x]表示从ST到x的最短路
    bool e[N];    //e[x]表示我们是否更新过从ST到x的最短路
    priority_queue<node>q;
    void init()
    {
        for (int i = 1; i <= n; ++i)first[i] = 0;
        id = 1;
    }
    void ins(int x, int y, int z)
    {
        edge[++id] = { y,z,first[x] };
        first[x] = id;
    }
    void inq(int y, int dis)
    {
        if (dis >= f[y])return;
        f[y] = dis;
        q.push({ y,dis });
    }
    void dijkstra()
    {
        LL ans = 1;
        for (int i = 1; i <= n; ++i)
        {
            f[i] = inf;
            e[i] = 0;
        }
        int finish = 0;
        while (!q.empty())q.pop(); inq(1, 0);
        while (!q.empty())
        {
            int x = q.top().x; q.pop();
            if (e[x])continue; e[x] = 1; ++finish;
            if (x != 1)
            {
                int cnt = 0;
                for (int y = 1; y <= n; ++y)if (y != x && e[y] && s[y][x] != ‘0‘ && f[y] + s[y][x] - 48 == f[x])++cnt;
                ans = ans * cnt % Z;
            }
            for (int z = first[x]; z; z = edge[z].nxt)
            {
                inq(edge[z].w, f[x] + edge[z].c);
            }
        }
        if (finish != n)ans = 0;
        printf("%lld\n", ans);
    }
}dij;
int main()
{
    while (~scanf("%d", &n))
    {
        dij.init();
        for (int i = 1; i <= n; ++i)
        {
            scanf("%s", s[i] + 1);
            for (int j = 1; j <= n; ++j)if (s[i][j] != ‘0‘)
            {
                dij.ins(i, j, s[i][j] - 48);
            }
        }
        dij.dijkstra();
    }
    return 0;
}
/*
【题意】
让你把一个图删成一棵树,使得1到每个点的最短路保持不变
【分析】
我们可以直接求出1到每个点的最短路,然后看看每个点的前驱边可能是有几条(显然对于每一条合法前驱边,以任何一条作为前缀都是等价的)
所有点可能的前驱边数量,乘起来就是最后的答案啦!
【时间复杂度&&优化】
O(nlogn)
*/

第八题:6032  DP博弈

全部题解:https://blog.csdn.net/snowy_smile/article/details/71305032

第二场:2018ccpc女生赛:暑假群里有题解

1.二分

2.二分

3. 动态规划

4.最短路径——堆优化的Dijkstra算法(SPFA,加了SLF优化的SPFA,加了SLF和LLL优化的SPFA都会时间超出,是因为数据比较强,而这些算法的复杂度不正确)

5.(可持久化权值)线段树+二分

6.水题

7.仿造Kruskal算法,与最小树类似,都是拟阵

8.水题

9.枚举+双指针

10.

11.水题

第三场:

题解:

第一题:https://blog.csdn.net/WilliamSun0122/article/details/71430344  水题

原文地址:https://www.cnblogs.com/Aiahtwo/p/10630739.html

时间: 2024-08-28 05:53:34

ccpc女生赛题目总结的相关文章

hdu6153 A Secret CCPC网络赛 51nod 1277 KMP

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意: 给出两个字符串S1,S2,求S2的所有后缀在S1中出现的次数与其长度的乘积之和. 思路: CCPC网络赛题解: https://post.icpc-camp.org/d/714-ccpc-2017 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277   是一样的 将s1,s2翻转,转化为求前缀在s1中出

2016 CCPC 网络赛 B 高斯消元 C 树形dp(待补) G 状压dp+容斥(待补) H 计算几何

2016 CCPC 网络赛 A - A water problem 水题,但读题有个坑,输入数字长度很大.. B - Zhu and 772002 题意:给出n个数(给出的每个数的质因子最大不超过2000),选出多个数相乘得b.问有多少种选法让b 为完全平方数. tags:高斯消元,求异或方程组解的个数.   好题 每个数先素数分解开.  对于2000以内的每个素数p[i],这n个数有奇数个p[i]则系数为1,偶数个则系数为0,最后n个数的p[i]系数异或和都要为0才会使得最后的积为完全平方数.

2018 CCPC网络赛

2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物品,问最终赚的钱的最大值. solution 用两个堆来维护,一个堆维护已经找到卖家的,一个堆维护还没找到卖家的. 对于第\(i\)个地点,在已经找到卖家的堆里找出卖的钱的最小值,如果最小值小于\(a_i\),则将卖家换成\(i\),然后将原来的卖家放到没找到卖家的那里:如果最小值对于\(a_i\)

树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree

1 // 树形DP CCPC网络赛 HDU5834 Magic boy Bi Luo with his excited tree 2 // 题意:n个点的树,每个节点有权值为正,只能用一次,每条边有负权,可以走多次,问从每个点出发的最大获益 3 // 思路: 4 // dp[i]: 从i点出发回到i点的最大值 5 // d[i][0] 从i点出发不回来的最大值 6 // d[i][1] 从i点出发取最大值的下一个点 7 // d[i][2] 从i点出发取次大值 8 // dfs1处理出这四个 9

2014工大校赛题目以及解

a,b题不说. c题思路是每次枚举俩个点,用半径R确定最大的圆(这样的圆有俩个,求圆心手算有点小麻烦),更新最大值,3次方的,100个点,不会超时. D题是枚举+贪心,所有物品一共只能是N+1种被拿的情况:要么全是用R(该位子是若用右手标记R,若用左手标记L):RRR...RRR,或者第一个物品用L:LRRR...RR,.....依次到LLLLLL..LLL,一个序列来记录每个物品是被左手还是右手拿.枚举所有序列,如LLL...RRR,贪心:那必然是一次L一次R,多出来的需要额外开销能量.如LL

2014ACM/ICPC亚洲区鞍山赛区现场赛——题目重现

2014ACM/ICPC亚洲区鞍山赛区现场赛--题目重现 题目链接 5小时内就搞了5题B.C.D.E,I. H题想到要打表搞了,可惜时间不够,后面打出表试了几下过了- - K题过的人也比较多,感觉是个几何旋转+ploya,但是几何实在不行没什么想法 B:这题就是一个大模拟,直接数组去模拟即可,注意细节就能过 C:类似大白上一题红蓝三角形的, 每个数字找一个互质和一个不互质个数,除掉重复就直接除2,然后总的C(n, 3)减去即可,问题在怎么处理一个数字互质和不互质的,其实只要处理出不互质的即可,这

2019CCPC女生赛小菜鸡打铜记

2018年十二月底加入acm,2019年一月正式开始训练,到六月份去南京第一次参加女生赛,感觉做梦一样(其实还是因为自己太菜了) 一开始决定参加女生赛时候有过小小犹豫,因为临近期末复习周,加上自己实力又菜,我也很无奈哇,但是yl给了我超级多信心!之后的训练和赛前准备,yl和yt都付出了非常多努力!在线拥抱我的队友们! 一号到南京我们仨玩了大半天,也是疯狂被鸭血粉丝和汤包支配的一天! 二号早上很顺利,酒店的位置刚刚好,附近有早点,打个车过去时间也非常盈余. 热身赛的时候本来想测万能头,但是队友都觉

CCPC杭州赛总结

相比于之前的比赛,这次比赛我没有任何包袱,轻装上阵,热身赛前两天晚上八点坐公交车去火车站,路上堵车,差点错过火车,还好一切顺利到了杭州预定的宾馆,这已经是热身赛前一天的下午四点钟了,相当于20个小时的车程,晚上和河南学校的一群大佬在一起聊天(虽然我并没有说很多话).    睡一觉醒来已经是热身赛那天的上午,和队友zjd&&zgp还有在杭州工作的学姐wh一起去杭电报道领取参赛服以及参赛手册等物品,接着就在杭电吃了午饭,又在杭电转了一圈,闲暇之余看到了狗狗和鸭子在湖中长达十分钟之久的追逐大战,

hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)

题目链接 裸的结论题.百度 Ramsey定理.刚学过之后以为在哪也不会用到23333333333,没想到今天网络赛居然出了.顺利在题面更改前A掉~~~(我觉得要不是我开机慢+编译慢+中间暂时死机,我还能再早几分钟过掉它 #include<bits/stdc++.h> using namespace std; int g[8][8]; int n; void solve() { for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++) for