传送门

\(A\)

咕咕咕

const int N=1005;
char s[N][N];int len[N],n,id;
inline bool cmp(R int j,R int k){
R int l=min(len[j],len[k]);
fp(i,1,l)if(s[j][i]!=s[k][i])return s[j][i]<s[k][i];
return len[j]<len[k];
}
int main(){
scanf("%d",&n),id=1;
fp(i,1,n)scanf("%s",s[i]+1),len[i]=strlen(s[i]+1);
fp(i,1,n)if(cmp(i,id))id=i;
printf("%s\n",s[id]+1);
return 0;
}

\(B\)

咕咕

const int N=1e5+5;
typedef long long ll;
int a[N],n;ll sum,sp,res;
int main(){
scanf("%d",&n);
fp(i,1,n)scanf("%d",&a[i]),sum+=a[i],sp+=1ll*a[i]*a[i];
fp(i,1,n)printf("%lld ",sp+1ll*n*a[i]*a[i]-(sum*a[i]<<1));
return 0;
}

\(C\)

首先把所有的\(p_i=b_{i}\times a_{i+1}\)给取出来,并令\(sum=\sum p_i\),那么如果对于一个区间\([l,r]\)执行操作,答案就是\(sum+(k-1)p_{l}+(k-1)p_{r+1}+(k^2-1)(\sum_{i=l+1}^{r}p_i)\)

那么我们枚举\(r\),并把后面那个东西拆成前缀和相减的形式,记录下使值最小的\(l\)对应的值即可

typedef long long ll;
const int N=1e5+5;
int a[N],b[N],p[N],n,k;ll sum[N],res,mn,pmn;
int main(){
scanf("%d%d",&n,&k);
fp(i,1,n)scanf("%d%d",&a[i],&b[i]);
fp(i,1,n+1)p[i]=b[i-1]*a[i];
fp(i,1,n+1){
sum[i]=sum[i-1]+p[i]*(k*k-1);
cmin(mn,pmn+sum[i-1]+p[i]*(k-1));
cmin(pmn,-sum[i]+p[i]*(k-1));
}
fp(i,1,n+1)mn+=p[i];
printf("%lld\n",mn);
return 0;
}

\(D\)

我是白痴……

对于每一个\(i\),记录一个\(mn_i\)表示左边最大能选多少和\(mx_i\)表示右边最多能选多少,那么如果一个询问\([l,r]\)满足\(l\in [mn_i,i]\)且\(r\in [i,mx_i]\),那么\(a_i\)就会对这个询问有贡献

这就是个二维偏序问题了,离线之后可以变成一维,用树状数组维护即可

//quming
#include<bits/stdc++.h>
#define R register
#define pb push_back
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
typedef long long ll;
const int N=1e6+5;
struct node{
int u,v,w;
inline node(R int uu,R int vv,R int ww):u(uu),v(vv),w(ww){}
};
vector<node>p[N];int c[N],a[N],id[N],l[N],r[N],op[N],tid[N],ans[N],mn[N],mx[N];
int n,m,q,top,sum;ll res;
inline void add(R int x,R int y){for(;x<=n;x+=x&-x)c[x]+=y;}
inline int query(R int x){R int res=0;for(;x;x-=x&-x)res+=c[x];return res;}
inline bool cmp(const int &x,const int &y){return r[x]<r[y];}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),q=read();
fp(i,1,n)a[i]=read(),mn[i]=1,mx[i]=n;
for(R int i=1,u,v;i<=m;++i){
u=read(),v=read();
u<v?cmin(mx[u],v-1):cmax(mn[u],v+1);
}
fp(i,1,n)p[i].pb(node(mn[i],i,a[i])),p[mx[i]+1].pb(node(mn[i],i,-a[i]));
fp(i,1,q)id[i]=i,l[i]=read(),r[i]=read();
sort(id+1,id+1+q,cmp);
for(R int i=1,j=1;i<=q;++i){
while(j<=n&&j<=r[id[i]]){
for(auto x:p[j])add(x.u,x.w),add(x.v+1,-x.w);
++j;
}
ans[id[i]]=query(l[id[i]]);
}
fp(i,1,q)res^=1ll*i*ans[i];
printf("%lld\n",res);
return 0;
}

\(E\)

不难发现,设\(x\)中质因子\(p_i\)的次数是\(c_i\),则\(f(x)\)中质因子\(p_i\)的次数是\(\left\lfloor{c_i\over 2}\right\rfloor\)(即每一个质因子的次数都是向下取整)

那么我们枚举\(f(x)\),答案就是\(\sum_{i=1}^{\sqrt{n}} i\times g(n/{i^2})\),其中\(g(n)\)表示\(1\)到\(n\)中最多只有一个质因子的数的个数,也就是\(\sum_{i=1}^n \mu^2(i)\)

计算\(g(n)\)的时候,我们可以用\(\mu\)来容斥,所以\(g(n)=\sum_{i=1}^{\sqrt(n)}\mu(i){n\over {i^2}}\)

这两个东西都可以用整除分块优化,而且\({n\over {i^2}}\)的不同个数是\(O(n^{1\over 3})\)个,所以复杂度是有保证的

