近期题目整理(6.1)

近期训练题目思维整理(6.1)

2019 福建省赛 题目A

·题意

计算
\[\sum_{x=1}^{p-3}x^j\mod{p}\]
其中,\(p\)为质数,\(n\le10^9\)。

·思路

结论很简单,以下式子成立\[\sum_{x=1}^{p}x^j\mod{p}=0\]
那么我们只要求最后3项就可以获得答案
这个结论可以依靠打表获得,比赛时很多队依靠打表发现了结论轻松的过了这题,而我们的电脑空闲长达1个小时却没有尝试打表。对于一些没有思路的题目不妨可以依靠这种方法寻找规律

2019 福建省赛 题目J

还没补,大概思路有,补完填坑

2019.5 FZU月赛 题目D

·题意

对于有根树T,定义\[f(T)=\sum_{x,y\in V(T)且x\le y}dist(x,y)\]求\(n\)个节点的有根树T中,满足\(f(T)_{max}\)和\(f(T)_{min}\)的树分别有多少种。

·思路

考虑无根树,满足\(f(T)_{max}\)的树一定是一条链,但是注意正链与反链相同,因此共有\[\frac{1}{2}\prod_{i=1}^{n}i\]种。
而满足\(f(T)_{min}\)的树肯定是菊花树(一个点连着剩下\(n-1\)个点),共有\[n\]种。
然后考虑有根情况,而对于有根树根不同树便不同。因为n个点每个点都可以作为根,因此有根树的数量就是无根树的数量乘以\(n\)。
因此,结论:
\[f(T)_{max}=\frac{n}{2}\prod_{i=1}^{n}i\]
\[f(T)_{min}=n^2\]

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const ll inv = 5e8+4;
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    ll n;
    cin >> n;
    ll ans1 = 0, ans2 = 0;
    if(n == 1) ans1 = ans2 = 1;
    else if(n == 2) ans1 = ans2 = 2;
    else{
        ans1 = 1, ans2 = (n*n)%mod;
        for(ll i = 2;i <= n;i++)
            ans1 = (ans1*i) % mod;
        ans1 = ans1*n%mod*inv%mod;
    }
    cout << ans1 << ' ' << ans2 << endl;
    return 0;
}

Codeforces 691E - Xor-sequences

691E - Xor-sequences

·题意

长度为n的数组中选取k个数字组成序列x(可重复选取),要求\(x_{i}{\oplus}x_{i+1}\)二进制下1的位数是3的倍数,求满足条件的数组的数量。

·思路

设二维数组\(d_{i,j}\)保存序列\({x_i,x_j}\)是否满足要求,满足要求为1不满足为0,二维数组\(c_{i,j}\)保存的是某一长度下\({x_i...y_i}\)(即以\(x_i\)为序列开头,\(y_i\)为序列结尾)的方案数。
很显然当长度为1时,\(d_{i,j}=c_{i,j}\).
那么长度为3时,二维数组\(c_{i,j}\)所表示的意义(长度)可以由以下转移式转移:\[c_{i,j} = \sum_{n}^{k=1}d_{i,k}*d_{k,j}\]可以理解成枚举k,以i开头k结尾的序列和以k开头j结尾的序列拼接起来是否合法,有多少种合法方案累加起来。而这个公式就是矩阵乘法
同理,当长度大于3时,\[c_{i,j} = \sum_{n}^{k=1}c_{i,k}*d_{k,j}\],这样就可以使矩阵c的意义由\(l-1\)转移到\(l\),那么转移到长度为k就要乘矩阵d共\(k-1\)次。
那么做法就很明显了,先预处理\(d_{i,j}\),而由于长度为2时\(c_{i,j}=d_{i,j}\),而我们要让矩阵c乘以矩阵d共\(k-1\)次,也就是d矩阵的\(k-1\)次幂。这题就转换成矩阵快速幂了。

·AC代码链接

Codeforces 691F - Couple Cover

Codeforces 691F

·题意

从n个数字中取2个,得分为两个数字之积,当得分高于一个阈值p时获胜。给你m个数字p,问你以当前p为阈值时获胜的数字对的数量。

·思路

