首页 > 代码库 > 20161005模拟
20161005模拟
试题+评测数据下载:https://yunpan.cn/cvKJgPjvrIKAJ (提取码:2d8e)
分析:
T1 模拟计算几何问题 难点主要是圆的相交问题
T2 约瑟夫环问题,模拟即可
T3 稍微想想就能过,maxans:尽量多填数;minans:尽量少填数(满足主视图&左视图的情况下)
2bc*cosA=b^2+c^2-a^2
3
T1
AC代码:
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const double PI=3.14159265358979323846264; struct node{ double x,y; double r;}a[2];inline double getdis(node b,node c){ double xx=b.x-c.x; double yy=b.y-c.y; return sqrt(xx*xx+yy*yy);}void deal(node b,node c){ double len=getdis(b,c); if(len<=fabs(b.r-c.r)){ if(b.r<c.r) swap(b,c); double t1=PI*b.r*b.r; printf("%.3lf\n",t1); return ; } double L=b.r+c.r; double t1=PI*b.r*b.r; double t2=PI*c.r*c.r; if(L<=len){ printf("%.3lf\n",t1+t2); return ; } double ang1=acos((b.r*b.r+len*len-c.r*c.r)/2.0/b.r/len); double ang2=acos((c.r*c.r+len*len-b.r*b.r)/2.0/c.r/len); double ret=ang1*b.r*b.r+ang2*c.r*c.r-len*b.r*sin(ang1); printf("%.3lf\n",t1+t2-ret);}int main(){ freopen("standing.in","r",stdin); freopen("standing.out","w",stdout); int T;scanf("%d",&T); while(T--){ scanf("%lf%lf%lf%lf%lf%lf",&a[0].x,&a[0].y,&a[0].r,&a[1].x,&a[1].y,&a[1].r); deal(a[0],a[1]); } return 0;}
T2
AC代码1:
#include<cstdio>#include<cstring>using namespace std;const int N=1e6+10;int n,t;bool vis[N];void deal(int m){ int tot=n; int p=0; for(int i=1;tot>1;i++){ if(i>n) i=1; if(vis[i]) continue; if(++p==m) p=0,vis[i]=1,tot--; } for(int i=1;i<=n;i++) if(!vis[i]){printf("%d\n",i);return ;}}int main(){ freopen("resist.in","r",stdin); freopen("resist.out","w",stdout); scanf("%d%d",&n,&t); deal(t); return 0;}
AC代码2:
#include<cstdio>using namespace std;int n,m,s;int main(){ freopen("resist.in","r",stdin); freopen("resist.out","w",stdout); scanf("%d%d",&n,&m); for(int i=2;i<=n;i++) s=(s+m)%i; printf("%d",s+1); return 0;}
T3
AC代码1:
#include<cstdio>#include<algorithm>using namespace std;const int N=1e3+10;int n,m,zhu[N],zuo[N],mp[N][N];bool vis1[N],vis2[N];int minans,maxans;void get_min(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(!vis1[i]&&!vis2[j]&&zhu[i]==zuo[j]){ vis1[i]=vis2[j]=1; mp[i][j]=zhu[i]; } } } for(int i=1;i<=n;i++){ if(!vis1[i]){ for(int j=1;j<=m;j++){ if(!mp[i][j]&&zhu[i]<=zuo[j]){ mp[i][j]=zhu[i]; if(zhu[i]==zuo[j]) vis2[j]=1; break; } } } } for(int j=1;j<=m;j++){ if(!vis2[j]){ for(int i=1;i<=n;i++){ if(!mp[i][j]&&zuo[j]<=zhu[i]){ mp[i][j]=zuo[j];break; } } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ minans+=mp[i][j]; } }}void get_max(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ maxans+=min(zhu[i],zuo[j]); } }}int main(){ freopen("neighbor.in","r",stdin); freopen("neighbor.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",zhu+i); for(int i=1;i<=m;i++) scanf("%d",zuo+i); get_min(); get_max(); printf("%d %d",minans,maxans); return 0;}
AC代码2:
#include<iostream>#include<cstdio>#include<cstring>const int N=1e3+10;using namespace std;int n,m,zhu[N],zuo[N],maxans,minans;int f[N],c[N];int main(){ freopen("neighbor.in","r",stdin); freopen("neighbor.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&zhu[i]); for(int i=1;i<=m;i++)scanf("%d",&zuo[i]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) maxans+=min(zhu[i],zuo[j]); for(int i=1;i<=n;i++)f[zhu[i]]++; for(int i=1;i<=m;i++)c[zuo[i]]++; for(int i=0;i<=1000;i++) minans+=max(f[i],c[i])*i; printf("%d %d\n",minans,maxans); return 0; }
20161005模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。