2017暑训入门摸底(hdu4500,hdu2190,hdu2111,hud3787,hdu2108)
来源:互联网 发布:小米 查看网络制式 *# 编辑:程序博客网 时间:2024/05/21 18:44
好久都没写博客了,不知不觉暑训都快过半了呢,专心刷题的日子还是很快乐的,今日放假,来赶紧补一发
先从放假前的开始吧,悄悄潜入入门班跟一波榜,回忆起一年前自己似乎还什么都不会呢,感慨万千
A - 这是测试你会不会语言的模拟
思路:典型的模拟暴搜,枚举每个位置,找出最大值即可
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 30;int n,m;int k[maxn][maxn];int main(){ while(scanf("%d%d",&n,&m)!=EOF) { if(m==0&&n==0) { break; } for(int j=0;j<=m+1;j++) { k[0][j]=0; k[n+1][j] = 0; } for(int i=1;i<=n;i++) { k[i][0] = 0; for(int j=1;j<=m;j++) { scanf("%d",&k[i][j]); } k[i][m+1] = 0; } int maxk = -10000,maxi = 0,maxj = 0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { int sum = k[i+1][j] + k[i-1][j] + k[i][j+1] + k[i][j-1]; if(k[i][j]>0) { sum *= (-1); } if(sum > maxk) { maxk = sum; maxi = i; maxj = j; } } } printf("%d %d %d\n",maxi,maxj,maxk); } return 0;}
B - 这是测试你会不会排序
思路:STL sort函数的运用
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 1000;int n;int a[maxn],b[maxn];int main(){ while(scanf("%d",&n)!=EOF) { if(n==0) { break; } int aw=0,bw=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<n;i++) { scanf("%d",&b[i]); } sort(a,a+n); sort(b,b+n); for(int i=0;i<n;i++) { if(a[i]>b[i]) { aw += 2; } else if(a[i]<b[i]) { bw += 2; } else { aw++; bw++; } } printf("%d vs %d\n",aw,bw); } return 0;}
C - 进一步排序
思路:一开始考虑会不会是背包,后来发现物品可分割,果断排序,贪心#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 110;int v,n;typedef struct jewellery{ int p; int m;}Jewellery;Jewellery j[maxn];bool cmp(const Jewellery a, const Jewellery b){ return a.p>b.p;}int main(){ while(scanf("%d",&v)!=EOF) { if(v==0) { break; } scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&j[i].p,&j[i].m); } sort(j,j+n,cmp); int sum = 0; for(int i=0;i<n;i++) { if(v>j[i].m) { v -= j[i].m; sum += j[i].p * j[i].m; } else { sum += v * j[i].p; break; } } printf("%d\n",sum); } return 0;}
D - 测试你会不会字符串
思路:基础的字符串读取,并转化为十进制数,40min4题爽歪歪啊,然而一不小心却wa了一发,将%s整行读取给搞忘了,也是醉了
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 100;long long p = 1l;long long num = 0l;long long a = 0l;long long b = 0l;char in[maxn];int main(){ while(scanf("%s",in)!=EOF) { p = 1l; a = 0l; b = 0l; int inlen = strlen(in); for(int i=0;i<inlen;i++) { if(in[i] == '-') { p *= (-1l); continue; } if(in[i] == ',') { continue; } a *= 10l; a += (long long)(in[i] - '0'); } a *= p; scanf("%s",in); p = 1l; inlen = strlen(in); for(int i=0;i<inlen;i++) { if(in[i] == '-') { p *= (-1l); continue; } if(in[i] == ',') { continue; } b *= 10l; b += (long long)(in[i] - '0'); } b *= p; num = a + b; printf("%lld\n",num); } return 0;}
E - 这是高中数学向量题
思路:判断凸多边形,终于有点难度了判断凸多边形的方法有很多,主要有以下几种:
1.角度法:判断每个顶点对应的内角,若均小于180度,则为凸多边形
2.凸包法:计算该多边形的凸包,若凸包对应的顶点数与该多边形相等,则为凸多边形
3.顶点凹凸性法:利用以当前顶点为中心的矢量叉乘或者计算三角形的有符号面积判断多边形的方向以及当前顶点的凹凸性。
4.辛普森面积法:利用待判别的顶点以及前后两个顶点所组成的三角形,利用辛普森公式计算其面积,如果此三角形面积与整个多边形面积符号相同,那么这个顶点是凸的;如果此三角形面积与整个多边形面积符号不同,那么这个顶点是凹的,即整个多边形也是凹多边形。
本题由于知道了顶点公式,当然选择根据顶点相邻边向量(p1p2和p2p3)叉积来判断,若均大于0则为凸多边形
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 1001;int x[maxn],y[maxn];int n;int main(){ while(scanf("%d",&n)!=EOF) { if(n==0) { break; } bool convex = true; for(int i=0;i<n;i++) { scanf("%d%d",&x[i],&y[i]); } int x1=x[0],y1=y[0],x2=x[1],y2=y[1],x3=x[2],y3=y[2]; for(int i=0;i<n;i++) { int xx1=x2-x1,yy1=y2-y1,xx2=x3-x2,yy2=y3-y2; int cj=xx1*yy2-xx2*yy1; if(cj<=0) { convex = false; break; } x1=x[(i+1)%n],y1=y[(i+1)%n],x2=x[(i+2)%n],y2=y[(i+2)%n],x3=x[(i+3)%n],y3=y[(i+3)%n]; } if(convex) { printf("convex\n"); } else { printf("concave\n"); } } return 0;}
F - 比前面更简单的模拟
思路:模拟,统计字符串并按要求重排。
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;const int maxn = 1010;char a[maxn];int main(){ while(scanf("%s",a)!=EOF) { if(strcmp(a,"E")==0) { break; } int alen = strlen(a); int z=0; int o=0; int j=0; for(int i=0;i<alen;i++) { if(a[i]=='Z') { z++; } else if(a[i]=='O') { o++; } else { j++; } } while(z>0||o>0||j>0) { if(z>0) { printf("Z"); z--; } if(o>0) { printf("O"); o--; } if(j>0) { printf("J"); j--; } } printf("\n"); } return 0;}
好了,差不多了,不做了。很快正式的摸底就要来了
阅读全文
1 0
- 2017暑训入门摸底(hdu4500,hdu2190,hdu2111,hud3787,hdu2108)
- 2017暑训摸底(xdoj1045,xdoj1173,xdoj1007,xdoj1038)
- HDU4500
- HDU2111
- HDU2108
- Hdu2111
- hdu2108
- HDU2108
- HDU2111
- 摸底
- Saving HDU(hdu2111,贪心)
- HDU2111——Saving HDU(贪心)
- HDU2108和HDU2036(叉乘)
- hdu2111 Saving HDU(C语言)
- C语言(4)学习情况摸底
- HDU2108(叉积判断凸多边形,凹多边形)
- hdu2111(贪心)
- HDU_Steps7.1 几何入门 HDU2108 HDU1886 HDU1115 HDU1392 HDU1577 HDU1147 HDU2215 HDU2202
- Java中的运算符
- 菜鸟之歌
- MySQL创建用户及赋予权限
- python 与命令
- 《thinking in JAVA》读书笔记 (二)
- 2017暑训入门摸底(hdu4500,hdu2190,hdu2111,hud3787,hdu2108)
- C语言之文件编程(文件1加文件2)
- 八大排序(二)
- javascript常用实例的实现与封装
- MySQL多表查询回顾
- Ignatius and the Princess IV 【hdu-1029】
- 简易停车场
- Summer Training day4 cf439E 莫比乌斯反演
- PHP合并数组及去重