当前位置: 首页 > news >正文

安丘建设网站遵义建设厅官方网站 元丰

安丘建设网站,遵义建设厅官方网站 元丰,定制小程序网站开发公司,wordpress直接上传视频网站Edu 151 A. Forbidden Integer 题意#xff1a; 你有[1, k]内除了 x x x的整数#xff0c;每个数可以拿多次#xff0c;问 ∑ n \sum n ∑n是否可行并构造 思路#xff1a; 有1必能构造#xff0c;否则假如没有1#xff0c;假如有2, 3必定能构造出大于等于2的所有数 你有[1, k]内除了 x x x的整数每个数可以拿多次问 ∑ n \sum n ∑n是否可行并构造 思路 有1必能构造否则假如没有1假如有2, 3必定能构造出大于等于2的所有数否则只有2的话只能构造出偶数。 #include bits/stdc.h #define local #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; using ll long long; using db double; using PII pairint, int; using PLI pairll, int;templateclass T ostream operator(ostream io, vectorT a) {io {; for (auto I: a)io I ;io };return io; }templateclass T ostream operator(ostream io, setT a) {io {; for (auto I: a)io I ;io };return io; }templateclass K, class V ostream operator(ostream io, mapK, V a) {io (;for (auto I: a)io { I.first : I.second };io ); return io; }void debug_out() {cerr endl; }templatetypename Head, typename... Tail void debug_out(Head H, Tail... T) {cerr H;debug_out(T...); }#ifdef local #define debug(...) cerr [ #__VA_ARGS__ ]:, debug_out(__VA_ARGS__) #else #define debug(...) 1 #endif #define all(x) x.begin(),x.end()int main() {IOSint t;cin t;while (t--) {int n, k, x;cin n k x;if (x 1) {if (k 1) {cout NO\n;} else if (k 2) {if (n % 2 0) {cout YES\n;cout n / 2 \n;for (int i 1; i n / 2; i) {cout 2 ;}cout \n;} else {cout NO\n;}} else {if (n % 2 0) {cout YES\n;cout n / 2 \n;for (int i 1; i n / 2; i) {cout 2 ;}cout \n;} else {if (n 1) {cout NO\n;} else {cout YES\n;cout 1 (n - 3) / 2 \n;cout 3 ;for (int i 1; i (n - 3) / 2; i) {cout 2 ;}cout \n;}}}} else {cout YES\n;cout n \n;for (int i 1; i n; i) {cout 1 ;}cout \n;}}return 0; }B. Come Together 题意 棋盘上两个点同时从C出发到A, B, 都走最短路径问最多重叠的格子数 思路不难发现x, y轴对答案的贡献是独立的考虑其中一维假如在同方向才能有贡献分类讨论即可。 #include bits/stdc.h #define local #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; using ll long long; using db double; using PII pairint, int; using PLI pairll, int;templateclass T ostream operator(ostream io, vectorT a) {io {; for (auto I: a)io I ;io };return io; }templateclass T ostream operator(ostream io, setT a) {io {; for (auto I: a)io I ;io };return io; }templateclass K, class V ostream operator(ostream io, mapK, V a) {io (;for (auto I: a)io { I.first : I.second };io ); return io; }void debug_out() {cerr endl; }templatetypename Head, typename... Tail void debug_out(Head H, Tail... T) {cerr H;debug_out(T...); }#ifdef local #define debug(...) cerr [ #__VA_ARGS__ ]:, debug_out(__VA_ARGS__) #else #define debug(...) 1 #endif #define all(x) x.begin(),x.end()int main() {IOSint t;cin t;while (t--) {int xa, ya, xb, yb, xc, yc;cin xa ya xb yb xc yc;int x1 xb - xa, x2 xc - xa, y1 yb - ya, y2 yc - ya;int ans 1;if ((ll)x1 * x2 0) {if (abs(x1) abs(x2)) swap(x1, x2);ans abs(x1);} if ((ll)y1 * y2 0) {if (abs(y1) abs(y2)) swap(y1, y2);ans abs(y1);}cout ans \n;}return 0; }C. Strong Password 题意 给定字符串 s s s问是否存在长度为 m m m, 每个密码的第 i i i位数字在 [ l i , r i ] [l_i, r_i] [li​,ri​]之间且不为 s s s的子序列的字符串。 思路 每个密码在 s s s中都是独立的显然我们要让它不为子序列贪心的考虑在 i i i这个位置选择最靠后的字母建出子序列自动机模拟即可。 #include bits/stdc.h #define local #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; using ll long long; using db double; using PII pairint, int; using PLI pairll, int;templateclass T ostream operator(ostream io, vectorT a) {io {; for (auto I: a)io I ;io };return io; }templateclass T ostream operator(ostream io, setT a) {io {; for (auto I: a)io I ;io };return io; }templateclass K, class V ostream operator(ostream io, mapK, V a) {io (;for (auto I: a)io { I.first : I.second };io ); return io; }void debug_out() {cerr endl; }templatetypename Head, typename... Tail void debug_out(Head H, Tail... T) {cerr H;debug_out(T...); }#ifdef local #define debug(...) cerr [ #__VA_ARGS__ ]:, debug_out(__VA_ARGS__) #else #define debug(...) 1 #endif #define all(x) x.begin(),x.end()int main() {IOSint t;cin t;while (t--) {string s;cin s;int n s.length();s s;int m;cin m;string l, r;cin l r;l l;r r;vectorvectorint nxt(n 1, vectorint(10, 0));for (int i 0; i 10; i)nxt[n][i] n 1;for (int i n - 1; i 0; --i) {for (int j 0; j 10; j) {if (s[i 1] - 0 j) {nxt[i][j] i 1;} else {nxt[i][j] nxt[i 1][j];}}}int ps 0;bool f 0;for (int i 1; i m; i) {int mx 0;if (f)break;for (int j l[i]; j r[i]; j) {mx max(mx, nxt[ps][j - 0]);if (mx n 1) {f 1;break;}}ps mx;}if (ps n 1)f 1;cout (f ? YES\n : NO\n);}return 0; }D. Rating System 题意 给出长度为 n n n的序列 a {a} a, 有一个数 s s s, 第 i i i次操作会使 s s s加上 a i a_i ai​, 选择一个值 k k k, 当 s k s k sk的时候 s s s不会再小于 k k k, 求 n n n次操作后使得 s s s最大的整数 k k k, 输出任意一种 思路 原函数图大体上是折线型的不难想到答案最大的时候 k k k一定是 ∑ a i ( 下降时候取到的 s u m ) \sum a_i(下降时候取到的sum) ∑ai​(下降时候取到的sum)。s的变化分为三个阶段到达 k k k, 经过一些操作下降到 k k k再也不会收到 k k k的限制。考虑枚举第三阶段的起点 i i i, 那么答案就是k sum[n] - sum[i - 1], 维护前缀最大sum更新 k k k即可。 #include bits/stdc.h #define local #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; using ll long long; using db double; using PII pairint, int; using PLI pairll, int;templateclass T ostream operator(ostream io, vectorT a) {io {; for (auto I: a)io I ;io };return io; }templateclass T ostream operator(ostream io, setT a) {io {; for (auto I: a)io I ;io };return io; }templateclass K, class V ostream operator(ostream io, mapK, V a) {io (;for (auto I: a)io { I.first : I.second };io ); return io; }void debug_out() {cerr endl; }templatetypename Head, typename... Tail void debug_out(Head H, Tail... T) {cerr H;debug_out(T...); }#ifdef local #define debug(...) cerr [ #__VA_ARGS__ ]:, debug_out(__VA_ARGS__) #else #define debug(...) 1 #endif #define all(x) x.begin(),x.end()int main() {IOSint t;cin t;while(t--) {int n;cin n;vectorint a(n 1, 0);for (int i 1; i n; i)cin a[i];vectorll sum(n 1, 0);sum[1] a[1];for (int i 2; i n; i) {sum[i] sum[i - 1] a[i];}ll mx 0, ans 0, ans2 0;for (int i 1; i n; i) {ll now sum[n] - sum[i - 1] mx;if (now ans) {ans2 mx;ans now;}mx max(mx, sum[i]);}if (mx ans) {ans2 mx;}cout ans2 \n;}return 0; }E. Boxes and Balls 题意 给定 n n n个盒子其中一些盒子有球保证不可能全满或者全空。每次可以移动球到相邻的空盒子问恰好移动 k k k次的情况下球体排列状况有多少可能性。 思路 最后的排列中球体的相对位置不会改变容易想到一个 d p dp dp, d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示当前枚举到第 i i i个位置放了 j j j个球移动次数之和为 k k k的方案。时间复杂度是 O ( n 2 k ) O(n^2k) O(n2k)对于相对位置移动次数之和的统计套路的转化为位置间隔被经过次数的统计之和。对于i后面的间隔前面的所有存在的球都会对其有贡献贡献为 ∣ s u m i − s u m i ′ ∣ |sum_i - sum_i| ∣sumi​−sumi′​∣, s u m i 为移动前的 ∑ a i sum_i为移动前的\sum a_i sumi​为移动前的∑ai​, s u m i ′ sum_i sumi′​为移动后的。又由于题目要求每个间隔的贡献 ∑ ∣ s u m i − s u m i ′ ∣ ≤ k \sum |sum_i - sum_i| \leq k ∑∣sumi​−sumi′​∣≤k且 s u m i ′ − s u m i − 1 ′ ≤ 1 sum_i - sum_{i - 1} \leq 1 sumi′​−sumi−1′​≤1, 考虑前面所有位置对前缀 i i i所有的间隔的贡献最优情况是个等差数列所以对于每个 i i i, ∣ s u m i − s u m i ′ ∣ s q r t ( k ) |sum_i - sum_i| sqrt(k) ∣sumi​−sumi′​∣sqrt(k)改变 d p dp dp定义 d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k]表示当前枚举到第 i i i个盒子新排列比原排列多 j j j个球移动次数为 k k k的方案数转移的时候枚举下一位放不放即可。 #include bits/stdc.h #define local #define IOS ios::sync_with_stdio(false);cin.tie(0); using namespace std; using ll long long; using db double; using PII pairint, int; using PLI pairll, int;templateclass T ostream operator(ostream io, vectorT a) {io {; for (auto I: a)io I ;io };return io; }templateclass T ostream operator(ostream io, setT a) {io {; for (auto I: a)io I ;io };return io; }templateclass K, class V ostream operator(ostream io, mapK, V a) {io (;for (auto I: a)io { I.first : I.second };io ); return io; }void debug_out() {cerr endl; }templatetypename Head, typename... Tail void debug_out(Head H, Tail... T) {cerr H;debug_out(T...); }#ifdef local #define debug(...) cerr [ #__VA_ARGS__ ]:, debug_out(__VA_ARGS__) #else #define debug(...) 1 #endif #define all(x) x.begin(),x.end()const int maxn 1505; const int mod 1e9 7; int f[2][140][maxn];void Add(int x, int y) {x y;if (x mod)x - mod; } int a[maxn]; int main() {IOSint n, k;cin n k;for (int i 1; i n; i) {cin a[i];}int del 57;int op 0;f[op][0 del][0] 1;for (int i 0; i n; i) {for (int j max(-del, -i); j min(i, del); j) {for (int v 0; v k; v) {if (!f[op][j del][v])continue;for (auto q : {0, 1}) {int nx1 j q - a[i 1];int nx2 v abs(nx1);if (nx2 k)continue;Add(f[op ^ 1][nx1 del][nx2], f[op][j del][v]);}}}for (int j max(-del, -(i 1)); j min(i 1, del); j) {for (int v 0; v k; v) {f[op][j del][v] 0;}}op ^ 1;}int ans 0;for (int i k; i 0; i - 2) {Add(ans, f[op][0 del][i]);}cout ans;return 0; }F.Swimmers in the Pool 题意 游泳道 n n n个人来回游速度 v i v_i vi​, 泳道长 l l l, 总共游 t t t时刻问有多少个时刻至少有2个人碰到。 思路 对于 i i i和 j j j两个人相遇的时刻 t 2 k l ∣ v i − v j ∣ t \frac{2kl}{|v_i - v_j|} t∣vi​−vj​∣2kl​或者 t 2 k l v i v j t \frac{2kl}{v_i v_j} tvi​vj​2kl​, 对于 ∣ v i − v j ∣ |v_i - v_j| ∣vi​−vj​∣和 v i v j v_i v_j vi​vj​是否存在卷积即可。现在问题变成统计 a 2 k l b a \frac{2kl}{b} ab2kl​, 化简即统计 a k b a \frac{k}{b} abk​, a 属于 [ 0 , t 2 l ] a属于[0, \frac{t}{2l}] a属于[0,2lt​], 对于 a a a的统计是唯一的考虑枚举所有满足条件的 b b b, 对于 g c d ( k , b ) 1 gcd(k, b) 1 gcd(k,b)1的答案必定是唯一的, ∑ k 1 t b 2 l [ g c d ( k , b ) 1 ] ∑ d ∣ b m u [ b ] ( t b ) / ( 2 l ) / d \sum\limits_{k 1} ^ {{\frac{tb}{2l}}}[gcd(k, b) 1] \sum_{d|b} mu[b] (tb) / (2l) / d k1∑2ltb​​[gcd(k,b)1]∑d∣b​mu[b](tb)/(2l)/d, 那对于不互质的数要如何计算呢不难发现假如不互质设 g c d ( k , b ) gcd(k, b) gcd(k,b) d, 其必定在 b b b的某个约数 b d \frac{b}{d} db​的时候被完全互质统计到倒序枚举 b b b并枚举约数更新即可。 事实上我们并不需要莫反其本质只是一种容斥同样定义 f i f_i fi​表示 g c d ( k , b ) 1 gcd(k, b) 1 gcd(k,b)1时 b i b i bi的合法方案数 容斥总方案数 − g c d ( k , b ) 2 / 3 / 4.... 容斥总方案数 - gcd(k, b) 2/3/4.... 容斥总方案数−gcd(k,b)2/3/4....所以 f i ( t i ) / ( 2 l ) − ∑ j ∣ i f j f_i (ti) / (2l) - \sum_{j | i} f_j fi​(ti)/(2l)−∑j∣i​fj​, 每个 g c d ( k , b ) ! 1 gcd(k, b) ! 1 gcd(k,b)!1的答案会被 b b b的某个约数d在 g c d ( k ′ , d ) gcd(k, d) gcd(k′,d)的时候更新, 所以最后的答案就是 ∑ f j [ j ∣ b ] \sum f_j [j | b] ∑fj​[j∣b] #includebits/stdc.h #define IOS ios::sync_with_stdio(false); cin.tie(0); using namespace std; using ullunsigned long long; using lllong long; const int mod 998244353,G3;//?? const int maxn2e55; templatetypename T void read(T f){ f0;T fu1;char cgetchar();while(c0||c9){ if(c-)fu-1;cgetchar();}while(c0c9){ f(f3)(f1)(c15);cgetchar();}f*fu; }templatetypename T void print(T x){ if(x0)putchar(-),x-x;if(x10)putchar(x48);else print(x/10),putchar(x%1048); }template typename T void print(T x, char t) {print(x); putchar(t); }inline int Add(int x,int y){ xy;if(xmod)x-mod;return x; }inline int Sub(int x,int y){ x-y;if(x0)xmod;return x; }inline ll mul(ll x,ll y){ return 1ll*x*y%mod;}ll mypow(int a,int b){ int ans1;while(b){ if(b1)ansmul(ans,a);amul(a,a);b1;}return ans; }namespace Poly{ typedef vectorllpoly;poly roots,rev;void getRevRoot(int base){ int lim1base;if((int)roots.size()lim)return;roots.resize(lim);rev.resize(lim);for(int i1;ilim;i)rev[i](rev[i1]1)|((i1)(base-1));for(int mid1;midlim;mid1){ int wnmypow(G,(mod-1)/(mid1));roots[mid]1;for(int i1;imid;i)roots[midi]mul(roots[midi-1],wn);}}void ntt(polya,int base){ int lim1base;for(int i0;ilim;i)if(irev[i])swap(a[i],a[rev[i]]);for(int mid1;midlim;mid1){ for(int i0;ilim;i(mid1)){ for(int j0;jmid;j){ int xa[ij],ymul(a[ijmid],roots[jmid]);a[ij]Add(x,y);a[ijmid]Sub(x,y);}}}}poly operator*(poly a,poly b){ int lim(int)a.size()(int)b.size()-1,base0;while((1base)lim)base;a.resize(1base);b.resize(1base);getRevRoot(base);ntt(a,base);ntt(b,base);for(int i0;i(1base);i)a[i]mul(a[i],b[i]);ntt(a,base);reverse(a.begin()1,a.end());a.resize(lim);int invmypow(1base,mod-2);for(int i0;ilim;i)a[i]mul(a[i],inv);return a;}poly polyInv(poly f,int base){ int lim1base;f.resize(lim);if(lim1){ poly ans(1,mypow(f[0],mod-2));return ans;}poly g(1base,0),g0polyInv(f,base-1),tmpg0*g0*f;for(int i0;i(1(base-1));i)g[i]Add(g0[i],g0[i]);for(int i0;i(1base);i)g[i]Sub(g[i],tmp[i]);return g;}poly polyInv(poly f){ int lim(int)f.size(),base0;while((1base)lim)base;fpolyInv(f,base);f.resize(lim);return f;}poly operator(const polya,const polyb){poly ca;c.resize(max(a.size(),b.size()));int lim(int)b.size();for(int i0;ilim;i)c[i]Add(c[i],b[i]);return c;}poly operator-(const polya,const polyb){ poly ca;c.resize(max(a.size(),b.size()));int lim(int)b.size();for(int i0;ilim;i)c[i]Sub(c[i],b[i]);return c;}poly operator*(const intb,const polya){ poly ca;int lim(int)a.size();for(int i0;ilim;i)c[i]mul(b,c[i]);return c;} }using namespace Poly; const int del 2e5; const int M 4e5 5; int v[maxn * 2 5], mu[maxn * 2 5];bool is[maxn 1];vectorint pr;ll dp[maxn 1];void init() {mu[1] 1;for (int i 2; i 2 * maxn; i) {if (!v[i])pr.emplace_back(i), mu[i] -1;for (int j 0; j pr.size() i * pr[j] 2 * maxn; j) {v[i * pr[j]] 1;if (i % pr[j] 0) {mu[i * pr[j]] 0;break;}mu[i * pr[j]] -mu[i];}} }const int P 1e9 7; vectorint fac[maxn 1];ll mxk[maxn 1];int main() {IOSinit();int l, t, n;cin l t n;int mx 0;for (int i 1; i n; i) {cin v[i];mx max(mx, v[i]);}poly a(mx 1, 0), b(del 1, 0);for (int i 1; i n; i) {a[v[i]], b[del - v[i]];}poly A a * a, B a * b;for (int i 1; i n; i) {A[2 * v[i]]--;}for (int i 1; i 2 * mx; i) {if (A[i]) {is[i] 1;}}for (int i 1; i mx; i) {if (B[i del])is[i] 1;}for (int i 2 * mx; i 1; --i)for (int j i; j 2 * mx; j i)is[i] | is[j];// fac[j].emplace_back(i);ll ans 0;// for (int i 2 * mx; i; --i) {// if (is[i]) {// mxk[i] ((ll) t * i) / (2 * l);// }// for (auto u : fac[i]) {// ans (ans mu[u] * (mxk[i] / u) % P) % P;// if (ans P)// ans - P;// if (ans 0)// ans P;// mxk[i / u] max(mxk[i / u], mxk[i] / u);// }// }for (int i 1; i 2 * mx; i) {dp[i] (dp[i] ((ll) t * i) / (2 * l)) % P;if (is[i])ans (ans dp[i]) % P;for (int j 2 * i; j 2 * mx; j i) {dp[j] (dp[j] - dp[i] P) % P;}}cout ans;return 0; }
http://www.hkea.cn/news/14409458/

