网站建设法规政策高密建网站
news/
2025/9/25 14:09:19/
文章来源:
网站建设法规政策,高密建网站,网站统计付费,网站开发技术流程正题
比赛链接:https://ac.nowcoder.com/acm/contest/1084#question 成绩 T1:T1:T1:数数
题目大意
给出nnn#xff0c;求∑i1n∑j1n(i∗j)\sum_{i1}^n \sum_{j1}^n (i*j)i1∑nj1∑n(i∗j) 和 ∏i1n∏j1n(i∗j)\prod_{i1}^n\prod_{j1}^n(i*j)i1∏nj1∏n(i∗j)
解题…正题
比赛链接:https://ac.nowcoder.com/acm/contest/1084#question 成绩 T1:T1:T1:数数
题目大意
给出nnn求∑i1n∑j1n(i∗j)\sum_{i1}^n \sum_{j1}^n (i*j)i1∑nj1∑n(i∗j) 和 ∏i1n∏j1n(i∗j)\prod_{i1}^n\prod_{j1}^n(i*j)i1∏nj1∏n(i∗j)
解题思路
第一个答案显然就是 (∑i1ni)∗(∑j1nj)(\sum_{i1}^ni)*(\sum_{j1}^n j)(i1∑ni)∗(j1∑nj) 等差数列求和即可O(1)O(1)O(1)解决。 第二个是 ∏i1ni2n⇒(∏i1ni)2n\prod_{i1}^ni^{2n} \Rightarrow\ (\prod_{i1}^n i)^{2n}i1∏ni2n⇒ (i1∏ni)2n 预处理后O(logn)O(\log n)O(logn)回答。
codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll XJQ998244353;
ll t,n,s[10010000],sum;
ll power(ll x,ll b)
{ll ans1;while(b){if(b1) ansans*x%XJQ;xx*x%XJQ;b1;}return ans;
}
int main()
{scanf(%lld,t);s[0]1;for(ll i1;i1e7;i)s[i]s[i-1]*i%XJQ;while(t--){scanf(%lld,n);sum((n1)*n/2)%XJQ;printf(%lld %lld\n,sum*sum%XJQ,power(s[n],2*n));}
}T2:GalahadT2:GalahadT2:Galahad
题目大意
一个长度为nnn的序列求[l,r][l,r][l,r]这个区间的和需要注意的是若一个数出现多次的话只计算一次。
解题思路
莫队会T\color{red}\texttt{\huge莫队会T}莫队会T 我们先将询问按照右端点单调不降排序然后我们用指针进行扫描。
现在我们不需要考虑右端点了只需要在已有的数中每次询问一个左端点。
我们考虑如何计算因为不能重复我们可以对于每个数计算出一个可以影响的范围也就是最右边的那个数。
我们现在得出一种算法我们每次右端点移动时加入一个数若这个数之前没有就直接在树状数组上加入否则就将前面的那个赋值为0后再进行加入。
codecodecode
#includecstdio
#includecstring
#includealgorithm
#define lowbit(x) (x-x)
#define ll long long
using namespace std;
const ll N5e5100;
struct node{ll l,r,id;
}a[N];
ll n,m,w[N],t[N],ans[N],v[N],sum;
void change(ll x,ll z)
{while(xn){t[x]z;xlowbit(x);}
}
ll ask(ll x)
{ll ans0;while(x){anst[x];x-lowbit(x);}return ans;
}
bool cMp(node x,node y)
{return x.ry.r;}
int main()
{scanf(%lld%lld,n,m);for(ll i1;in;i)scanf(%lld,w[i]);for(ll i1;im;i)scanf(%lld%lld,a[i].l,a[i].r),a[i].idi;sort(a1,a1m,cMp);ll tail1;for(ll i1;im;i){while(taila[i].r){if(v[w[tail]]) change(v[w[tail]],-w[tail]);else sumw[tail];v[w[tail]]tail;change(tail,w[tail]);tail;}ans[a[i].id]sum-ask(a[i].l-1);}for(ll i1;im;i)printf(%lld\n,ans[i]);
}T3:T3:T3:烹饪
题目大意
nnn个数的序列aaa在其中选出若干个组成无序序列bbb。使得N∈∑(bi∗ki)\mathbb{N}^\in \sum (b_i*k_i)N∈∑(bi∗ki) kik_iki为任意整数。
求有多少种选择方案数。
解题思路
根据裴蜀定理我们有axbygcd(a,b)axbygcd(a,b)axbygcd(a,b)若gcd(a,b)1gcd(a,b)1gcd(a,b)1那么就可以变成任意正整数。我们可以将其扩展到多元。 gcd(a,b)xcygcd(a,b,c)⇒axbyczgcd(a,b,c)gcd(a,b)xcygcd(a,b,c)\Rightarrow axbyczgcd(a,b,c)gcd(a,b)xcygcd(a,b,c)⇒axbyczgcd(a,b,c) 以此类推我们可以得出若我们选择的无序序列bbb的gcd1gcd1gcd1那么就满足条件。
我们依次设立dpdpdp设fi,jf_{i,j}fi,j表示到第iii个gcdgcdgcd之和为jjj时的方案数。我们有 fi,gcd(i,j)∑fi−1,jf_{i,gcd(i,j)}\sum f_{i-1,j}fi,gcd(i,j)∑fi−1,j
这里我们倒过来转移即可下面的代码是滚动了的。
codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll XJQ998244353;
ll n,num,f[2100];
ll power(ll x,ll b)
{ll ans1;while(b){if(b1) ansans*x%XJQ;xx*x%XJQ;b1;}return ans;
}
int main()
{scanf(%lld,n);for(ll i1;in;i){scanf(%lld,num);f[num](f[num]1)%XJQ;for(ll j1;j2000;j)(f[__gcd(j,num)]f[j])%XJQ;}printf(%lld,(f[1]*power(2,XJQ-2))%XJQ);
}T4:T4:T4:粉丝群
题目大意
求有多少个nnn个数的序列满足以下条件
和为2n2n2n且每个数不小于1任意一个子集的和不为nnn
求有多少个和字典序第kkk小的方案的异或和。
解题思路
结论题打表找一下就好了。 我们会发现方案数是n−1n-1n−1个111和一个n1n1n1还有若是奇数的话还有一个全是222的方案。
证明一下(十分感性)此时我们有一个长度为序列nnn此时对于每个1≤ai≤n1\leq a_i\leq n1≤ai≤n。
那么我们发现若一个数为2k2k2k那么至少就会有kkk个数为111假设最终能组成nnn的有lll个数那么有 2l∑i1lkin−z(z∈[0,∑i1lk])2l\sum_{i1}^l k_in-z(z\in [0,\sum_{i1}^l k])2li1∑lkin−z(z∈[0,i1∑lk]) ⇒∑i1lki≥n−2l−∑i1lk\Rightarrow \sum_{i1}^l k_i\geq n-2l-\sum_{i1}^l k⇒i1∑lki≥n−2l−i1∑lk且∑i1lki≤n−2l\sum_{i1}^l k_i\leq n-2li1∑lki≤n−2l 显然此时对于任意∑i1lkigt;0\sum_{i1}^l k_igt;0∑i1lki0都有解
codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
ll n,k;
int main()
{scanf(%lld%lld,n,k);printf(%lld\n,n(n1)-(n1));if(n1) printf(%lld,(kn)?2:(n1));else printf(%lld,(n1)^1);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917050.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!