现在的位置: 首页 > 综合 > 正文

Codeforces Round #248 (Div. 2) B Kuriyama Mirai’s Stones

2019年02月19日 ⁄ 综合 ⁄ 共 1517字 ⁄ 字号 评论关闭

今天因为电脑被借走了,然后又因为某人要装系统,所以去了机房,参加了这次爆零掉rating的codeforce。

      A题因为测试的时候过了,于是也没怎么想,去做B了,看到B的时候,边玩边看,做的时候想起 拔树 这题,感觉应该要用相同的写法吧,可是我却用了遍历,于是就来了TLE。快结束的时候,又重新码了一遍,码完发现16:03了 (如果提交了,肯定不会掉rating) 。这次做的时间不多,大部分在聊天,玩什么的,和平时晚上做的那么一点时间一样,后来测试的时候,A也在test 25 的时候挂掉了 ! ! ! !
     但是我却爱上了CF(虽然还是集训队里面最渣的),因为这种东西本来就是考你的思维,所以少想就是说明你思路不够,晚上电脑还回来的时候,就把代码交了 看到绿色的Accepted ,还是很开心的。
     然后又突然有想写博客的冲动,不是说做出什么,或者是学了些什么,只是想把自己的这条路上的一些记忆深刻的记录下来吧,我不知道自己会走多远 .......
  
用到  ans[i] = ans[i - 1] + tt[i];
这样下次求部分和的时候就不用在for了、、、

#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; __int64 tt[100010]; __int64 t[100010]; __int64 ans[100010]; __int64 sum[100010]; __int64 cnt; int main() { int n, m, a; int type, l, r; int i; while(~scanf("%d",&n)) { memset(tt, 0, sizeof(tt)); memset(t, 0, sizeof(t)); memset(ans, 0, sizeof(ans)); memset(sum, 0, sizeof(sum)); ans[0] = 0; sum[0] = 0; for(i = 1; i <= n; i ++) { scanf("%d",&tt[i]); t[i] = tt[i]; ans[i] = ans[i - 1] + tt[i]; } sort(t + 1, t + n + 1); for(i = 1; i <= n; i ++) { sum[i] = sum[i - 1] + t[i]; } scanf("%d",&m); while(m --) { scanf("%d%d%d",&type, &l, &r); if(type == 1) { cnt = ans[r] - ans[l - 1]; } else if(type == 2) { cnt = sum[r] - sum[l - 1]; } printf("%I64d\n",cnt); } } return 0; }


下面是拔树的代码

#include<stdio.h> #include<string.h> char tt[10005]; int a[10005],ans[10005]; int main() { int n,i,j,l,h,k; while(~scanf("%d",&n)) { ans[0]=0; int x1=0,x2; getchar(); gets(tt); l=strlen(tt); for(i=1,k=0;i<l;i++) { if(tt[i]=='|') { x2=i; a[k++]=x2-x1-1; x1=x2; } } ans[1]=a[0]; for (i=2;i<=k;i++) ans[i]=a[i-1]+ans[i-1]; int max=0; for(i=k;i-n>=1;i--) { h=ans[i]-ans[i-n-1]; if(h>max) max=h; } printf("%d\n",max); } return 0;

抱歉!评论已关闭.