NENU 17级算法学习小组 Round 2 0530
2018-05-30 19:43
88 查看
密码:12345678
A题:签到题,还是要注意输入的写法,还有就是做题不要用float,最好用double;不要用long,用long long。(有同学用long double,额,这个不怎么用......)
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define ll long long #define inf 100000010 #define maxn 100010 #define PI 3.1415927 using namespace std; int main() { double r; while(scanf("%lf",&r)!=EOF) { double v=r*r*r*4/3*PI; printf("%.3f\n",v+1e-9); } return 0; }B题:简单题。有很多种写法都可以AC。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define ll long long #define inf 100000010 #define maxn 100010 #define PI 3.1415927 using namespace std; int main() { int y,m,d; char a,b; while(scanf("%d%c%d%c%d",&y,&a,&m,&b,&d)!=EOF) { int ans=0; int c[13]; c[0]=0; for(int i=1;i<=12;i++) { if(i==2) continue; if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) c[i]=31; else c[i]=30; } if((y%4==0&&y%100!=0)||y%400==0) c[2]=29; else c[2]=28; for(int i=0;i<=m-1;i++) ans+=c[i]; ans+=d; cout<<ans<<endl; } return 0; }C题:大数阶乘,这题比较难。因为N最大可以是10000,所以N!用long long也存不下,long long最大能存下1e19(差不多),这个时候我们就要用数组来存了,“万进制”了解一下 。还有就是以后遇到这种连long long都存不下的大数问题,要么是有很巧妙的运算技巧,要么就是用数组来存,这点需要注意一下。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define ll long long #define inf 1000010 #define maxn 10010 using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { int a[10010]; a[0]=1; int k=0; //记录位数 for(int i=1;i<=n;i++) { int b=0; //判断是否需要进位 for(int j=0;j<=k;j++) { a[j]=a[j]*i+b; b=a[j]/10000; a[j]%=10000; } if(b>0) { k++; a[k]=b; } } cout<<a[k]; for(int i=k-1;i>=0;i--) printf("%04d",a[i]); cout<<endl; } return 0; }D题:也是签到题。同样需要注意注意输入的写法。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define ll long long #define inf 100000010 #define maxn 100010 using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { if(n==0) break; double a[110]; int b=0,c=0,d=0; for(int i=0;i<n;i++) { scanf("%lf",&a[i]); if(a[i]<0) b++; if(a[i]==0) c++; if(a[i]>0) d++; } cout<<b<<" "<<c<<" "<<d<<endl; } return 0; }E题:简单题。只需要找到最大的字符,记录下来,然后for循环,在最大的字符后边输出(max)即可。
#include<stdio.h> #include<string.h> int main() { int i,len,max; char str[110]; while(scanf("%s",str)!=EOF) { len=strlen(str); max=str[0]; for(i=1;i<len;i++) if(str[i]>max) max=str[i]; for(i=0;i<len;i++) { printf("%c",str[i]); if(str[i]==max) printf("(max)"); } printf("\n"); } return 0; }F题:简单题。只需要按题意将时间转换一下,然后注意输出格式就行了。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define inf 100000010 #define maxn 100010 using namespace std; int main() { int t; cin>>t; while(t--) { char a[100]; cin>>a; int year,month,day,hour,minute,second; year=(a[0]-48)*1000+(a[1]-48)*100+(a[2]-48)*10+a[3]-48; month=(a[5]-48)*10+a[6]-48; day=(a[8]-48)*10+a[9]-48; hour=(a[11]-48)*10+a[12]-48; minute=(a[14]-48)*10+a[15]-48; second=(a[17]-48)*10+a[18]-48; int h=hour; if(hour==0||hour==12) hour=12; else hour%=12; printf("%02d/%02d/%04d-%02d:%02d:%02d",month,day,year,hour,minute,second); if(h>=0&&h<12) cout<<"am"<<endl; else cout<<"pm"<<endl; } return 0; }G题:本来是个简单题,但是因为输入的格式有很多(主要是空格的位置很皮),要分很多种情况写,这就使这道题变得很复杂,我个人也很烦做这种题 。你现在看我代码很短,但最开始做的时候,交上就WA了,debug的时候加了很多注释,试了很多种情况.......这道题我的代码写的很乱,这种题最好自己写,最好别看别人的代码,因为看着真的很乱。
如果下边的5组数据都过了,这题基本就过了。
复制双引号里的内容输入。
1:" "
0
2:" asdf as a"
3
3:" asdf asdf ds"
2
4:"asdf asdf "
1
5:直接输入回车
0
其实还有一个思路:输入数组a,然后对数组a进行一个初始化。把它左边“一连串的”空格赋成'a'(可以是任何字母),再把它右边“一连串的”空格赋成'a'(可以是任何字母),这样就相当于把左右两端的空格给抹去了,对于中间的空格,至于要判断一下a[i]和a[i-1]是否都是空格,如果是的话,ans不加加。
这个题......评测数据有问题,有的同学,代码是错的(上边的第三组测试样例过不了,还有“ a a b",这组样例也过不了),但仍然ac了,还是要注意一下,以后可能就没这么幸运了 。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define inf 100000010 #define maxn 100010 using namespace std; char a[10000010]; char b[100000][100]; int main() { while(gets(a)) { int len=strlen(a); if(strlen(a)==0) {cout<<0<<endl;continue;} int flaggg=0; for(int i=0;i<len;i++) { if(a[i]!=' ') flaggg++; } if(!flaggg) {cout<<0<<endl;continue;} if(strcmp(a,"#")==0) break; memset(b,0,sizeof b); len=strlen(a); int j=0; int k=0; int flag=0; for(int i=0;i<len;i++) { if(a[i]!=' ') {b[j][k]=a[i];k++;} else { if(i-1>=0&&a[i-1]!=' ') {j++;k=0;} } } flaggg=0; for(int i=0;i<strlen(b[j]);i++) { if(b[j][i]!=' ') {flaggg++;break;} } if(!flaggg) j--; int ans=0; for(int i=0;i<=j;i++) { int flagg=0; for(int k=0;k<i;k++) { if(strcmp(b[i],b[k])!=0) continue; else {flagg++;break;} } if(!flagg) ans++; } cout<<ans<<endl; } return 0; }H题:这题是个博弈题(八什博弈)。
这里不讲,想看下边的链接,四种博弈的讲解,感觉讲的很不错。
https://blog.csdn.net/ac_gibson/article/details/41624623
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define inf 100000010 #define maxn 100010 using namespace std; int main() { int n; cin>>n; while(n--) { int n,m; cin>>n>>m; if(n%(m+1)==0) cout<<"Rabbit"<<endl; else cout<<"Grass"<<endl; } return 0; }I题:较难,不过对于学过动态规划的同学来说,这道题真的非常简单,可以说是最基础的动态规划。
这题只需要一层一层往上推即可。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define inf 100000010 #define maxn 100010 using namespace std; using namespace std; int main() { int t; cin>>t; while(t--) { int k,a[110][110]; cin>>k; for(int i=1;i<=k;i++) for(int j=1;j<=i;j++) cin>>a[i][j]; for(int i=k-1;i>=1;i--) for(int j=1;j<=i;j++) a[i][j]+=max(a[i+1][j],a[i+1][j+1]); cout<<a[1][1]<<endl; } return 0; }J题:找规律题。写出来前几项,发现规律a
=a[n-1]+a[n-1](n>=4)。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #define inf 100000010 #define maxn 100010 using namespace std; using namespace std; int main() { int n; cin>>n; int a[50]; a[1]=0; a[2]=1; a[3]=2; for(int i=4;i<50;i++) a[i]=a[i-1]+a[i-2]; while(n--) { int m; cin>>m; cout<<a[m]<<endl; } return 0; }
相关文章推荐
- NENU 17级算法学习小组Round 3 0606
- NENU 17级算法学习小组 Round 5 0627
- NENU 17级算法学习小组Round 4 0613
- NENU 17级算法学习小组 Roun4 0620
- 明何-大310算法学习小组成员募集
- Java入门学习-使用Math,实现lg、平方、开方、round、floor、ceil的算法。
- 关于算法学习的总结和感悟
- Python决策树分类算法学习
- 每天学习一算法系列(7) (根据上排给出十个数,在其下排填出对应的十个数)
- 学习算法手记【原】- 顺序查找
- 【算法导论学习-30】 二叉树专题5:二叉树类型的判断
- 算法学习-三字母字符串组合
- 算法学习之调和级数
- opencv学习-模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- 算法导论学习笔记-第二十章-斐波那契堆
- ACM/ICPC学习新人向导新手必读[转--算法学习推荐]
- 推荐引擎算法学习导论-(协同过滤、聚类、分类、模糊和精确k-means算法等)<转>
- 算法分析与设计学习笔记-概率算法_2
- 支持向量机SVM算法学习(四)
- 算法的学习