AC了,但是不知道为什么,但是恶心的不得了~最近写代码,思路都非常清晰,但是代码各种bug~T.T~
说说思路吧:二分~330ms~  小队友fribbi的思路是离线250msAC~

预处理solve函数(让能求出来的尽量都求出来)-->a[2]和a[n-3]已知

①已知a[i]可知a[i+3]
②已知a[i] a[i-1] 或者a[i] a[i+1]或者a[i+1] a[i-1]可知全部

③已知a[0]或a[1]或a[n-2]或a[n-1]可知全部

提问:

①已知则直接输出,不存在a[i+1] a[i-1]已知a[i]未知这种情况,solve已处理

②已知前面或者后面的一个 二分检测(因为至少a[2+2*k],k=0,1,2...已知)

③提问是0位置或者n-1位置 二分检测

检测时候用test数组,因为检测时有赋值,不能对num数组赋值,否则会影响下次的测试~

巨恶心的代码(自己给把自己恶心到了)~

 #include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100000
#define back num[i]=sum[i-1]-num[i-1]-num[i-2]
#define front num[i]=sum[i+1]-num[i+1]-num[i+2]
int num[N+];
int sum[N+];
int test[N+];
int n;
int cal(int id){//make sure id>=2&&id<n-2
//return 1 O(N)全部求出来了,return 0,代表只求出了一部分的数字
int i,least;
if(num[id-]!=-){//左边已知
for(i=id-;i>=;i--) front;for(i=id+;i<n;i++) back;return ;
}
else if(num[id+]!=-){//右边已知
for(i=id-;i>=;i--) front;for(i=id+;i<n;i++) back;return ;
}
else{//左右都未知
least=sum[id+]-num[id];
for(i=id+;i<n&&num[i]==-;i+=){
num[i]=sum[i-]-least;if(i+<n) least=sum[i+]-num[i];
}
least=sum[id-]-num[id];
for(i=id-;i>&&num[i]==-;i-=){
num[i]=sum[i+]-least;if(i->=) least=sum[i-]-num[i];
}
return ;
}
}
void solve(){
int i,j;
if(num[]!=-){num[]=sum[]-num[];for(i=;i<n;i++) back;}
else if(num[]!=-){num[]=sum[]-num[];for(i=;i<n;i++)back;}
else if(num[n-]!=-){num[n-]=sum[n-]-num[n-];for(i=n-;i>=;i--)front;}
else if(num[n-]!=-){num[n-]=sum[n-]-num[n-];for(i=n-;i>=;i--)front;}
else for(j=,i=;i<n-&&!j;i++) if(num[i]!=-) j=cal(i);
//j相当于flag,flag=1代表已经全部求出,不需要继续循环了
return ;
}
int backword(int i,int id){
for(;i<n;i++){
if(test[i]==-) test[i]=sum[i-]-test[i-]-test[i-];
if(test[i]<) if(test[i]<) return (i%==id%)?:;
}
return ;//合法
}
int forward(int i,int id){
for(;i>=;i--){
if(test[i]==-) test[i]=sum[i+]-test[i+]-test[i+];
if(test[i]<) return (i%==id%)?:;
}
return ;//合法
}
bool check(int id,int key,int type){
int i,j;
for(i=;i<n;i++) test[i]=num[i];test[id]=key;
//test[i-1]已知 test[i]测试 向两边检查
if(type==){
if(backword(id+,id)==||forward(id-,id)==) return ;
}
//test[i+1]已知 test[i]测试 向两边检查
else if(type==){
if(backword(id+,id)==||forward(id-,id)==) return ;
}
//test[0]测试,test[1]未知,test[2]已知 向后检查
else if(type==){
test[]=sum[]-test[]-test[];
if(backword(,id)==) return ;
}
//test[n-1]测试,test[n-2]未知,test[n-3]已知 向前检查
else {
test[n-]=sum[n-]-test[n-]-test[n-];
if(forward(n-,id)==) return ;
}
return ;
}
int bin(int type,int id){//二分检查最大值,能大则大
int left=,right=sum[id],mid,ans=left;
while(left<=right){
mid=(left+right)/;
if(check(id,mid,type))//正好 太小
{left=mid+;ans=mid;}
else right=mid-;//太大
}
return ans;
}
int main(){
int i,j;
int p,q;
int res;
while(scanf("%d",&n)!=EOF){
for(i=;i<n;i++) scanf("%d",&num[i]);
for(i=;i<n;i++) scanf("%d",&sum[i]); num[]=sum[]-sum[];//导火索
num[n-]=sum[n-]-sum[n-];//导火索 solve();//把所有的可以计算出来的全部计算出来 scanf("%d",&q);
while(q--){
scanf("%d",&p);
if(num[p]!=-) res=num[p];//num[i]已知
else if(p->=&&num[p-]!=-) res=bin(,p);//num[i-1]已知
else if(p+<n&&num[p+]!=-) res=bin(,p);//num[i+1]已知
else if(p==) res=bin(,p);//num[0]未知,num[1]未知,num[2]已知
else if(p==n-) res=bin(,p);//num[n-1]未知,num[n-2]未知,num[n-3]已知
printf("%d\n",res);
}
}
return ;
}

