第七届北京交通大学ACM程序设计竞赛网络预赛二
来源:互联网 发布:js button 文字 编辑:程序博客网 时间:2024/05/15 18:23
没人陪我玩好无聊=.=
让我拿了1,2血.......
都是切了第一套不来第二套了么=.=
A
貌似这个事训练指南上的uva例题改编
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1822
这个是原题
http://blog.csdn.net/ronnoc/article/details/8703650
这个是我的代码
这道题是阉割版
只用考虑时间就好
两个蚂蚁碰来碰去本质没有变,整体是不变的
也就是可以单看蚂蚁而无视其他=.=
然后就是最长最短的计算了
里面的max,min,表示这只蚂蚁是想快走还是慢走
两种都要取max
#include<stdio.h>#include<algorithm>int a[100010];int max(int a,int b){if(a>b)return a;return b;}int min(int a,int b){if(a>b)return b;return a;}int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int i,n,L;scanf("%d%d",&L,&n);int resa=0,resb=0;for(i=1;i<=n;i++){scanf("%d",&a[i]);resa=max( resa,max(a[i],L-a[i]) );resb=max( resb,min(a[i],L-a[i]) );}printf("Case #%d: %d %d\n",k,resb,resa);}return 0;}
这道题目貌似比较坑?
一开始没读懂题目
貌似应该是最小的B而不是B的和=.=
方法是贪心
贪心了2次
先贪B的最小值最大再贪最小的P
或者是贪心最小的P然后看这时候的B是啥
2重结果
贪心证明貌似很不爽?
大概感知下就好
要么B最优,要么P最优...
2Y...
1WA贪了1次
#include<stdio.h>#include<algorithm>int num[110];int b[110][110];int maxb[110],by[110];int p[110][110];int chop[110];int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int i,j,n;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&num[i]);for(j=1;j<=num[i];j++)scanf("%d%d",&b[i][j],&p[i][j]);maxb[i]=-1;for(j=1;j<=num[i];j++)if(b[i][j]>maxb[i])maxb[i]=b[i][j],by[i]=j;}int x=1,temp=maxb[1];for(i=2;i<=n;i++){if(maxb[i]<temp){temp=maxb[i];x=i;}}for(i=1;i<=n;i++){chop[i]=(int)1e9;for(j=1;j<=num[i];j++)if(b[i][j]>=temp&&p[i][j]<chop[i])chop[i]=p[i][j];}//for(i=1;i<=n;i++)printf("%d ",maxb[i]);printf("maxb\n");//for(i=1;i<=n;i++)printf("%d ",chop[i]);printf("chop\n");int sum=0;for(i=1;i<=n;i++)sum+=chop[i]; double res1=temp/(double)sum;int B=1e9,P=0;for(i=1;i<=n;i++){int tP=p[i][1],tB=b[i][1];for(j=2;j<=num[i];j++)if(tP>p[i][j]){tP=p[i][j];tB=b[i][j];}if(B>tB)B=tB;P+=tP;}double res2=(double)B/P;if(res2>res1)res1=res2;printf("Case #%d: %.3lf\n",k,res1);}return 0;}
C
就是一堆式子相乘
然后格式比较繁琐=.=
注意0 0的trick
3Y
1WA于long long && 0 0
2WA于0 0
#include<stdio.h>#include<math.h>#define LL long longint fi;LL abs(LL x){if(x>0)return x;return -x;} void out(int a,LL b){if(b==0)return;if(!fi){if(b>0)printf("+");else printf("-");}else {fi=0;if(b<0)printf("-");}if(abs(b)!=1)printf("%I64d",abs(b));if(a>=2)printf("x^%d",a);else if(a==1)printf("x");else if(abs(b)==1)printf("%I64d",abs(b));}int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){fi=1;int n,i,j;scanf("%d",&n);LL a[100];for(i=1;i<=50;i++)a[i]=0;scanf("%lld%lld",&a[2],&a[1]);for(i=2;i<=n;i++){int x,y;scanf("%d%d",&x,&y);LL b[100];for(j=1;j<=50;j++)b[j]=0;for(j=2;j<=50;j++)b[j]+=x*a[j-1];for(j=1;j<=50;j++)b[j]+=y*a[j];for(j=1;j<=50;j++)a[j]=b[j];}int max=0;for(i=50;i>=1;i--)if(a[i])break;max=i;printf("Case #%d: ",k);//for(i=max;i>=1;i--)printf("%d ",a[i]);for(i=max;i>=1;i--)out(i-1,a[i]);if(max==0)printf("0");printf("\n");}return 0;}
D
FB题目
就是找规律,一定有循环节
貌似是
0,1,2,0,1,2的简单循环,和n的性质完全一样=.=
#include<stdio.h>int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int n;scanf("%d",&n);printf("Case #%d: ",k);if(n%3==0)printf("YES\n");else printf("NO\n");}return 0;}
一道找规律的题目,按照箭头填数字之后把每个点的结果写出来瞪眼法就好
#include<stdio.h>int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int x,y;scanf("%d%d",&x,&y);int res=0;if(y>x&&y>=-x){res=4*y-2;}else if(y<-x&&y>=x){x=-x;res=4*x-1;}else if(y>-x+1&&y<=x){res=4*x-3;}else {res=4*(-y);}printf("Case #%d: %d\n",k,res);}return 0;}
F
就是数格子...
数据太小了=.=
有nlgn的算法都懒得写...
就是有l,r两个数组
一个正,一个负,绝对值排序,数每个负的前面有多少正的
排序是Onlgn的
总体就是nlgn
小数据吗=.=
直接n^2的数格子就好=.=
#include<stdio.h>#include<math.h>int map[40][40];int l[40],r[40];//l行r列 int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int n;scanf("%d",&n);int i,j;for(i=1;i<=2*n;i++)l[i]=0,r[i]=0;for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%d",&map[i][j]);l[i]+=map[i][j];r[j]+=map[i][j]; }int res=0;for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(r[i]>l[j])res++;printf("Case #%d: %d\n",k,res);}return 0;}
G
求出现的所有数字的数字和
水题了=.=
之前做过类似的
2血...
#include<stdio.h>#include<string.h>#define LL unsigned long longchar s[10010];bool is_num(char x){if(x>='0'&&x<='9')return 1;return 0;} int main(){int k,z;scanf("%d%*c",&z);for(k=1;k<=z;k++){int i;gets(s);int len=strlen(s);LL temp=0,res=0;for(i=0;i<=len;i++){if(is_num(s[i])){temp*=10;temp+=s[i]-'0';}else {res+=temp;temp=0;}}printf("Case #%d: %I64u\n",k,res);}return 0;}
H
双基回文数,貌似密度很大?
Matrix67的文貌似说到过?(可能记错...)
直接一个个的验证就好=.=
#include<stdio.h>int is_pal(int x,int oct){int a[50];int pa=0;int y=x,i;for(i=1;i<=49;i++)a[i]=0;while(x>0){pa++;a[pa]+=x%oct;x/=oct;}for(i=1;i<=pa;i++){if(a[i]!=a[pa+1-i])return 0;}return 1;}int is_2pal(int x){int flag=0;int i;for(i=2;i<=10;i++)if(is_pal(x,i))flag++;if(flag>=2)return 1;return 0;}int main(){int k,z;scanf("%d",&z);for(k=1;k<=z;k++){int n,s,i=0;scanf("%d%d",&n,&s);++s;printf("Case #%d:\n",k);while(i<n){if(is_2pal(s))i++,printf("%d\n",s);s++;}}return 0;}
- 第七届北京交通大学ACM程序设计竞赛网络预赛二
- 第七届北京交通大学ACM程序设计竞赛网络预赛一
- “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (部分题解)
- 山东省第七届ACM程序设计竞赛
- 山东省第七届ACM大学生程序设计竞赛
- 第七届 山东省ACM大学生程序设计竞赛
- “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (K L题解) CSS出题
- 第十二届北京师范大学程序设计竞赛网络预赛 2014-04-19
- 北航第十二届程序设计竞赛网络预赛题解
- 最小内积 北航第十二届程序设计竞赛网络预赛
- 北航第十二届程序设计竞赛网络预赛__M最小内积
- 华东交通大学2013年ACM“双基”程序设计竞赛 解题报告
- 华东交通大学2013ACM“双基”程序设计竞赛 解题报告
- 华东交通大学2013年ACM“双基”程序设计竞赛获奖公示
- 华东交通大学2014年ACM“双基”程序设计竞赛解题报告
- 华东交通大学2014年ACM“双基”程序设计竞赛解题报告
- 华东交通大学2013年ACM“双基”程序设计竞赛
- 华东交通大学2015年ACM“双基”程序设计竞赛
- const int *p,int *const p区别
- SGU 154. Factorial
- SGU 102(欧拉函数)
- android 2.3.7 miui rom的修改
- 2013编程之美 初赛 传话游戏
- 第七届北京交通大学ACM程序设计竞赛网络预赛二
- 大数相加
- STL关联容器之Map
- 给大家共享好东西喽! 查找数据库中指定字符串,支持2005以上
- 初识递归
- C语言第五堂课作业
- HTML请求的处理过程
- POJ 1833 -排列
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)