任意门

C - Bugged

题意:类似装箱问题,但是最后体积总和不能为10的倍数。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define MN 30001
  5. using namespace std;
  6.  
  7. int read_p,read_ca;
  8. inline int read(){
  9. read_p=;read_ca=getchar();
  10. while(read_ca<''||read_ca>'') read_ca=getchar();
  11. while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
  12. return read_p;
  13. }
  14. const int MOD=1e9+;
  15. int n,a[],w;
  16. int main(){
  17. int i,j,k;
  18. n=read();
  19. a[]=;
  20. while(n--){
  21. w=read();
  22. for (i=;i>=;i--) a[i+w]|=a[i];
  23. }
  24. for (i=;i>=;i--) if (a[i]&&i%) return printf("%d\n",i),;
  25. puts("");
  26. }

D - Widespread

题意:n只怪物,每只有一个生命值,每次攻击可以指定一只造成A点伤害,其他所有造成B点伤害(A>B),问全部消灭的最小攻击次数。

题解:二分攻击次数。

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define MN 300001
  6. #define int long long
  7. using namespace std;
  8.  
  9. int read_p,read_ca;
  10. inline int read(){
  11. read_p=;read_ca=getchar();
  12. while(read_ca<''||read_ca>'') read_ca=getchar();
  13. while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
  14. return read_p;
  15. }
  16. const int MOD=1e9+;
  17. int n,a[],w=,mmh=,A,B,L=,R=1e9;
  18. inline bool ju(int x){
  19. int u=B*x,s=;
  20. for (int i=;i<=n;i++)
  21. if (a[i]>u) s+=(a[i]-u+A-)/A;
  22. return s<=x;
  23. }
  24. signed main(){
  25. int i,j,k;
  26. n=read();A=read();B=read();A-=B;
  27. for (i=;i<=n;i++) a[i]=read();
  28. while (L<R){
  29. int mid=L+R>>;
  30. if (ju(mid)) R=mid;else L=mid+;
  31. }
  32. printf("%lld\n",L);
  33. }

E - Meaningful Mean

题意:求一个数组中,平均值不小于k的连续子序列个数。

题解:全部减k之后数据结构处理前缀和即可。

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define MN 210001
  6. #define int long long
  7. using namespace std;
  8.  
  9. int read_p,read_ca;
  10. inline int read(){
  11. read_p=;read_ca=getchar();
  12. while(read_ca<''||read_ca>'') read_ca=getchar();
  13. while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
  14. return read_p;
  15. }
  16. const int MOD=1e9+,M=1e15;
  17. int n,a[MN],ro=,mmh=,k,ls[MN*],rs[MN*],s[MN*],NUM=;
  18. void add(int &p,int l,int r,int k){
  19. if (!p) p=++NUM,ls[p]=rs[p]=s[p]=;
  20. s[p]++;
  21. if (l==r) return;
  22. int mid=l+r>>;
  23. if (k<=mid) add(ls[p],l,mid,k);else add(rs[p],mid+,r,k);
  24. }
  25. int ask(int p,int l,int r,int k){
  26. if (!p) return ;
  27. if (r<=k) return s[p];
  28.  
  29. int mid=l+r>>;
  30. if (k<=mid) return ask(ls[p],l,mid,k);else return ask(rs[p],mid+,r,k)+ask(ls[p],l,mid,k);
  31. }
  32. signed main(){
  33. int i,j,k;
  34. n=read();k=read();
  35. add(ro,-M,M,);
  36. for (i=;i<=n;i++){
  37. a[i]=read()-k;a[i]+=a[i-];
  38. mmh+=ask(ro,-M,M,a[i]);
  39. add(ro,-M,M,a[i]);
  40. }
  41. printf("%lld\n",mmh);
  42. }

F - Mirrored

题意:记rev(N)为把N在10进制下翻转以后的值(无前导0),给出D,求rev(N)=N+D的N的数量。