2013 ACM/ICPC Asia Regional Changsha Online J Candies的更多相关文章

  1. 2013 ACM/ICPC Asia Regional Changsha Online - J

    原题戳这里. 题意: 有一未知列数a1,a2,a3.....an, 已知s[i]=a[i-1]+a[i]+a[i]  (1<i<n) s[1]=a[1]+a[2]; s[n]=a[n-1] ...

  2. 2013 ACM/ICPC Asia Regional Changsha Online G Goldbach

    比赛的时候,被题目误导了,题目最后说结果可能很大,要取模,那时就想直接求会TLE的!!! 赛后才知道,坑啊………… 代码如下: #include<iostream> #include< ...

  3. 2013 ACM/ICPC Asia Regional Changsha Online - G(DP)

    第一眼就想到DP,然后想了N久就想不到可以不重算的DP  最后没办法了 先算出来 再去重.. 因为最多只有三个 对于三个来说有三种组合情况 x+y+z, x*y*z, x*y+z 那要么 x,y,z都 ...

  4. [2013 ACM/ICPC Asia Regional Hangzhou Online J/1010]hdu 4747 Mex (线段树)

    题意: + ;];;;], seg[rt <<  | ]);)) * fa.setv;) * fa.setv;;], seg[rt <<  | ], r - l + );;,  ...

  5. 2013 ACM/ICPC Asia Regional Changsha Online - C Color Representation Conversion

    这个纯粹是一个细节题啊!!! 由于某个地方的浮点数比较写错了,WA了无数次啊…… 代码如下: #include<iostream> #include<cstdio> #incl ...

  6. 2013 ACM/ICPC Asia Regional Changsha Online - E

    第一个被板刷的题 取余 依次算在周几 #include <iostream> #include<cstdio> #include<cstring> #include ...

  7. 2013 ACM/ICPC Asia Regional Changsha Online–C (模拟)

    题目描述 略... 题解 注意控制精度即可....变量全部定义成double,结果round就行....妈蛋....被这题目恶心死了.... 代码: #include <iostream> ...

  8. 2013 ACM/ICPC Asia Regional Changsha Online – C题 Color Representation Conversion (坑爹模拟题)

    题意:给你三种颜色表示模式,RGB,HSV和HSL,实现任意模式之间两两转化. 1.最好别看题目中给的转化公式描述,我觉得叙述的一点也不清楚,看维基百科,把维基百科上的公式一句一句翻译过来就好 2.在 ...

  9. hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...

随机推荐

  1. JavaEE基本了解

    1.  为什么需要JavaEE 我们编写的JSP代码中,由于大量的显示代码和业务逻辑混淆在一起,彼此嵌套,不利于程序的维护和扩展.当业务需求发生变化的时候,对于程序员和美工都是一个很重的负担. 为了程 ...

  2. JPA--多对多关系

    JPA中,多对多关系用@ManyToMany标示. 关系维护端: package com.yl.demo1.bean.manyTomany; import java.util.HashSet; imp ...

  3. HttpServerUtility类

    HttpServerUtility是一个工具类,为了在后台处理请求方便获取到一些常用的类型,Asp.net将很多常用的东西封装到这里. 比如可以使用其进行URL编码解码, HTML编码解码等. // ...

  4. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录状态Session

    在写自动化测试的Node.js脚本时, 时常需要测试所写的case, 可能都需要去重新登录一遍,这将相当的耗时, 好在Selenium都借了Session的机制, 如果在最初的浏览器没有关闭的情况下, ...

  5. 书签小助手V1.1发布了

    更新信息: 1.修改了部分BUG;2.添加了一些不错的网站:3.重新设计了添加书签和编辑书签的界面. 安装说明: 类Ubuntu系统: 1.安装Python3解释器和Python3-tk sudo a ...

  6. 第一天CSS实战培训及笔记及感想

    首先,我很激动...... 3点了,凌晨3点了,我居然还没睡.总共不到3个小时的视频消化了6个小时,今天是培训班第一天,一下子就来高强度的讲课,整个上过基础班的都听得东倒西歪,更别说我这个没上基础班滴 ...

  7. httpServer V1

    package cn.edu.sss.httpServer; import java.io.BufferedReader; import java.io.IOException; import jav ...

  8. Petshop学习第三天

    ASP.NET缓存 ASP.NET充分利用缓存机制,通过某种方法,将系统需要的数据对象.Web页面存储在内存中,使得Web站点需要这些数据时,不经过繁琐的数据库连接.查询和复杂的逻辑运算,就可以触手可 ...

  9. Tomcat普通用户启动注意事项

    今天项目部署上线,老大跟我建议说不要使用root用户部署,试用普通用户运行.刚开始没想什么,后来部署的时候碰到各种权限问题. 记录一下,以防忘记了. 1.使用普通用户启动失败. 首先不用想就去$TOM ...

  10. Scott Hanselman's 2014 Ultimate Developer and Power Users Tool List for Windows -摘自网络

    Everyone collects utilities, and most folks have a list of a few that they feel are indispensable.  ...