找质数 思路:数据大,用线性筛,筛选素数表,最后查表:题目让我们查找相加等于n的两个数,那么我们就枚举1个素数a,在素数表中查找是否存在n-a也是素数. 注意事项:数据大,不宜用输入输出流,cout.cin.endl这些改成printf scanf 代码: #include<cstdio> int t; int n; int prime[1000010]; //筛选素数 打表 void Prime(){ for (int i = 2; i <= 1000000; i++) { prime…
D题:马的管辖 二进制枚举方案.判断该方案是否全部能被覆盖,将最优方案存下来并进行剪枝. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; int vis[15][15]; int ans=0x3f3f3f3f; int dx[]= {1,1,2,2,-1,-1,-2,-2};…
样例输入: 3 ba a aba 样例输出: 2 3 1 思路一:暴力,只能过50%数据,枚举每一个字符串,内层枚举其他字符串判断是否以这个字符串为后缀 思路二:哈希表,存储每一个后缀的数目,string.substr函数取后缀 substr用法: 代码一: #include <bits/stdc++.h> using namespace std; string s[10010]; int n; int main(){ cin>>n; for(int i = 0;i<n;i+…
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 9; int f[N], a[N]; int n; //二分查找: 在f数组中查找到第一个比x大的数的下标 int find(int l, int r, int x) { while (l < r) { int mid = (l + r) / 2; if (f[mid] < x) { l = mid + 1; } else { r = mid; } }…
思路:从l枚举到r肯定超时,这时我们要转变思路!题目让我们求一个区间内的d的倍数,只需要求出r/d - l/d就是区间内d倍数的个数. 代码: #include <iostream> using namespace std; long long r = 12302135942453; int l = 1032; int d = 234; int main(){ cout<<r/d - 1032/234<<endl; //左右区间都是闭合的 return 0; }…