上一页 1 2 3 4 5 6 ··· 22 下一页
摘要: 思路:dp[i]=dp[j]+sum[i]-sum[j]-(i-j)*num[j+1];然后就是比较斜率。注意的时这里j+t#include#include#include#include#define Maxn 400010#define LL __int64using namespace std;LL num[Maxn],sum[Maxn],dp[Maxn];int que[Maxn*10];LL Getleft(int j,int k){ return dp[j]-sum[j]+j*num[j+1]-(dp[k]-sum[k]+k*num[k+1]);}LL Getright(in... 阅读全文
posted @ 2013-10-13 18:58 fangguo 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 思路:将每个关系当成一条有向边,查询时就判断之间存在路径。#include#include#include#include#include#include#define Maxn 210using namespace std;map g;map ver;int head[Maxn*2],vi[Maxn*2],e;struct Edge{ int u,v,next;}edge[Maxn*Maxn*2];void add(int u,int v){ edge[e].u=u,edge[e].v=v,edge[e].next=head[u],head[u]=e++;}bool dfs(in... 阅读全文
posted @ 2013-10-13 15:40 fangguo 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 思路:直接vector暴力#include#include#include#include#define Maxn 2000010using namespace std;vector g;char str[Maxn],ss[20];int main(){ int t,i,j,l,pos,ll,r; scanf("%d",&t); while(t--){ g.clear(); scanf("%s",str); l=strlen(str); for(i=0;i<l;i++) g.push_back(st... 阅读全文
posted @ 2013-10-12 17:28 fangguo 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 思路:枚举每个位置的最小字符,用最大匹配判断是否可行#include#include#include#include#include#define Maxn 1010using namespace std;int match[Maxn],vi[Maxn],num[Maxn],g[Maxn][Maxn],f[Maxn],ch[Maxn],n,le;void init(){ memset(match,-1,sizeof(match)); memset(vi,0,sizeof(vi)); memset(num,0,sizeof(num)); memset(g,0,sizeof... 阅读全文
posted @ 2013-10-12 17:27 fangguo 阅读(205) 评论(1) 推荐(0) 编辑
摘要: 思路:dp[i][j][x]表示状态 i 以 j 为结束 得分为 x 的方案数。#include#include#include#include#includeusing namespace std;int dp[5000][13][40],g[5][5],d[13][13],n,l,ans;bool vi[13],ntou[13];struct Point{ int x,y;}p[13];bool OK(int a,int b){ int x1,y1,x2,y2,i; x1=p[a].x,y1=p[a].y; x2=p[b].x,y2=p[b].y; if(x1... 阅读全文
posted @ 2013-10-11 08:41 fangguo 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 思路:和求区间内有多少个不同的数一样,只不过改下权值。#include#include#include#include#include#define Maxn 50010#define LL __int64#define lowbit(x) (x&(-x))using namespace std;int pre[1000010],num[Maxn],n;LL ans[Maxn*4],C[Maxn];struct Query{ int i,l,r; int operatorm) break; } /* for(i=1;i<=n;i++) ... 阅读全文
posted @ 2013-10-09 16:32 fangguo 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 思路:枚举+树的直径#include#include#include#include#include#define clr(x,y) memset(x,y,sizeof(x))#define Maxn 3000#define inf 100000000using namespace std;int head[Maxn],Max[Maxn],lMax[Maxn],id[Maxn],road[Maxn],e,n,ans,te;bool vi[Maxn];struct Edge{ int u,v,next,val;}edge[Maxn*2];void init(){ clr(head,-... 阅读全文
posted @ 2013-10-09 15:15 fangguo 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 思路:dp[i]=dp[j]+(num[i]-num[j+1])^2;#include#include#include#include#define Maxn 1000010#define LL unsigned __int64using namespace std;LL dp[Maxn],num[Maxn];int que[Maxn*3];inline int ReadInt(){ char ch = getchar(); int data = 0; while (ch '9') ch = getchar(); do { ... 阅读全文
posted @ 2013-10-09 12:11 fangguo 阅读(213) 评论(0) 推荐(0) 编辑
摘要: A 水题。B 计算几何求重心,枚举对称点。#include #include #include #include #include using namespace std;#define maxn 600#define eps 1e-6bool zero(double a) {return (fabs(a)eps){ t=barycenter(p[0],p[i],p[i+1]); ret.x+=t.x*t2; ret.y+=t.y*t2; t1+=t2; } } if(fabs(t... 阅读全文
posted @ 2013-10-06 15:13 fangguo 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 思路:先O(n)预处理出ri[i][j],le[i][j],分别表示第i个位置向右边移动出j个空格需要的步数,表示第i个位置向左边移动出j个空格需要的步数。然后枚举间隙处,二分判段最大间隔。#include#include#include#include#define Maxn 710#define inf 100000000using namespace std;int ri[Maxn][Maxn],le[Maxn][Maxn],n,m;char str[Maxn];bool OK(int pos,int x){ int i,j,cnt=inf; if(pos==1) { ... 阅读全文
posted @ 2013-10-06 15:05 fangguo 阅读(273) 评论(0) 推荐(1) 编辑
上一页 1 2 3 4 5 6 ··· 22 下一页