摘要:
for(int j=2;j<=sqrt(x);j++){ while(!(x%j)){ mp[j]++; x/=j; } } if(x!=1){ mp[x]++; } 阅读全文
摘要:
大致就是选择任意的i,j 提出a[i]的一个因子,给a[j] 所以题目的本质就是因子间的相互转化,问你进行任意次的操作后能使a中的所有元素相等吗 #include<bits/stdc++.h> #define int long long using namespace std; void solve 阅读全文
摘要:
如果要是子数组唯一,没有子序列与之相同,那么就要找同一个字母的第一个出现的位置和最后一个出现的位置 #include<bits/stdc++.h> #define int long long using namespace std; const int N=1e5+10; int a[N]; voi 阅读全文
摘要:
#include<bits/stdc++.h> using namespace std; void solve(){ int n,m; cin>>n>>m; vector<int>a; vector<int>b; a.push_back(1); for(int i=2;i<=n;i++){ int 阅读全文
摘要:
题目是一定有答案的,说明所有的情况都是可行的,那么就会有两种情况 1 两个圆都包括了起点和终点 2 一个原包括了起点,另一个原包括了终点(圆一定是相交的) #include<bits/stdc++.h> using namespace std; double dx(int x1,int y1,int 阅读全文
摘要:
题目大致就是让你判断有没有一个a数组,选一个定点向左循环x次,这样的操作一个k次,能变成给定的b数组 其实这样的题目是死的,你要做的只不过是不断的倒推。 当你找不到一个可以操作的定点,说明是不行。 因为k很大不可以循环1e9次的,说明这个题目一定要缩小k的范围。这其中有一个思想就是如果模拟到了同一个 阅读全文
摘要:
很容易能想到哈希,把每个字符串的数位拆开。然后遍历每个字符串匹配就行 当时我自己漏了一种情况,就是每一种的字符串其实是可以和三种情况的字符串匹配的,分别是比自己长的,短的,一样长的。 #include<bits/stdc++.h> #define int long long using namesp 阅读全文
摘要:
n的范围有2e5,暴力找肯定不行。将这题时间复杂度打下来的关键在于贪心 贪心的点在于局部最优,尽可能的将b里相对大的分给a里相对小的,一共分k个这样的。最后再检查一下,如果不满足就是-1 #include<bits/stdc++.h> using namespace std; const int N 阅读全文
摘要:
打表找到的规律 #include<bits/stdc++.h> #define int long long using namespace std; const int N=2e5+10; int a[N]; void solve(){ int n; cin>>n; map<int,int>mp; 阅读全文
摘要:
当时直接秒了 #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int a[N]; void solve(){ int n; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; int mi= 阅读全文
摘要:
typedef long long LL; LL pow(LL a, LL n, LL m){ LL res = 1; while(n){ if(n & 1){ res = res * a % m; } a = a * a % m; n >>= 1; } return res; 阅读全文