开始刷cf啦

这是div2C题

题意是说给你一个数a 和 一个数 p
将n拆分成(2 ^ d1 + p) + (2 ^ d2 + p) + …(2 ^ dn + p) = a,要求拆分的项数最少;
我们知道一个数可以拆分成若干个二的倍数之和我们将上式变形 a - np = 2 ^ d1 + 2 ^ d2 + … 2 ^ dn
对与a - np
假如说 a - np = 11;
11的二进制表示位 1101 = 2 ^ 3 + 2 ^ 2 + 2 ^ 0; 一共为3位 也可以表示位 11个 2 ^ 0;
所以 11 的 二进制构造个数范围为[3,11];
所以我们只要从小到大枚举n 求出a - np的二进制1的位数tmp是否满足[n, a - np] 的范围内
下面看代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>using namespace std;
typedef long long LL;
const int N = 110;
LL  n, k;
LL bfs(int u, int tmp)
{int res = 0;for(int i = 0; (u >> i) > 0; ++ i){if((u >> i) & 1) res ++;}if(res <= tmp && tmp <= u) return res;else return -1;
}int main()
{cin >> n >> k;for(int j = 1; j <= 31; ++ j){if(bfs(n - j * k,j) != -1){cout << j << endl;return 0;}}cout << "-1" << endl;return 0;
}

这是div2 D 题

题意是说给你一个n个数和一个k
求出里面有多少对数的乘积是某个数的k次方
比如说 9 = 3 ^ 2;
24 = 2 ^ 3 * 3 ^ 1 ;
9 * 24 = 3 ^ 2 * 2 ^ 3 * 3 ^ 1 = 2 ^ 3 * 3 ^ 3
= (2 * 3) ^ 3
由于题目数据范围比较大所以我们在查找的时候要logn级别的那么就有map
这道提关键就是取模k如果某个数的质因子刚好是k的整数倍就不必考虑了

