微擎怎么做网站,wordpress一键ssl,手机如何登陆Wordpress,银川建网站H - Exam
题意#xff1a;就是给你一个数N#xff0c;和一个方案数K#xff0c;初始值为1#xff0c;你有三种操作方式让值恰为N
1#xff1a;自身加1#xff1b; 2#xff1a;加上X#xff1b; 3#xff1a;自身乘以7#xff1b;
要你确定一X使得你…H - Exam
题意就是给你一个数N和一个方案数K初始值为1你有三种操作方式让值恰为N
1自身加1 2加上X 3自身乘以7
要你确定一X使得你的方案数恰好为K
思路一开始根本没有去想dp只是感觉是一个组合数之类得题赛后与其他队交流了一下说是dp。。。dp真是我千百遍啊。。思路见注释
#include bits/stdc.h
using namespace std;
#define int long long
#define endl \n
const int N 2e5 10;
const int INF 1e18;
const int mod 1e9 7;
int n, k, ads, m, t, x, ans, a[N], ad, jd, f[N];
string s;
void ClearFloat()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
}
int read()
{int ret 0, f 1;char ch getchar();while (0 ch || ch 9){if (ch -)f -1;ch getchar();}while (0 ch ch 9){ret ret * 10 ch - 0;ch getchar();}return ret * f;
}
/*
状态表示f[i]表示和为i的所有集合
属性方案数量
状态计算f[i]f[i-1]f[i]f[i-x];(前提大于x)f[i]f[i/7];前提为7的倍数
*/
signed main()
{n read(), m read();for (int i 2; i n; i){for (int j 0; j n; j)//每次枚举一个x都要初始化为0f[j] 0;f[1] 1; // 初始化f[1]为1因为到达1的方式只有一种那就是初始状态for (int j 1; j n; j){f[j] f[j - 1]; // 其通过1操作可以到达if (j i)f[j] f[j - i]; // 或者j大于x时通过2操作到达注意一定要大于应为初始值为1if (j % 7 0) // 或者为7的倍数通过操作3来到达此时的值f[j] f[j / 7];}if (f[n] m) // 由于枚举顺序由小到达故一定为最优解{printf(%lld\n, i);return 0;}}printf(0\n);
}D - 38 parrots
题意就是给你一个数n接下来n个操作加入一个动物的长度--减去最前面的一个动物操作询问当前有没有一个动物可以用其的倍数来表示全部的动物长度在
思路我们想这一定和区间最大公约数有关但是如果不超时的维护他们呢很明显我们维护区间最大公约数和区间最小值因为我们知道这个动物的长度一定是最小的且一定是区间最大公约数因此我们可以考虑用线段树来维护且可以离线的操作只需要动态根据加操作和减操作来更新查询的左右区间即可我们甚至不用维护区间和因为根本没有用
#include bits/stdc.h
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl \n
#define lowbit(x) x (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pairint, int PII;
typedef pairdouble, double PDD;
#define max(a, b) (((a) (b)) ? (a) : (b))
// #define min(a, b) (((a) (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N 6e5 10, M 1010, inf 0x3f3f3f3f, mod 18446, P 13331;
const double eps 1e-8;
string s[N];
// mapint, int mp;
int w[N], cnt, n;
struct Node
{int l, r;int sum, d;int minn;
} tr[N * 4];int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
void pushup(Node u, Node l, Node r)
{u.sum l.sum r.sum;u.minn min(l.minn, r.minn);u.d gcd(l.d, r.d);
}
void pushup(int u)
{pushup(tr[u], tr[u 1], tr[u 1 | 1]);
}
void build(int u, int l, int r)
{if (l r){int b w[r];tr[u] {l, r, b, b, b};}else{tr[u].l l, tr[u].r r;int mid l r 1;build(u 1, l, mid), build(u 1 | 1, mid 1, r);pushup(u);}
}
Node query(int u, int l, int r)
{if (tr[u].l l tr[u].r r)return tr[u];else{int mid tr[u].l tr[u].r 1;if (r mid)return query(u 1, l, r);else if (l mid)return query(u 1 | 1, l, r);else{auto left query(u 1, l, r);auto right query(u 1 | 1, l, r);Node res;pushup(res, left, right);return res;}}
}
void solve()
{cin n;for (int i 1; i n; i){cin s[i];if (s[i][0] ){string p s[i].substr(1);int x stoi(p);w[cnt] x;}}build(1, 1, cnt);int l 1, r 0;for (int i 1; i n; i){if (s[i][0] ){r;}else if (s[i][0] -){l;}else{int x query(1, l, r).d;int y query(1, l, r).minn;if (x y)cout Y x endl;elsecout N endl;}}
}
signed main()
{Ysanqian;int T;T 1;// cin T;while (T--)solve();return 0;
}
A - Normal Magic Square 思路就是求其1~n方的和除以行数即可可以用等差数列求和
就不放代码了
J - Multidimensional Points 思路很明显就是一个前缀和即可
I - Hole Punch 思路将其分解约数除去1(最后一并输出1和本身如果除以这个因子为偶数则输出即可
注意输出顺序
#include bits/stdc.h
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl \n
#define lowbit(x) x (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pairint, int PII;
typedef pairdouble, double PDD;
#define max(a, b) (((a) (b)) ? (a) : (b))
#define min(a, b) (((a) (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N 1e6 10, M 1010, inf 0x3f3f3f3f, mod 18446, P 13331;
const double eps 1e-8;
int n, ans;
vectorint g;
priority_queueint, vectorint, greaterint q;
void fun(int x)
{for (int i 1; i x / i; i){if (x % i 0){g.pb(i);if (x / i ! i)g.pb(x / i);}}
}
void solve()
{cin n;fun(n);for (auto ed : g){if (ed ! 1 ed ! n n % ed 0 n / ed % 2 0){q.push(ed);ans;}}cout ans 1 endl;cout 1 ;while (q.size()){int u q.top();cout u ;q.pop();}
}
signed main()
{Ysanqian;int T;T 1;// cin T;while (T--)solve();return 0;
}
E - Black Box
题意就是给你一个倒叙的01串他是由原01串左移位数相加得来的求原01串注意倒序输出
思路我们可以发现其与原串相加一定是0000长度不一定(以题目的n4为例
然后就是如何计算了我们发现我们只要让原串与给定串第一个不为0的地方相同其余后面的取反前面同为0即可得到原串。
例如样例1101第一位就不是0那么我们这位取1其余取反答案就是1010
又如0010 原串就是0011第三位才位1我们前两位取0第三与其相同后面取反即可
#include bits/stdc.h
using namespace std;
#define pi acos(-1)
#define xx first
#define yy second
#define endl \n
#define lowbit(x) x (-x)
#define int long long
#define ull unsigned long long
#define pb push_back
typedef pairint, int PII;
typedef pairdouble, double PDD;
#define max(a, b) (((a) (b)) ? (a) : (b))
#define min(a, b) (((a) (b)) ? (a) : (b))
#define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
const int N 1e6 10, M 1010, inf 0x3f3f3f3f, mod 18446, P 13331;
const double eps 1e-8;
int n;
string s;
void solve()
{cin n;cin s;int i 0;while (s[i] 0){i;cout 0;}if (i s.size())cout 1;i;for (i; i s.size(); i){if (s[i] 0)cout 1;elsecout 0;}
}
signed main()
{Ysanqian;int T;T 1;// cin T;while (T--)solve();return 0;
}