相关文章:

  • 安徽省建设行业质量与安全协会网站湖南省建设局官方网站
  • 做响应式网站的意义网站首页标题怎么写
  • 爱网站在线观看视频在putty做网站要拷贝什么
  • 网帆网站建设大专计算机专业主要学什么
  • 浙江省2012年7月自学考试网站建设与网页设计滕州网站建设招聘
  • 企业建设微网站的重要性台州网站设计建设
  • 旅游网站设计的目的服务器网站托管
  • 学网站建设需要什么安庆网站建设aqwzjs
  • 南京门户网站建设网站制作公司排名
  • 展示型网站源码上海网站建设seo站霸网络
  • 大型网站 网站建设漳州网站开发找出博大科技
  • 如何做网课网站邢台住房与城乡建设部网站
  • 哪一个军事网站做的比较好it运维管理平台软件
  • 邯郸seo优化大型网站seo课程
  • 如何设置公司网站火车头wordpress 5.1
  • 成都网站推广排名重庆专业网站推广费用
  • php建站软件哪个好网站建设与管理 教学设计
  • 上海网站建设-中国互联wordpress 下载远程图片大小
  • php网站开发有什么软件婚纱摄影网站图片
  • H5酒店静态网站建设开题报告范文dw主页制作
  • 网站建设公司专业网站开发研发房产微信营销方案
  • 帝国建设网站韩漫网站建设
  • 青海城乡建设厅网站 官网wordpress 克隆页面
  • 展厅设计制作网站寻找石家庄网站建设
  • 天门市规划建设局网站重庆新闻天天630
  • 做移门图的 网站有哪些微信小程序开发模板网站
  • seo建站优化国外做电商网站有哪些
  • 网上书店网站建设策划书网站psd模版
  • 上海网站建设品广州营销型企业网站建设
  • 网站建设哪家好知道简述it外包的作用