还有ans要开LL 因为 C(n,2) 最大是10 ^ 10
下面看代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <map>
#include <vector>
#include <cstdio>using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N = 1e5 + 10;
LL  n, k;
LL a[N];
map <vector<PII> ,int> H;
//直接查找序列个数
int main()
{scanf("%lld%lld",&n,&k);LL ans = 0;for(int i = 0; i < n; ++ i){vector<PII > fact;vector<PII > fact2;cin >> a[i];for(int now = 2; now * now <= a[i]; ++ now){int number = 0;while(a[i] % now == 0){number ++;a[i] /= now;}if(number % k)  fact.push_back(make_pair(now,number % k));//只要把%k不是0的部分放进去}if(a[i] > 1) fact.push_back(make_pair(a[i],1 % k));for(int j = 0; j < (int)fact.size(); ++ j)fact2.push_back(make_pair(fact[j].first,k - fact[j].second));ans += H[fact2];H[fact] ++;}cout << ans << endl;return 0;
}


这是div2 E题

这个是就说你在(1,1)这个位置你可以向下或者向右走遇见石头你可以往你前进的方向推石头但是不能推出边界
这道题我们采用逆推法
dp[n][m]. 表示从(i,j)这个点到(n,m)所有路径的方案数那么我们就知道dp[n][m] = 1;
由于有石头的问题我们可以将dp[n][m]分解成下和右的方向将dp扩展到3维

#include<bits/stdc++.h>using namespace std;
const int N = 2e3 + 10, mod = 1e9 + 7;
typedef long long LL;
int dp[N][N][2];
int num[N][N][2];//处理石头数量的后缀和
int sum[N][N][2];//处理dp[i][j][2]后缀和
char a[N][N];
int n, m;
// 0 -> for down 1 for -> right;
//dp[i][j][1] 表示往下走的能够到达的终点的方案数
//dp[i][j][0] 表示往右走能够到达终点的方案数
//倒推法求dp
//类似记忆化搜索记录一下底端到终点的方案数求出来直接加
//dp[i][j][0] = dp[i][j + 1][1] + dp[i][j + 2][1] + .... + dp[i][j + x][1];
//dp[i][j][1] = dp[i + 1][j[0] + dp[i + 2][j][0] + .....+ dp[i + y][j][0];
int main()
{scanf("%d%d",&n,&m);for(int i = 1; i <= n; ++ i){scanf("%s",a[i] + 1);}if(n == 1 && m == 1 && a[1][1] == '.') {puts("1");return 0;}if(a[1][1] == 'R' || a[n][m] == 'R'){puts("0");return 0;}for(int i = n; i >= 1; -- i)for(int j = m; j >= 1; -- j){if(a[i][j] == 'R'){num[i][j][0] += 1;//i, j 这个点下面有多少个石头num[i][j][1] += 1;//i, j 这个点左面有多少个石头}num[i][j][0] += num[i + 1][j][0];//处理后缀和num[i][j][1] += num[i][j + 1][1];}dp[n][m][0] = 1;dp[n][m][1] = 1;sum[n][m][0] = 1;sum[n][m][1] = 1;for(int i = n; i >= 1; --i)for(int j = m; j >= 1; -- j){if(i == n && j == m) continue;dp[i][j][0] = (sum[i + 1][j][0] - sum[n - num[i + 1][j][0] + 1][j][0]) % mod;dp[i][j][1] = (sum[i][j + 1][1] - sum[i][m - num[i][j + 1][1] + 1][1]) % mod;sum[i][j][0] = (sum[i + 1][j][0] + dp[i][j][1]) % mod;sum[i][j][1] = (sum[i][j + 1][1] + dp[i][j][0]) % mod;}printf("%lld",(dp[1][1][0] + dp[1][1][1] + 2ll * mod) % mod);
}

Codeforces Round #596 Div. 2 C ~E相关推荐

  1. Codeforces Round #596 (Div. 2)(第三场)

    Preface 我要开始打Codeforces了,这是我的第三场比赛,本来以为可以快速上分的,谁知在pupil的路上越走越远. 本场战绩: Cost Time: 2 hours Solved: 1.5 ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. OpenCV(十七)边缘检测3 -- Canny算子(最优边缘检测)
  2. java 能不能回收 文件流_Java文件流关闭和垃圾回收机制
  3. servlet配置web.xml问题
  4. PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法
  5. react-router-dom v6.1.1 使用方式
  6. hcl启动设备失败_英林储罐清洗设备清洗公司2021收费
  7. html支持的脚本语言,能不能让日志内容在支持html语言的同时支持一下脚本语言,拜托!拜托!...
  8. navicate使用小技巧
  9. springboot图书管理怎么实现借书时间到期提醒_东和店镇第一小学图书数字化管理先进做法...
  10. Android - 找到当前类的Context
  11. maple 2022
  12. 【预测模型】基于粒子群优化宽度学习实现预测matlab代码
  13. iOS UI切图@1x、@2x、@3x的实际尺寸
  14. linux增加elk用户,在Ubuntu 18.04 Bionic Beaver Linux上安装ELK
  15. 关于工业级GPU C-model所使用的性能模拟器(preformance simulator)
  16. 【Android】【UI】ACTION_CANCEL什么时候执行
  17. C-DOCSIS PHS,服务组
  18. 节点表征学习[GCN、GAT]
  19. OSPF抓包实验分析邻接关系的七个状态和单区域ospf配置(在华为ENSP上操作)
  20. Diagram Designer 的文字编辑试验

热门文章

  1. 进展 | 密集人群分布检测与计数
  2. 熬了几个大夜,学完一套985博士总结的「卷积神经网络、目标检测、OpenCV」学习笔记(20G高清/PPT/代码)...
  3. 人脸识别剩下的难题:从遮挡,年龄,姿态,妆造到亲属关系,人脸攻击
  4. 偏度与峰度的正态性分布判断
  5. 为什么特斯拉不使用激光雷达
  6. python02-条件语句到循环语句
  7. 【裴蜀定理】[HAOI2011]向量
  8. Android Gradle 笔记
  9. webpack简易入门
  10. UVA 10306 e-Coins(全然背包: 二维限制条件)