首页 > 无题8

无题8

题解:

第一题:开始想找循环节,但数据很好卡; 后来想小的一直拿,那么另一个就会出现负数,抵消+打表发现就是2^k在mod(n+m)的值;

#include
using namespace std;
#define ll long long
ll mod, n, m;ll ksm(ll a, ll b){ll ret = 1;for(; b; b >>= 1, a=a*a%mod)if(b&1) ret=ret*a%mod;return ret;
}int main(){freopen("sesame.in","r",stdin);freopen("sesame.out","w",stdout);ll k;cin>>n>>m>>k;mod = n + m;if(n > m) swap(n, m);ll ans = ksm(2, k);n = ans * n % mod;cout<endl;
} 
View Code

 

第二题:,Ax % Ay = k ==>  Ax - k = n * Ay; 只需要判断(Ax - k)是否整除Ay即可,

ai <= 1e5; 利用这个性质想到拆分, 把Ax的因子都分解出来,如果他包含Ay,就记录一个max(now, lst),往后扫;

O(n√n)

#include
using namespace std;const int M = 1e5 + 10;
#define ll long long
int lst[M], a[M], k;
void divi(int x, int pos){for(int i = 1; i * i <= x; i++)if(x % i == 0) lst[i] = lst[x / i] = pos;
}int main(){freopen("drink.in","r",stdin);freopen("drink.out","w",stdout);int n, now = 0;ll ans = 0;scanf("%d%d", &n, &k);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++){if(a[i] > k){now = max(now, lst[0]);now = max(lst[a[i]], now);}  ans = ans + 1LL*(i - now);if(a[i] - k >= k) divi(a[i] - k, i);else if(a[i] == k) lst[0] = i;//printf("%d %d
 ", now, i);
    }printf("%lld
", ans);
} 
View Code

 

第三题:利用ai<=5000 的性质,搞一个(ai^2), 题解附在代码中

#include
using namespace std;
#define ll long long
const int M = 5005;
int f[M][M], a[1000005];
ll d[2][M], fac[M], P[M], mod;int main(){freopen("kalanchoe.in","r",stdin);freopen("kalanchoe.out","w",stdout);int n, m;scanf("%d%d%lld", &n, &m, &mod);for(int i = 1; i <= n; i++)scanf("%d", a + i);f[1][1] = 1; for(int i = 2; i <= 5000; i++)for(int j = 1; j <= 5000; j++)f[i][j] = ((ll)f[i - 1][j - 1] + (ll)f[i - 1][j] * (j - 1) % mod ) % mod;//f[i][j] 表示有i个空位放j个颜色的方案数,可以选择放一个新的颜色或者原来的颜色 fac[0] = 1;     P[1] = m;for(int i = 1; i <= 5000; i++) fac[i] = fac[i - 1] * i % mod;for(int i = 2; i <= 5000; i++) P[i] = P[i - 1] * (m - i + 1) % mod;   // 排列 for(int i = 1; i <= a[1]; i++) d[1][i] = (ll)f[a[1]][i] * P[i] % mod; //d[i][j]表示第i行放j种颜色的方案数,f只确定了位置,放什么颜色排列 int u = 1;for(int i = 2; i <= n; i++){u ^= 1;ll sum = 0;for(int j = 1; j <= a[i - 1]; j++) sum = (sum + d[u^1][j]) % mod;for(int j = 1; j <= a[i]; j++) {d[u][j] = (ll)f[a[i]][j] * P[j] % mod * sum % mod; //该行放j个的总方案数要乘上上一行的总方案数; if(j <= a[i - 1]) d[u][j] = ((d[u][j] - (ll)f[a[i]][j] * d[u^1][j] % mod * fac[j] % mod) + mod) % mod;//如果放的颜色比上一行总颜色种类少,那么可能会和上行颜色集合重复,我们强制这j种颜色和上行j种颜色同,怎么放就乘上fac[j] 
        }}ll ans = 0;for(int i = 1; i <= a[n]; i++) ans = (ans + d[u][i]) % mod;printf("%lld
", ans);
} 

 

转载于:https://www.cnblogs.com/EdSheeran/p/9707885.html

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 需要用到概率论的容斥定理以及计算1 ^ 4 + 2 ^ 4 + ……+ n ^ 4的计算公式1^4+2^4+……+n^4=n(n+1)(2n+1)(3n^2+3n-1)/30   #pragma comment(linker,"/STACK:1024000000,1024000000") #include #incl...

  • L1-056 猜数字 (20 分) 一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。 输入格式: 输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。 输出格式: 在一行中...

  • 达哥送分给我我都不要,感觉自己挺牛批。 $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=sum C_n^i imes C_i^{frac{i}{2}} imes C_{n-i}^{frac{n-i}{2}},i\% 2=0$ $type=1:$ 因为不能触碰负半轴,所以可以把右移看成...

  • 题目链接 题意:给你三个数n,m,k;让你构造出一个nm的矩阵,矩阵元素只有两个值(1,-1),且满足每行每列的乘积为k,问你多少个矩阵。 解法:首先,如果n,m奇偶不同,且k=-1时,必然无解: 设n为奇数,m为偶数,且首先要满足每行乘积为-1,那么每行必然有奇数个-1,那么必然会存在有偶数个-1.。满足每列乘积为-1,那么每列必...

  • Description 有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。 若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的价值。 一个数字只能参与一次配对,可以不参与配对。 在获得的价值总和不小于 0 的前提下,求最多进行多少次配对...

  • 快速幂       1 #include 2 #include 3 #include 4 #define LL long long 5 using namespace std; 6 7 LL Pow(LL a, LL b) 8 { 9 LL an...