151102 总结

来源:互联网 发布:淘宝等级图 编辑:程序博客网 时间:2024/09/21 06:36

NOIP之前来场爆蛋,,心态啊

T1

原以为这道题要写高精,写完发现可以用log替代。。没特判0 70

T2

写了个n^3dp。正确性好像都是错的

正确解法:

我们可以把这些多项式展开,可以贪心得到这道题必须多分组,那么写出方程

正解才30。。

T3

求双联通分量

自己写的不熟吧果然还是太弱了。考场上写挂(没更新dfn),然后特殊情况也没特判就爆蛋啦

正解就是想的那样,,各种细节没注意然后挂掉了 0

考验心理啊

//Copyright(c)2015 liuchenrui#include<cstdio>#include<ctime>#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#define pa {puts((numa&1)?"Bob":"Alice");goto end;}#define pb {puts((numa&1)?"Alice":"Bob");goto end;}#define ld long doubleusing namespace std;inline void R(int &v){v=0;char c=0;int p=1;while(c<'0' || c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0' && c<='9'){v=(v<<3)+(v<<1)+c-'0';c=getchar();}v*=p;}int n,m;int a[100010],b[100010];int main(){freopen("ball.in","r",stdin);freopen("ball.out","w",stdout);int T;R(T);while(T--){int numa=0,numb=0;bool f1=false,f2=false;R(n);for(int i=1;i<=n;i++){R(a[i]);if(a[i]<0)a[i]=-a[i],numa++;if(b[i]==0)f1=true;}R(m);for(int i=1;i<=m;i++){R(b[i]);if(b[i]<0)b[i]=-b[i],numb++;if(b[i]==0)f2=true;}if(f1)puts((numb&1)?"Bob":"Alice");if(f2)puts((numa&1)?"Alice":"Bob");if((numa&1)!=(numb&1)){if(numa&1)puts("Alice");else puts("Bob");continue;}ld x=0,y=0;for(int i=1;i<=n;i++)x+=(log((ld)a[i]));for(int i=1;i<=m;i++)y+=(log((ld)b[i]));if(x>y)pb else pa;end:;}}

//Copyright(c)2015 liuchenrui#include<cstdio>#include<ctime>#include<iostream>#include<algorithm>#include<cstring>using namespace std;inline void R(int &v){v=0;char c=0;int p=1;while(c<'0' || c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0' && c<='9'){v=(v<<3)+(v<<1)+c-'0';c=getchar();}v*=p;}int dp[5005][5005];int a[5005],b[5005];int main(){freopen("xxx.in","r",stdin);freopen("xxx.out","w",stdout);int n,m;R(n);R(m);for(int i=1;i<=n;i++)R(a[i]),a[i]--;for(int i=1;i<=m;i++)R(b[i]),b[i]--;memset(dp,63,sizeof dp);dp[n+1][m+1]=0;for(int i=n;i>=1;i--)for(int j=m;j>=1;j--){dp[i][j]=min(dp[i][j],min(dp[i+1][j],min(dp[i][j+1],dp[i+1][j+1]))+a[i]*b[j]);}cout<<dp[1][1];}

//Copyright(c)2015 liuchenrui#include<cstdio>#include<ctime>#include<iostream>#include<algorithm>#include<cstring>#define o(e) ((((e)-1)^1)+1)using namespace std;inline void R(int &v){v=0;char c=0;int p=1;while(c<'0' || c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0' && c<='9'){v=(v<<3)+(v<<1)+c-'0';c=getchar();}v*=p;}int index,tot;struct Edge{int to,next,from;bool can;}edge[100010];int first[100010],size;int low[100010],dfn[100010];int n,m,ans,t;int num[100010];int father[100010];int getfather(int v){if(father[v]==v)return v;father[v]=getfather(father[v]);return father[v];}void addedge(int x,int y){size++;edge[size].to=y;edge[size].next=first[x];first[x]=size;edge[size].can=true;edge[size].from=x;}void tarjan(int now,int fa){dfn[now]=low[now]=++index;for(int u=first[now];u;u=edge[u].next){if(!dfn[edge[u].to]){tarjan(edge[u].to,u);low[now]=min(low[now],low[edge[u].to]);//if(low[edge[u].to]>dfn[now])fprintf(stderr,"%d %d\n",now,edge[u].to);if(low[edge[u].to]>dfn[now])edge[u].can=false,edge[o(u)].can=false;}else{if(u!=fa && u!=o(fa))low[now]=min(low[now],dfn[edge[u].to]);}}}int main(){freopen("date.in","r",stdin);freopen("date.out","w",stdout);R(n),R(m);for(int i=1;i<=n;i++)father[i]=i,num[i]=1;for(int i=1;i<=m;i++){int x,y;R(x),R(y);addedge(x,y);addedge(y,x);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i,80001);for(int i=1;i<=size;i+=2){if(edge[i].can){int l=getfather(edge[i].from);int r=getfather(edge[i].to);if(l!=r){father[l]=r;num[r]+=num[l];}}}tot=n;//for(int i=1;i<=size;i++)fprintf(stderr,"%d %d %d\n",edge[i].from,edge[i].to,edge[i].can);for(int i=1;i<=n;i++){if(getfather(i)==i){tot-=num[i];ans+=num[i]*tot;}}cout<<ans<<endl;}


0 0
原创粉丝点击