ARC 075
来源:互联网 发布:男士护肤品 知乎 编辑:程序博客网 时间:2024/05/17 00:52
C
01背包
D
每次攻击,相当于对全体造成B的伤害,选一个怪兽造成A-B的伤害,二分次数x (二分的上界不要定高了不然会爆longlongQWQ
E
让b[i]=a[i]-k,相当于问b有多少个连续子序列和>=0
(1:枚举右端点,维护每个左端点的答案,可以手写splay每次看<=一个数的左端点有多少个 或 离线树状数组
(2:也可以维护b的前缀和转为二维偏序)
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long long#define lowbit(x) x&(-x)using namespace std;const int maxn = 210000;int n,K;int a[maxn];struct node{int t,k;ll x;}s[maxn<<1]; int sn;inline bool cmp(const node x,const node y){return x.x==y.x?x.k>y.k:x.x>y.x;}int tr[maxn];void add(int x){for(;x<=n;x+=lowbit(x))tr[x]++;}int query(int x){int re=0;for(;x;x-=lowbit(x))re+=tr[x];return re;}ll ans=0;int main(){ scanf("%d%d",&n,&K); for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]-=K; ll now=0; s[++sn]=(node){0,0,0}; for(int i=1;i<=n;i++) { now+=a[i]; s[++sn]=(node){i,0,-now}; s[++sn]=(node){i,1,-now+a[i]}; }sort(s+1,s+sn+1,cmp); for(int i=1;i<=sn;i++) { if(s[i].k) add(s[i].t); else ans+=query(s[i].t); } printf("%lld\n",ans); return 0;}
F
写出rev(N)=x1x2x3..xn,N=xnxn-1xn-2..x1
容易发现N的位数不超过D的2倍,枚举N的位数L后,从低位到高位,
细节有点多
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long longusing namespace std;const int maxn = 22;ll pw[maxn];int D,dn,d[maxn];int n,a[maxn];ll ans;void calc(){ for(int i=1;i*2<=n;i++) a[i]=-a[n-i+1]; ll now=0; for(int i=1;i<=n;i++) now+=pw[n-i]*a[i]; if(now==(ll)D) { //printf("%d ",n); for(int i=1;i<=n;i++) printf("%d ",a[i]); puts(""); ll num=1ll; if(n&1) num*=10ll; for(int i=1;i*2<=n;i++) { int tmp=abs(a[i]); if(i==1) tmp++; num*=(ll)(10-tmp); } ans+=num; }}void dfs(const int now,const int las){ if(!(n&1)&&now<=n/2) { calc();return; } if((n&1)&&now==(n+1)/2) { a[now]=0;calc();return; } int tmp=(d[now-(n-dn)]+las)%10; a[now]=tmp; dfs(now-1,las&(!tmp)); if(tmp!=0) a[now]=-(10-tmp),dfs(now-1,1);}int main(){ pw[0]=1ll;for(int i=1;i<=18;i++) pw[i]=pw[i-1]*10ll; scanf("%d",&D); int tmp=D;while(tmp) d[++dn]=tmp%10,tmp/=10; for(int i=1;i*2<=dn;i++) swap(d[i],d[dn-i+1]); for(n=dn;n<=2*dn;n++) dfs(n,0); printf("%lld\n",ans); return 0;}
阅读全文
0 0
- ARC 075
- ARC
- ARC
- arc
- ARC
- ARC
- ARC
- ARC
- arc
- ARC
- ARC
- arc
- arc
- ARC
- arc
- ARC
- ARC
- arc
- Eclipse中配置server——tomcat的三个发布目录的探究(亲测实验)(观止)(全网唯一,只此一家别无分号)
- Mysql数据库的备份与还原
- 工作日记2017.10.18 COALESCE、getOrDefault处理null值问题
- 17.Java位运算
- Hibernate关系映射级别注解(一对一单向外键关联)
- ARC 075
- Struts2 日历控件不能正常显示
- pyspark-聚类
- 面试_技术问题_SSM三大框架常见面试题
- [FAQ13232]L 预置apk
- Sqlite中DbOpenHelper的onCreate方法不能被调用
- 1.多线程的概述
- nginx 升级指南
- 磁盘管理之逻辑卷管理(Logical Volume Manager)