题解:好开心在考场上搞了出来。其实就是个暴力。枚举N的位数d,再同时枚举第i和d+1-i位,这样可以确定差中第i位和第d+1-i位的可能值,从而实现剪枝。然后你会发现这玩意可以记忆化……

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define MN 21001
  6. #define int long long
  7. using namespace std;
  8.  
  9. int read_p,read_ca;
  10. inline int read(){
  11. read_p=;read_ca=getchar();
  12. while(read_ca<''||read_ca>'') read_ca=getchar();
  13. while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
  14. return read_p;
  15. }
  16. const int MOD=1e9+;
  17. int n,a[MN],B[MN],x,mmh=,mm[][][][];
  18. inline int M(int x){return x<?x+:x;}
  19. inline void work(int p,int n,int a,int b){
  20. if (mm[p][n][a][b]!=-) {mmh+=mm[p][n][a][b];return;}
  21. int u=mmh;
  22. if (p+p-==n){
  23. if (a==&&b==) mmh+=*(B[p]==);else
  24. if (a==&&b==) mmh+=*(B[p]==);
  25. return;
  26. }
  27. if (p+p->n){
  28. mmh+=a==b;
  29. return;
  30. }
  31. for (int i=p==;i<=;i++)
  32. for (int j=;j<=;j++)
  33. if (M(i-j-b)==B[p]&&(a==(j<i)||j==i)&&(M(j-i)==B[n+-p]||M(j--i)==B[n+-p])){
  34. if (a){
  35. if (j==i&&B[n+-p]==) continue;
  36. work(p+,n,M(j--i)==B[n+-p],i-b-j<);
  37. }else{
  38. if (j==i&&B[n+-p]==) continue;
  39. work(p+,n,M(j--i)==B[n+-p],i-b-j<);
  40. }
  41. }
  42. mm[p][n][a][b]=mmh-u;
  43. }
  44. signed main(){
  45. int i,j,k;
  46. x=n=read();
  47. if (n%) return puts(""),;
  48. for (k=;k<=&&x;k++) B[k]=x%,x/=;k--;
  49. for (int i=k;i<=;i++) memset(mm,-,sizeof(mm)),work(,i,,);
  50. printf("%lld\n",mmh);
  51. }

涨rating啦好开心

AtCoder Regular Contest 075的更多相关文章

  1. AtCoder Regular Contest 075 2017年6月4日 C、D、E题解

    http://arc075.contest.atcoder.jp/assignments 昨晚做的atcoder,今天写个简单题解. F题不会做,800point的,就跪了,要等zk大佬来做.zk能做 ...

  2. AtCoder Regular Contest 075 E - Meaningful Mean(树状数组)

    题目大意:求一个数组中,平均值不小于k的连续子序列个数 所有数减去k,算个前缀和出来,就变成二维数点问题了. 没有修改,离线的话就是CZL所说的“NOIP最喜欢的套路”了:倒着加进BIT,以权值为数组 ...

  3. AtCoder Regular Contest 075 D Widespread

    题目传送门 这道题其实二分一下答案就okay了的 不过LL什么的有时候忘了加 被卡了下 #include<cstdio> #include<cstring> #include& ...

  4. AtCoder Regular Contest 075 C D E (暂时)

    C - Bugged 题意 给\(n\)个数,找其中的一个子集,使得其和最大,且不是\(10\)的整数倍. 思路 先对\(n\)个数求和, 如果本身即不被\(10\)整除,则即为答案. 否则,如果本身 ...

  5. 【arc075f】AtCoder Regular Contest 075 F - Mirrored

    题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...

  6. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  7. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  8. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  9. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

随机推荐

  1. springMVC(4)---生成excel文件并导出

    springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...

  2. [LeetCode] 二叉树相关题目(不完全)

    最近在做LeetCode上面有关二叉树的题目,这篇博客仅用来记录这些题目的代码. 二叉树的题目,一般都是利用递归来解决的,因此这一类题目对理解递归很有帮助. 1.Symmetric Tree(http ...

  3. (转)为Xcode添加删除行、复制行快捷键

    转摘链接:http://www.jianshu.com/p/cc6e13365b7e 在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让 ...

  4. HttpClient4.5 post请求xml到服务器

    1.加入HttpClient4.5和junit依赖包 <dependencies> <dependency> <groupId>org.apache.httpcom ...

  5. bzoj 1196: [HNOI2006]公路修建问题

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...

  6. windows 运行banana

    1 git clone 工程 2 安装 npm 3 执行 npm install -g bower

  7. 一起学Linux03之Linux系统目录结构

    我们用XShell登录Linux后,如果你是用root用户登录的,那么直接使用ls命令(List files 列出文件(信息). 注: Linux命令为了方便使用,都是简写.所以,每出现一个新的命令, ...

  8. 树上操作[HAOI 2015]

    树链剖分裸题: 树剖点这里:传送门 代码: #include<bits/stdc++.h> #define sight(c) ('0'<=c&&c<='9') ...

  9. win10 音频服务未响应的解决方法

    最近在调试usb audio设备,由于使用的是自己的audio 设备,所以要频繁的更换采样率,可是 在win10中经常出现一些莫名其妙的问题,今天这个问题就是折腾了我好久才搞定的. 当把usb aud ...

  10. PHP生成验证码

    <?php check_code(); function check_code($width = 100, $height = 50, $num = 4, $type = 'jpeg') { $ ...