Hello world
Hello , world
这只是个愉快的测试
纪念我滚粗的NOIP
最后一年,rp++
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<string> #include<math.h> #include<time.h> #include<vector> #include<bitset> #include<memory> #include<utility> #include<stdio.h> #include<fstream> #include<sstream> #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int a[105]; int min_ans; void dfs(int x,int type) { if (x>=min_ans) return; if (type==0) { //34567 int i; int sum=0; for (i=3;i<=15;i++) { if (a[i]==0) { int j; for (j=i-sum;j<i;j++) { a[j]++; } if (sum>5) { i-=sum; } sum=0; } else { a[i]--; sum++; if (sum>=5) dfs(x+1,0); } } type=1; } if (type==1) { //334455 int i; int sum=0; for (i=3;i<=15;i++) { if (a[i]<=1) { int j; for (j=i-sum;j<i;j++) { a[j]+=2; } if (sum>3) { i-=sum; } sum=0; } else { a[i]-=2; sum++; if (sum>=3) dfs(x+1,1); } } type=2; } if (type==2) { //333444 int i; int sum=0; for (i=3;i<=15;i++) { if (a[i]<=2) { int j; for (j=i-sum;j<i;j++) { a[j]+=3; } if (sum>2) { i-=sum; } sum=0; } else { a[i]-=3; sum++; if (sum>=2) dfs(x+1,2); } } type=3; } if (type==3) { //44446688 //3333AK int i; for (i=1;i<=14;i++) { if (a[i]>=4) { a[i]-=4; int j; for (j=0;j<=14;j++) { if (a[j]>=2) { a[j]-=2; dfs(x+1,3); //444455 a[j]+=2; } } for (j=1;j<=14;j++) { if (a[j]>=2) { a[j]-=2; int k; for (k=j;k<=14;k++) { if (a[k]>=2) { a[k]-=2; dfs(x+1,3); a[k]+=2; } } a[j]+=2; } } for (j=0;j<=14;j++) { if (a[j]>=1) { a[j]--; int k; for (k=j;k<=14;k++) { if (a[k]>=1) { a[k]--; dfs(x+1,3); a[k]++; } } a[j]++; } } a[i]+=4; } } type=4; } if (type==4) { int i; for (i=1;i<=14;i++) { if (a[i]>=3) { a[i]-=3; int j; for (j=1;j<=14;j++) { if (a[j]>=2) { a[j]-=2; dfs(x+1,4); a[j]+=2; } } for (j=0;j<=14;j++) { if (a[j]>=1) { a[j]--; dfs(x+1,4); a[j]++; } } a[i]+=3; } } } //left int j; for (j=0;j<=14;j++) { if (a[j]) x++; } min_ans=min(min_ans,x); } int main() { freopen("landlords.in","r",stdin); freopen("landlords.out","w",stdout); int t,n; scanf("%d%d",&t,&n); int i; for (i=0;i<t;i++) { memset(a,0,sizeof(a)); int j; for (j=0;j<n;j++) { int x,y; scanf("%d%d",&x,&y); if (x==1) x=14; if (x==2) x=1; a[x]++; } min_ans=14; //single dfs(0,0); printf("%d\n",min_ans); } return 0; }
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<vector> #include<string> #include<math.h> #include<time.h> #include<memory> #include<bitset> #include<utility> #include<fstream> #include<sstream> #include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int dp[205][205][2]; int last_dp[205][205][2]; char a[1005]; char b[205]; const int modo=1000000007; int main() { freopen("substring.in","r",stdin); freopen("substring.out","w",stdout); int n,m,k; scanf("%d%d%d",&n,&m,&k); int i; scanf("%s%s",a,b); dp[0][0][0]=1; for (i=0;i<n;i++) { int j; for (j=min(i,m-1);j>=0;j--) { int l=min(j,k-1); int * z=dp[j][l]; int * y=dp[j+1][l]; int * x=dp[j+1][l+1]; for (l=min(j,k-1);l>=0;l--) { if (a[i]==b[j]) { x[1]+=z[0]; if (x[1]>=modo) { x[1]-=modo; } x[0]+=z[0]; if (x[0]>=modo) { x[0]-=modo; } y[1]+=z[1]; if (y[1]>=modo) { y[1]-=modo; } y[0]+=z[1]; if (y[0]>=modo) { y[0]-=modo; } } z[1]=0; z-=2; y-=2; x-=2; } } } printf("%d\n",dp[m][k][0]); return 0; }
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<vector> #include<string> #include<math.h> #include<time.h> #include<memory> #include<bitset> #include<utility> #include<fstream> #include<sstream> #include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int dp[205][205][2]; int last_dp[205][205][2]; char a[1005]; char b[205]; const int modo=1000000007; int main() { freopen("substring.in","r",stdin); freopen("substring.out","w",stdout); int n,m,k; scanf("%d%d%d",&n,&m,&k); int i; scanf("%s%s",a,b); dp[0][0][0]=1; for (i=0;i<n;i++) { int j; for (j=min(i,m-1);j>=0;j--) { int l=min(j,k); int * z=dp[j][l]; int * y=dp[j+1][l]; int * x=dp[j+1][l+1]; for (l=min(j,k);l>=0;l--) { if (a[i]==b[j]) { x[1]+=z[0]; if (x[1]>=modo) { x[1]-=modo; } x[0]+=z[0]; if (x[0]>=modo) { x[0]-=modo; } y[1]+=z[1]; if (y[1]>=modo) { y[1]-=modo; } y[0]+=z[1]; if (y[0]>=modo) { y[0]-=modo; } } z[1]=0; z-=2; y-=2; x-=2; } } } printf("%d\n",dp[m][k][0]); return 0; }
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<vector> #include<string> #include<math.h> #include<time.h> #include<memory> #include<bitset> #include<utility> #include<fstream> #include<sstream> #include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; const int maxn=300005; struct edge { int y; int weight; int id; edge * next; }; edge * li[maxn]; edge * new_edge() { static edge a[600005]; static int top=0; return &a[top++]; } void inserts(int x,int y,int z,int w) { edge * t=new_edge(); t->y=y; t->id=w; t->weight=z; t->next=li[x]; li[x]=t; } void insert_edge(int x,int y,int z,int w) { inserts(x,y,z,w); inserts(y,x,z,w); } int a[maxn],b[maxn]; int num; int lenth[maxn]; bool visit[maxn]; bool tag[3005][3005]; int max_lenth=0; struct node { int x; int y; int lenth; friend bool operator < (const node &a,const node &b) { if (a.x!=b.x) return a.x<b.x; return a.y>b.y; } void read() { scanf("%d%d",&x,&y); x--; y--; } }; node c[maxn]; int dfs(int x) { visit[x]=true; if (((num==-1)&&(x==b[0]))||((num!=-1)&&(x==b[num]))) { return 1; } edge * t; for (t=li[x];t!=0;t=t->next) { if (!visit[t->y]) { if (dfs(t->y)) { if (num==-1) { lenth[0]+=t->weight; max_lenth=max(max_lenth,t->weight); } else { lenth[num]+=t->weight; tag[num][t->id]=true; } return 1; } } } return 0; } int weight[maxn]; int main() { freopen("transport.in","r",stdin); freopen("transport.out","w",stdout); int n,m; scanf("%d%d",&n,&m); if (((n<=3000)&&(m<=3000))||(m==1)) { int i; for (i=1;i<n;i++) { int x,y; scanf("%d%d%d",&x,&y,&weight[i]); x--; y--; insert_edge(x,y,weight[i],i); } for (i=0;i<m;i++) { scanf("%d%d",&a[i],&b[i]); a[i]--; b[i]--; } if (m==1) { memset(visit,false,sizeof(visit)); num=-1; dfs(a[0]); printf("%d\n",lenth[0]-max_lenth); } else { int i; for (i=0;i<m;i++) { memset(visit,false,sizeof(visit)); num=i; dfs(a[i]); } int min_ans=999999999; for (i=1;i<n;i++) { int max_ans=0; int j; for (j=0;j<m;j++) { int t=lenth[j]; if (tag[j][i]) t-=weight[i]; max_ans=max(max_ans,t); } min_ans=min(min_ans,max_ans); } printf("%d\n",min_ans); } } else { static int sum[100005]; int i; sum[0]=0; for (i=1;i<n;i++) { int x,y; scanf("%d%d%d",&x,&y,&weight[i]); sum[i]=sum[i-1]+weight[i]; } for (i=0;i<m;i++) { c[i].read(); if (c[i].x>c[i].y) swap(c[i].x,c[i].y); c[i].lenth=sum[c[i].y]-sum[c[i].x]; } sort(c,c+m); int maxy=0; for (i=0;i<m;i++) { if (c[i].y<=maxy) c[i].x=1000000; maxy=max(c[i].y,maxy); } sort(c,c+m); for (i=0;i<m;i++) { if (c[i].x>=n) break; } m=i; static int max_sum[100005]; max_sum[m]=0; for (i=m-1;i>=0;i--) { max_sum[i]=max(max_sum[i+1],c[i].lenth); } int max_val_sum=0; static int que[maxn]; int front=0,rail=0; int min_ans=999999999; int now=0; int start=0; for (i=1;i<n;i++) { for (;(front<rail)&&(c[que[front]]).y<i;) { front++; } for (;c[start].y<i;) { max_val_sum=max(max_val_sum,c[start].lenth); start++; } for (;c[now].x<i;) { for (;front<rail;) { if (c[que[rail-1]].lenth<c[now].lenth) { rail--; } else { break; } } que[rail++]=now; now++; } min_ans=min(min_ans,max(max(max_val_sum,max_sum[now]),c[que[front]].lenth-weight[i])); } printf("%d\n",min_ans); } return 0; }
Nov 11, 2015 05:25:52 PM
%斗地主
Nov 11, 2015 07:30:21 PM
hrzhrz?hrzhrz!
Nov 11, 2015 09:02:18 PM
是时候给评论加上权限了
Nov 11, 2015 10:09:10 PM
好好好不黑你了