1,结果填空:年龄 今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:“我的年龄是花椰妹年龄个位数和十位数之和的二倍”. 花椰妹看大家一脸懵逼,就知道大家也不知道蒜头君的年龄,便连忙补充道:“我的年龄是蒜头君个位数和十位数之和的三倍”. 请你计算:蒜头君和花椰妹年龄一共有多少种可能情况? 提醒:两位的年龄都是在 [10,100)[10,100) 这个区间内. 分析: 暴力枚举每一个人可能的年龄,然后判断是否符合条件. #include<…
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};…
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; ][]; ,,-,}; ,-,,}; int ans; void dfs(int x,int y,int k) { ;i<;i++) { int fx=x+dx[i]; int fy=y+dy[i]; &&fx<=&&fy>…
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int ans; void dfs(int x,int sum) { ) { ans++; return; } ) return; ;i<=(-sum)/x;i++) { dfs(x+,sum+i*x); } } int main() { ans=; dfs(,);…
样例输入: 3 1 -2 1 样例输出: 2 方法一: 将环形数组拆分成为普通数组,(通过搬运复制数据到尾部),再求前缀和,找出最大前缀和.因为枚举了每一个起点,所以最大连续和也一定出现在前缀和中... #include<iostream> using namespace std; int n; ]; ]; int main(){ /*freopen("in.txt","r",stdin);*/ cin>>n; ;i<=n;i++){…
样例输入: 3 4 5 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 5 6 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 10 10 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1…
样例输入: 6 1 9 7 3 5 5 样例输出: 4 思路:贪心,选错贪心思路,只能过一小部分数据,正确贪心思路:从前一半遍历,在后一半中找到比当前元素的两倍大的数(因为这里指针不会后移,所以可以采用双指针) 代码: #include<bits/stdc++.h> using namespace std; int arr[500005]; int n; int main(){ cin>>n; for(int i=0;i<n;i++){ scanf("%d"…
样例输入: 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; }…