//quming
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
#define gg(u) for(int &i=cur[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
using namespace std;
typedef long long ll;
const int N=1e7+5;
bitset<N>vis;int p[N],mu[N],sm[N],m;
void init(int n=1e7){
mu[1]=1;
fp(i,2,n){
if(!vis[i])p[++m]=i,mu[i]=-1;
for(R int j=1;j<=m&&1ll*i*p[j]<=n;++j){
vis[i*p[j]]=1;
if(i%p[j]==0)break;
mu[i*p[j]]=-mu[i];
}
}
fp(i,1,n)sm[i]=sm[i-1]+(mu[i]<0?-mu[i]:mu[i]);
fp(i,1,n)mu[i]+=mu[i-1];
}
ll res=0,bin[25],n,t;int T;
inline ll calc(R ll n){
if(n<=1e7)return sm[n];
R ll t=sqrt(n),res=0;
for(R ll l=1,r;l<=t;l=r+1)
r=sqrt(n/(n/(l*l))),res+=n/(l*l)*(mu[r]-mu[l-1]);
return res;
}
int main(){
// freopen("testdata.in","r",stdin);
init();
for(scanf("%d",&T);T;--T){
scanf("%lld",&n),res=0;
t=sqrt(n);
for(R ll l=1,r;l<=t;l=r+1)
r=sqrt(n/(n/(l*l))),res+=calc(n/(l*l))*(r-l+1)*(l+r)>>1;
printf("%lld\n",res);
}
return 0;
}

\(F\)题咕了

Comet OJ - Contest #8题解的更多相关文章

  1. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  2. Comet OJ - Contest #0题解

    传送门 菜爆了--总共只有一道题会做的--而且也没有短裙好难过 为啥必须得有手机才能注册账号啊喂--歧视么-- \(A\) 解方程 推一下柿子大概就是 \[x-\sqrt{n}=y+z+2\sqrt{ ...

  3. Comet OJ - Contest #3 题解

    传送门 太菜了连\(D\)都做不出来没有小裙子\(QAQ\) \(A\) 暴力把所有的数对都算出来,然后\(sort\)一下就行了 const int N=505; int a[N],st[N*N], ...

  4. Comet OJ - Contest #2题解

    传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(k\)增长非常快,大力模拟一下就行了 int main(){ scanf("% ...

  5. Comet OJ - Contest #15 题解

    传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ sc ...

  6. Comet OJ - Contest #11题解

    传送门 \(A\) 咕咕咕 const int N=1e6+5; char s[N],t[N];int n,res; inline bool cmp(const int &x,const in ...

  7. Comet OJ - Contest #14题解

    Contest14的本质:区间覆盖+Tarjan( A 把距离公式两边平方即可 注意要long long code #include <algorithm> #include <io ...

  8. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  9. Comet OJ - Contest #2简要题解

    Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...

随机推荐

  1. 微信公众号 分享接口 签名通过 分享无效果(JSSDK自定义分享接口的策略调整)

    为规范自定义分享链接功能在网页上的使用,自2017年4月25日起,JSSDK“分享到朋友圈”及“发送给朋友”接口,自定义的分享链接,其域名或路径必须与当前页面对应的公众号JS安全域名一致,否则将调用失 ...

  2. cocos版本说明

    一直知道cocos是做游戏的,想学习一下,结果去官网一看就懵逼了.Cocos Creator,Cocos2d-x,cocos studio,Cocos2d-js,Cocos2d-x-lua,那一种才是 ...

  3. 2.5_Database Interface ODBC数据源及案例

    分类 用户数据源 用户创建的数据源,称为“用户数据源”.此时只有创建者才能使用,并且只能在所定义的机器上运行.任何用户都不能使用其他用户创建的用户数据源. 系统数据源 所有用户在Windows下以服务 ...

  4. java之hibernate之关联映射之多对一单向关联

    1.在之前学习了单表的crud操作.在实际应用中,大都是多表关联操作,这篇会学习如何处理多表之间的关系. 2.考察书籍表和书籍分类表的关系.书籍表和书籍分类表之间是多对一的关系.数据库的表设计为: 3 ...

  5. javascript 区域外事件捕捉setCapture

    今天遇到了这个方法,便去度娘了解了下 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获.一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内.同一时刻只能有一个窗口捕获鼠标. ...

  6. js把文字中的空格替换为横线

    问题描述 把一个字符串里的所有空格转换为横线 var str = "hello word"; var params=str.replace(/\ /g, "-" ...

  7. Java必备技能:clone浅克隆与深克隆

    介绍 一直以来只知道Java有clone方法,该方法属于Object的,对于什么是浅克隆与深克隆就比较模糊了,现在就来补充学习一下. 概念 浅拷贝(浅克隆)复制出来的对象的所有变量都含有与原来的对象相 ...

  8. Vue 默认IIS站点配置

    // Vue 默认IIS站点配置 module.exports = { baseUrl: '/SG/',  }

  9. Centos7安装防火墙firewall

    安装 1.下载 yum install -y firewalld yum install -y firewall-config 2.启动 systemctl start firewalld # 启动 ...

  10. [ike][ipsec] child sa rekey机制的细节分析

    子标题:ipsec rekey是否会导致丢包 author: classic_tong 前言 什么叫rekey. rekey是指ipsec的通信两端定期更换加密信道秘钥的机制. 为了安全性考虑,随着秘 ...