问题边界为起点向原问题正向推导的扩展方式就是递推
原问题向问题边界索要答案就是递归
相似性结构才好递归或者递推
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
int n;
vector<int> chosen;
void calc(int x)
{if (x == n + 1){for (int i = 0; i < chosen.size(); i++){printf("%d ", chosen[i]);}puts("");//输出字符串并且换行return;}//noicalc(x+1);//求解子问题//yesichosen.push_back(x);//记录x已经被选择calc(x+1);//求解子问题chosen.pop_back();//准备会说到上一问题之前,还原现场
}
int main()
{calc(1);
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
int n,m;
vector<int> chosen;
void calc(int x)
{if (chosen.size() > m || chosen.size() + (n - x + 1) < m)return;if (x == n + 1){for (int i = 0; i < chosen.size(); i++){printf("%d ", chosen[i]);}puts(""); //输出字符串并且换行return;}//yesichosen.push_back(x); //记录x已经被选择calc(x + 1); //求解子问题chosen.pop_back(); //准备会说到上一问题之前,还原现场//noicalc(x + 1); //求解子问题
}
int main()
{ cin>>n>>m;calc(1);
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULLchar g[10][10];
char backup[10][10];
int dx[5] = {0, -1, 0, 1, 0}, dy[5] = {0, 0, 1, 0, -1}; //中上右下左void turn(int x, int y)
{ //按一下for (int i = 0; i < 5; i++){int a = x + dx[i], b = y + dy[i];if (a >= 0 && a <= 4 && b >= 0 && b <= 4){g[a][b] ^= 1;}}
}void work()
{int ans = 10000;for (int k = 0; k < 1 << 5; k++){int res = 0;memcpy(backup, g, sizeof g);for (int j = 0; j < 5; j++)if (k >> j & 1){turn(0, j);res++;}for (int i = 0; i < 4; i++)for (int j = 0; j < 5; j++)if (g[i][j] == '0'){res++;turn(i + 1, j);}bool issuccessful = true;for (int j = 0; j < 5; j++)if (g[4][j] == '0'){issuccessful = false;break;}if (issuccessful)ans = min(res, ans);memcpy(g, backup, sizeof g);}if (ans > 6)cout << -1 << endl;elsecout << ans << endl;return;
}int main()
{int t;cin >> t;while (t--){for (int i = 0; i < 5; i++)cin >> g[i];work();}
}
f[n] = min{2*f[i],d[n-i]};
f[1]=1;
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULLint d[13], f[13];int main()
{d[1] = 1;for (int i = 2; i <= 12; i++)d[i] = d[i - 1] * 2 + 1;memset(f, 0x3f, sizeof f);f[0] = 0;for (int i = 1; i <= 12; i++){for (int j = 0; j < i; j++)f[i] = min(f[i], f[j] * 2 + d[i - j]);}for (int i = 1; i <= 12; i++){cout << f[i] << endl;}
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
#define M 9901
const int mod = 9901;int qmi(int a, int k)
{a %= mod;int res = 1;while (k){if (k & 1)res = res * a % mod;a = a * a % mod;k >>= 1;}return res;
}
int sum(int p, int k)
{if (k == 0)return 1;if (k%2==0)return (p % mod * sum(p, k - 1)+1)%mod;return (1 + qmi(p, k / 2 + 1)) * sum(p, k / 2) % mod;
}int main()
{int A, B;cin >> A >> B;int res = 1;for (int i = 2; i <= A; i++){int s = 0;while (A % i == 0){s++;A /= i;}if (s)res = res * sum(i, s * B) % mod;}if (!A)res = 0;cout << res << endl;system("pause");
}
链接: link.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define psi pair<string,int>
#define pll pair<ll,ll>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
pll calc(ll n,ll m){if(n==0) return {0,0};ll len = 1ll<<n-1,cnt = 1ll<<2*n-2;// 子问题的cntauto pos = calc(n-1,m%cnt);auto x = pos.first,y=pos.second;auto z =m/cnt;if(z==0) return {y,x};if(z==1) return {x,y+len};if(z==2) return {x+len,y+len};return {2*len-y-1,len-x-1};}
int main()
{int t;cin>>t;while(t--){ll n,a,b;cin>>n>>a>>b;auto ac = calc(n,a-1);auto bc = calc(n,b-1);double x =ac.first -bc.first,y =ac.second-bc.second;printf("%.0lfn",sqrt(x*x+y*y)*10);}return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULL
map<pii, bool> existed;
int c[N], d[N];
int main()
{int n, p, h, m;cin >> n >> p >> h >> m;for (int i = 1; i <= m; i++){int a, b;cin >> a >> b;if (a > b)swap(a, b);if (existed[make_pair(a, b)])continue;d[a+1]--,d[b-1]++;existed[make_pair(a,b)] = true;}for(int i=11;i<=n;i++){c[i] = c[i-1] + d[i];cout<<h+c[i]<<endl;}
}
[1,n]
while (l < r){ //查找>=x的数中最小的一个 [1,n+1]int mid = (l + r) >> 1;if (a[mid] >= x) r = mid;else l = mid + 1;}return a[l];while (l < r){ //查找<=x的数中最大的一个 a[mid]==searsh value [0,n]int mid = (l + r + 1) >> 1;//不+1死循环if (a[mid] <= x) l = mid;else r = mid-1;}return a[l];
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define pii pair<int, int>
#define psi pair<string, int>
#define ull unsigned ll
#define pb push_back
#define mp make_pair
#define ld long double
const int N = 1E5 + 7;
#define INF ~0ULLdb a[N], b[N], sum[N];int main()
{int n, L;cin >> n >> L;for (int i = 1; i <= n; i++)cin >> a[i];db eps = 1e-5;db l = -1e6, r = 1e6;while (r - l > eps){double mid = (l + r) / 2;for (int i = 1; i <= n; i++)b[i] = a[i] - mid;for (int i = 1; i <= n; i++)sum[i] = (sum[i - 1] + b[i]);db ans = -1e10;db minval = 1e10;for (int i = L; i <= n; i++){minval = min(minval, sum[i - L]);ans = max(ans, sum[i] - minval);}if (ans >= 0)l = mid;elser = mid;}cout<<int(r*1000)<<endl;
}
class Solution {
public:vector<int> specialSort(int N) {vector<int> res;res.push_back(1);for(int i = 2;i <= N;i++){int l = 0,r = res.size() - 1;while(l <= r){int mid = l + r >> 1;if(compare(res[mid],i)) l = mid + 1;else r = mid - 1;}res.push_back(i);for(int j = res.size() - 2;j > r;j--) swap(res[j],res[j + 1]);}return res;}
};
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 7;struct node
{int b, c, pos;
} person[maxn];unordered_map<int, int> maps;
unordered_map<int, int>::iterator it;
int n, m;
int main()
{void input();void solve();while (scanf("%d", &n) != EOF){input();solve();}return 0;
}
void input()
{int value;for (int i = 1; i <= n; i++){cin >> value;maps[value]++;}int movie,first,second;cin>>value;for(int i=1;i<=value;i++){cin>>first;person[i].b = maps[first];person[i].pos =i;}for (int j = 1; j <= value; j++){scanf("%d", &second);person[j].c = maps[second];}return;}
bool cmp(node a, node b)
{return a.b == b.b ? a.c > b.c : a.b > b.b;
}
void solve()
{sort(person + 1, person + 1 + n, cmp);printf("%dn", person[1].pos);maps.clear();return;
}
本文发布于:2024-02-03 06:09:39,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691177749149.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |