IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> CodeForces - 1646E Power Board (思维,数学) -> 正文阅读

[数据结构与算法]CodeForces - 1646E Power Board (思维,数学)

题目链接:点击这里

题目大意:
给定一个 n × m n\times m n×m 的矩阵,其中 a [ i ] [ j ] = i j a[i][j]=i^j a[i][j]=ij ,求这个 n × m n\times m n×m 的矩阵有多少个不同的元素
一个 3 × 3 3\times 3 3×3 的矩阵如下图所示:
在这里插入图片描述
题目分析:
不难想到,如果两行有相同的元素,那么两行的形式必然是 a b a^b ab a c a^c ac
例如第 2 , 4 , 8 2,4,8 2,4,8 行其元素分别为:
2 1 , 2 2 , . . . , 2 m 2^1,2^2,...,2^m 21,22,...,2m
2 2 , 2 4 , . . . , 2 2 ? m 2^2,2^4,...,2^{2·m} 22,24,...,22?m
2 3 , 2 6 , . . . , 2 3 ? m 2^3,2^6,...,2^{3·m} 23,26,...,23?m
我们如何求这三行的不同元素个数呢
我们发现,如果两个数相同,那么指数必然相同,所以我们可以把指数用一个矩阵表达出来:
1 , 2 , . . . , m 1,2,...,m 1,2,...,m
2 , 4 , . . . , 2 ? m 2,4,...,2·m 2,4,...,2?m
3 , 6 , . . . , 3 ? m 3,6,...,3·m 3,6,...,3?m
问题就转化成了求这个矩阵中有多少个不同元素,由于是指数,所以该矩阵最大行号也就是 log ? n \log n logn ,我们可以用暴力直接算出前 i i i 行有多少个不同元素,然后存在一个数组 c n t [ i ] cnt[i] cnt[i]
对于答案,我们直接对这 n n n 行进行一个遍历,如果当前数没被标记,就把当前数的倍数全部标记,同时记录最大指数 a a a 是多少,然后把答案加 c n t [ a ] cnt[a] cnt[a] 即可

具体细节见代码:

// Problem: E. Power Board
// Contest: Codeforces - Codeforces Round #774 (Div. 2)
// URL: https://codeforces.com/contest/1646/problem/E
// Memory Limit: 256 MB
// Time Limit: 1500 ms
// 
// Powered by CP Editor (https://cpeditor.org)

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<unordered_map>
#define ll long long
#define inf 0x3f3f3f3f
#define Inf 0x3f3f3f3f3f3f3f3f
//#define int  ll
#define endl '\n'
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
int read()
{
	int res = 0,flag = 1;
	char ch = getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch == '-') flag = -1;
		ch = getchar();
	}
	while(ch>='0' && ch<='9')
	{
		res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';
		ch = getchar();
	}
	return res*flag;
}
const int maxn = 1e6+5;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
int n,m,cnt[25];
bool vis[maxn],vis2[maxn*20];
void init(int m)
{
	int sum = 0;
	for(int i = 1;i <= 20;i++)
		for(int j = 1;j <= m;j++)
		{
			if(!vis2[i*j])
			{
				vis2[i*j] = true;
				sum++;
			}
			cnt[i] = sum;
		}
}
int main()
{
	n = read(),m = read();
	init(m);
	ll res = 1;
	for(int i = 2;i <= n;i++)
	{
		if(!vis[i])
		{
			ll cur = i,a = 1;
			while(cur <= n)
			{
				vis[cur] = true;
				cur *= i;
				a++;
			}
			a--;
			res += cnt[a];
		}
	}
	cout<<res<<endl;
	return 0;
}


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:22:01  更:2022-03-06 13:24:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:29:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码