学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。
前段时间我们的实验室进行纳新,准备了一些题目,由于之前很少刷题的缘故,在这次刷题的过程中出现了很多的纰漏与问题。同时,我们选用的洛谷平台,对代码进行检查时,也会爆出各种问题,而我也不知道什么问题/(ㄒoㄒ)/~~,提交了很多次后我放弃了😄。评论区有没有大佬,或者刷题的朋友们,可以跟我分享一下刷题经验。🙇
目前正在自学C++,求大佬
关于洛谷
洛谷创建于2013年6月15日,至今已有数万用户,致力于为OIers/ACMers提供清爽、快捷的编程体验。它不仅仅是一个在线测题系统,更拥有强大的社区、在线学习功能。同时,许多教程内容都是由五湖四海的ers提供的,保证了内容的广泛性。无论是初学oi的蒟蒻,还是久经沙场的神犇,均可从洛谷Online Judge获益,也可以帮助他人,共同进步。
评测
洛谷评测系统搭建与Linux上,采用分布式集群保证评测效率,采用沙盒技术保证评测安全。目前,评测系统支持四种语言:C/C++/C++11/Pascal。其编译参数分别为:
C:gcc -DONLINE_JUDGE -Wall -fno-asm -std=c99 -lm
C++:g++ -DONLINE_JUDGE -Wall -fno-asm -std=c++98
C++11:g++ -DONLINE_JUDGE -Wall -fno-asm -std=c++11
Pascal:ppcx64 -dONLINE_JUDGE
在大牛模式下进行提交的所有题目或是有"O2优化"标签的题目在评测时均会自动开启O2优化,题目上传者或者管理员可根据需要自行开启。
各个评测状态
AC:Accept,程序通过。
CE:Compile Error,编译错误。
PC:Partially Correct,部分正确。
WA:Wrong Answer,答案错误。
RE:Runtime Error,运行时错误。
TLE:Time Limit Exceeded,超出时间限制。
MLE:Memory Limit Exceeded,超出内存限制。
OLE:Output Limit Exceeded,输出超过限制。
UKE:Unknown Error,出现未知错误。
常见“我在本地/xxOJ AC了、洛谷却不过”的原因
由于之前很少刷题的缘故,这次在洛谷刷题保守 WA 的困扰。求大佬指正!!!
【P5737】闰年展示
题目描述
输入 x,yx,y,输出 [x,y][x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。
输入格式
输入两个正整数 x,yx,y,以空格隔开。
输出格式
第一行输出一个正整数,表示 [x,y][x,y] 区间中闰年个数。
第二行输出若干个正整数,按照年份单调递增的顺序输出所有闰年年份数字。
输入输出样例
输入
1989 2001
输出
3
1992 1996 2000
说明/提示
数据保证,1582\le x < y \le 30001582≤x
#include<stdio.h> int main() { int x,y,year,n=0,i=0,a[1000]; scanf("%d %d",&x,&y); for (year =x; year <= y;year++) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { a[i] = year; i++; n++; } } printf("%d\n",n); for (i = 0; i < n; i++) { printf("%d ",a[i]); } return 0; }
【P5707】【深基2.例8】再分肥宅水
题目描述
现在有 tt 毫升肥宅快乐水,要均分给 nn 名同学。每名同学需要 22 个杯子。现在想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 33 位),以及一共需要多少个杯子。
输入格式
输入一个实数 tt 和一个正整数 nn,使用空格隔开。
输出格式
输出两行。
第一行输出一个三位小数,表示可以获得多少毫升饮料。第二行输出一个正整数,表示一共需要多少个杯子。
输入输出样例
输入
500.0 3
输出
166.667
6
说明/提示
对于所有数据,0\leq t\leq 100000≤t≤10000 且小数点后不超过 33 位,1\leq n\leq 10001≤n≤1000。
#include<stdio.h> int main(){ float t,x; int n; scanf("%f %d",&t,&n); x=t/n; printf("%0.3f\n",x); printf("%d",n*2); }
【P1427】 小鱼的数字游戏
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_iai(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以 00 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
输入输出样例
输入
3 65 23 5 34 1 30 0
输出
30 1 34 5 23 65 3
说明/提示
数据规模与约定
对于 100\%100% 的数据,保证 0 \leq a_i \leq 2^{31} - 10≤ai≤231−1,数字个数不超过 100100。
#include<stdio.h> int main(){ int array[100],i,j=1; while(j!=0){ scanf("%d",&array[i]); j=array[i]; i++; }; int x=i-2; for(;x>=0;x--){ printf("%d ",array[x]); } return 0; }
【P1104】 生日
题目描述
cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。
输入格式
输入共有 22 行,
第 11 行为 OI 组总人数 nn;
第 22 行至第 n+1n+1 行分别是每人的姓名 ss、出生年 yy、月 mm、日 dd。
输出格式
输出共有 nn 行,
即 nn 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)
输入输出样例
输入
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
输出
Luowen
Yangchu
Qiujingya
说明/提示
数据保证,1
#include<bits/stdc++.h> using namespace std; int i,j,k,n,m; struct sb{//结构体定义 string name;//名字; int y,m,d,bian;//年,月,日,编号。 }a[1001]; int cmp(sb x,sb y){//开始结构体排序 return x.y<y.y||x.y==y.y&&x.m<y.m||x.y==y.y&&x.m==y.m&&x.d<y.d||x.y==y.y&&x.m==y.m&&x.d==y.d&&x.bian>y.bian; //先按年排,再按月,日,编号。 } int main() { cin>>n;//输入人数 for(i=1;i<=n;i++){ cin>>a[i].name>>a[i].y>>a[i].m>>a[i].d;//输入 a[i].bian=i;//记下输入顺序 } sort(a+1,a+1+n,cmp);//开始快排 for(i=1;i<=n;i++)//输出 cout<<a[i].name<<endl; return 0;//完美结束 }
【P1223】 排队接水
题目描述
有 nn 个人在一个水龙头前排队接水,假如每个人接水的时间为 T_iTi,请编程找出这 nn 个人排队的一种顺序,使得 nn 个人的平均等待时间最小。
输入格式
第一行为一个整数 nn。
第二行 nn 个整数,第 ii 个整数 T_iTi 表示第 ii 个人的等待时间 T_iTi。
输出格式
输出文件有两行,第一行为一种平均时间最短的排队顺序;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
输入输出样例
输入
10
56 12 1 99 1000 234 33 55 99 812
输出
3 2 7 8 1 4 9 6 10 5
291.90
说明/提示
n \leq 1000,t_i \leq 10^6n≤1000,ti≤106,不保证 t_iti 不重复。
当 t_iti 重复时,按照输入顺序即可(sort 是可以的)
#include<bits/stdc++.h> using namespace std; struct people{ int time; int num; }peo[1005]; bool cmp(people p1,people p2){ return p1.time<p2.time; } int main(){ int n; double sum=0,average; cin >> n; for(int i=1;i<=n;i++){ cin >> peo[i].time; peo[i].num=i; } sort(peo+1,peo+n+1,cmp); for(int i=1;i<=n;i++){ cout << peo[i].num << " "; sum+=(n-i)*peo[i].time; } cout << endl; average=sum/n; printf("%.2f",average); return 0; }