悲剧的codeforces 82

来源:互联网 发布:数据分析发展方向 编辑:程序博客网 时间:2024/06/08 14:35

http://codeforces.com/contest/106 

昨天晚上白忙活了,哎哭大哭

(codeforces的pretest的测试数据弱到不行啊,估计只有测试样例吧)

四题挂了三题

A:如此之水,也会挂,少写了一张牌 'A'

B:水题

C:题目看错,用贪心写,其实是裸多重背包 

D:暴力超时,先预处理在每个格子往四个方向能走的最大距离,然后就是随便怎么搞都行

E:貌似是最小球覆盖,模拟退火(网上找的代码)

 

C:

#include<stdio.h>#include<string.h>int c[15],w[15],v[15];int f[1005];int main(){int n,m,p,q,a,b,i,j,k,amount;scanf("%d%d%d%d",&n,&m,&p,&q);c[1]=n/p;w[1]=p;v[1]=q;for(i=1;i<=m;i++){scanf("%d%d%d%d",&a,&b,&p,&q);c[i+1]=a/b;w[i+1]=p;v[i+1]=q;}for(i=1;i<=n;i++)f[i]=0;for(i=1;i<=m+1;i++){if(w[i]*c[i]>=n){for(j=w[i];j<=n;j++)if(f[j]<f[j-w[i]]+v[i])f[j]=f[j-w[i]]+v[i];}else{k=1;amount=c[i];while(k<amount){for(j=n;j>=k*w[i];j--)if(f[j]<f[j-k*w[i]]+k*v[i])f[j]=f[j-k*w[i]]+k*v[i];amount-=k;k*=2;}for(j=n;j>=amount*w[i];j--)if(f[j]<f[j-amount*w[i]]+amount*v[i])f[j]=f[j-amount*w[i]]+amount*v[i];}}printf("%d\n",f[n]);return 0;}


D:

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;#define N 1001#define M 100001int n,m,q;char a[N][N];int dis[N][N][4];struct node{int dir;int len;}b[M];void dfs(){int i,j,k,r;for(i=1;i<n-1;i++){j=1;while(j<m-1){while(j<m-1&&a[i][j]=='#')j++;r=j;k=j;while(j<m-1&&a[i][j]!='#')j++;for(;r<j;r++){dis[i][r][0]=r-k;dis[i][r][1]=j-r-1;}}}for(j=1;j<m-1;j++){i=1;while(i<n-1){while(i<n-1&&a[i][j]=='#')i++;r=i;k=i;while(i<n-1&&a[i][j]!='#')i++;for(;r<i;r++){dis[r][j][2]=r-k;dis[r][j][3]=i-r-1;}}}}int d[4][2]={{0,-1},{0,1},{-1,0},{1,0}};int check(int i,int j){int r=0,len,dir;while(r<q){dir=b[r].dir;len=b[r].len;if(dis[i][j][dir]<len)return 0;i=i+len*d[dir][0];j=j+len*d[dir][1];r++;}return 1;}int ans[30];int main(){int i,j,k;char ch;scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%s",a[i]);scanf("%d",&q);for(i=0;i<q;i++){getchar();scanf("%c%d",&ch,&b[i].len);if(ch=='W') b[i].dir=0;else if(ch=='E') b[i].dir=1;else if(ch=='N') b[i].dir=2;else b[i].dir=3;}dfs();k=0;for(i=0;i<n;i++)for(j=0;j<m;j++)if(a[i][j]>='A'&&a[i][j]<='Z')if(check(i,j)){ans[k++]=a[i][j];}if(k>0){sort(ans,ans+k);printf("%c",ans[0]);for(i=1;i<k;i++)printf("%c",ans[i]);printf("\n");}elseprintf("no solution\n");return 0;}


E:

#include<iostream>#include<cmath>using namespace std;#define inf 1e20#define eps 1e-7#define N 120struct point{   double x,y,z;}ps[N],q;int n;double dist(point a,point b){       a.x-=b.x;       a.y-=b.y;       a.z-=b.z;       return sqrt(a.x*a.x+a.y*a.y+a.z*a.z);}int maxdist(point p){      double res=0;       int k=0,i;       for(i=0;i<n;i++)       {              double tmp=dist(p,ps[i]);              if(tmp>res)              {                     k=i;                     res=dist(p,ps[i]);              }       }       return k;}int main(){int i;    scanf("%d",&n);    for(i=0;i<n;i++)         scanf("%lf%lf%lf",&ps[i].x,&ps[i].y,&ps[i].z);if(n==1){printf("%lf %lf %lf\n",ps[0].x,ps[0].y,ps[0].z);return 0;}    double step=20001;    double ans=inf;    q.x=q.y=q.z=0;    int k=1;    while(step>eps)    {         int d=maxdist(q);         double tmp=dist(ps[d],q);          if(ans>tmp)              ans=tmp;          double dx=ps[d].x-q.x;          double dy=ps[d].y-q.y;          double dz=ps[d].z-q.z;          dx=dx/tmp;          dy=dy/tmp;          dz=dz/tmp;          q.x+=dx*step;          q.y+=dy*step;          q.z+=dz*step;          step*=0.9985;                     }         printf("%lf %lf %lf\n",q.x,q.y,q.z);       return 0;} 


 

原创粉丝点击