先预处理每个数字的数量,然后直接枚举数字{\({i,j}\)},计算有多少数字对可以凑成{\(i*j\)},最后对数组求前缀和就可以计算失败的数字对。
这题直接枚举数字{\({i,j}\)}复杂度是\(n^2\),而我们可以换个思路,由枚举{\({i,j}\)}计算{\({i*j}\)}转换为枚举{\({i,i*j}\)},因为阈值p是有上限的。这样枚举的复杂度就由\(n^2\)转换为\(n\log{n}\)。

·AC代码链接

前缀和相关性质整理

原文地址:https://www.cnblogs.com/Ace-Monster/p/10969310.html

时间: 2024-10-17 12:42:48

近期题目整理(6.1)的相关文章

数据库题目整理及详解(四)

前言 有多少次挥汗如雨,伤痛曾添满记忆,只因为始终相信,去拼搏才能胜利.总在鼓舞自己,要成功就得努力.热血在赛场沸腾,巨人在赛场升起. 相信自己,你将赢得胜利,创造奇迹:相信自己,梦想在你手中,这是你的天地.当一切过去,你们将是第一. 相信自己,你们将超越极限,超越自己! 相信自己,加油吧,健儿们,相信你自己. 坐在中体对面, 听着这振奋激昂的加油欢呼声, 照样可以感受到校运会的气势磅礴, 虽然我还在敲代码-- 来个这个吧, 特殊纪念, 沃夫慈悲: 说明 老生常谈! 接着之前的SQL语句继续整理

【Android进阶】Android面试题目整理与讲解

这一篇文章专门整理一下研究过的Android面试题,内容会随着学习不断的增加,如果答案有错误,希望大家可以指正 1.简述Activity的生命周期 当Activity开始启动的时候,首先调用onCreate(),onStart(),onResume()方法,此时Activity对用户来说,是可见的状态 当Activity从可见状态变为被Dialog遮挡的状态的时候,会调用onPause()方法,此时的Activity对用户可见,但是不能相 应用户的点击事件 当Activity从可见状态变为被其他

ACM 字符串 题目整理

AC自动机 UVa 11468  Substring AC自动机+概率DP. 注意要补全不存在的边. 为什么要补全不存在的边呢?补全以后可以直接找到状态的转移,即从所有子节点就可以实现所有状态转移. #include<iostream> #include<vector> #include<cmath> #include<map> #include<algorithm> #include<cstring> #include<cst

ACM 暴力搜索题 题目整理

UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vector> #include<cmath> #include<map> #include<algorithm> #include<cstring> #include<cstdio> #include<cstdlib> #include

博弈论 题目整理

博弈论里面一个非常重要的结论: 如果前一个状态所有可能都是必败态,那么当前状态一定是必胜态. 如果前一个状态所有可能有一个是必胜态,那么当前状态一定是必败态. POJ 2484 A Funny Game 博弈游戏里面后手经常占据优势.除了A可以一次性全部拿光的情况,其他时候B都可以采取与A相同的策略,这样每次将石子分为相同的两组,最后获胜的一定是B. #include <cstdio> #include <cstring> #include <algorithm> us

【Android进阶】Android面试题目整理与讲解(二)

今天真机调试的时候莫名其妙遇到了这样的一个问题: This product type must be built using a provisioning profile, however no provisioning profile matching both the identity "iPhone Developer" and the bundle identifier..... 具体如下图所示: 十分蛋疼, 发现不管是从网上下的demo, 还是自己的过程.凡事真机测试的时候都

【Java基础】Java面试题目整理与解说(二)

1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的差别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完毕了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

【Android进阶】Android面试题目整理与讲解(一)

这一篇文章专门整理一下研究过的Android面试题,内容会随着学习不断的增加,如果答案有错误,希望大家可以指正 1.简述Activity的生命周期 当Activity开始启动的时候,首先调用onCreate(),onStart(),onResume()方法,此时Activity对用户来说,是可见的状态 当Activity从可见状态变为被Dialog遮挡的状态的时候,会调用onPause()方法,此时的Activity对用户可见,但是不能相 应用户的点击事件 当Activity从可见状态变为被其他

Android面试题目整理与讲解(二)

1.Dalvik和标准Java虚拟机之间的主要差别? Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈. Dalvik和Java之间的另外一大区别就是运行环境--Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行. (1)虚拟机很小,使用的空间也小: (2)Dalvik没有JIT编译器: (3)常量池已被修改为只使用32位的索引,以简化解释器: (4)它使用自己的字