学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。
唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常!
P1428 小鱼比可爱
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。
第一行输入一个正整数 nn,表示鱼的数目。
第二行内输入 nn 个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 a_iai。
一行,输出 nn 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
输入 #1复制
6 4 3 0 5 1 2
输出 #1复制
0 0 0 3 1 2
对于 100\%100% 的数据,1 \leq n\leq 1001≤n≤100,0 \leq a_i \leq 100≤ai≤10。
#include
using namespace std;
int main()
{
int n, i, j;
cin >> n;
int a[n];
for (i = 0; i < n; i++)
{
cin >> a[i];
}
for (i = 0; i < n; i++)
{
int count = 0;
for (j = 0; j < i; j++)
{
if (a[j] < a[i])
{
count++;
}
}
cout << count << " ";
}
}
P1427 小鱼的数字游戏
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_iai(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
一行内输入一串整数,以 00 结束,以空格间隔。
一行内倒着输出这一串整数,以空格间隔。
输入 #1复制
3 65 23 5 34 1 30 0
输出 #1复制
30 1 34 5 23 65 3
数据规模与约定
对于 100\%100% 的数据,保证 0 \leq a_i \leq 2^{31} - 10≤ai≤231−1,数字个数不超过 100100。
#include
using namespace std;
int main(){
int i,n[100],j=1;
for(i=0;i<100;i++){
cin >> n[i];
if(n[i]==0){
break;
}
j=i;
}
for(i=j;i>=0;i--){
cout << n[i] << " ";
}
}
P1047 [NOIP2005 普及组] 校门外的树
某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,\dots,l0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
第一行有两个整数,分别表示马路的长度 ll 和区域的数目 mm。
接下来 mm 行,每行两个整数 u, vu,v,表示一个区域的起始点和终止点的坐标。
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
输入 #1复制
500 3 150 300 100 200 470 471
输出 #1复制
298
【数据范围】
【题目来源】
NOIP 2005 普及组第二题
#include
using namespace std;
int main()
{
int l, m, count = 0, x, y, i;
cin >> l >> m;
int a[10010]={0};
while (m--)
{
cin >> x >> y;
for (i = x; i <= y; i++)
{
if (a[i] == 0)
{
a[i] = 1;
}
}
}
for (i = 0; i <= l; i++)
{
if (a[i] == 0)
{
count++;
}
}
cout << count;
}
P5733 【深基6.例1】自动修正
大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。
输入一行,一个字符串。
输出一个字符串,即将原字符串中的所有小写字母转化为大写字母。
输入 #1复制
Luogu4!
输出 #1复制
LUOGU4!
#include
using namespace std;
int main(){
string a;
int i;
cin >> a;
for(i=0;i='a'&&a[i]<='z'){
a[i]-=32;
}
}
cout << a;
}
P1765 手机
一般的手机的键盘是这样的:
要按出英文字母就必须要按数字键多下。例如要按出 x
就得按 9 两下,第一下会出 w
,而第二下会把 w
变成 x
。0 键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
一行句子,只包含英文小写字母和空格,且不超过 200 个字符。
一行一个整数,表示按键盘的总次数。
输入 #1复制
i have a dream
输出 #1复制
23
NOI 导刊 2010 普及(10)
#include
using namespace std;
int main(){
int a[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int count=0,i;
string s;
getline(cin,s);
for(i=0;i
1.将每个字母需要点击几次存入数组
2.计算空格+字母
P1125 [NOIP2008 提高组] 笨小猴
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设 \text{maxn}maxn 是单词中出现次数最多的字母的出现次数,\text{minn}minn 是单词中出现次数最少的字母的出现次数,如果 \text{maxn}-\text{minn}maxn−minn 是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。
一个单词,其中只可能出现小写字母,并且长度小于 100100。
共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word
,否则输出 No Answer
;
第二行是一个整数,如果输入单词是 Lucky Word
,输出 \text{maxn}-\text{minn}maxn−minn 的值,否则输出 00。
输入 #1复制
error
输出 #1复制
Lucky Word 2
输入 #2复制
olympic
输出 #2复制
No Answer 0
【输入输出样例 1 解释】
单词 error
中出现最多的字母 \texttt rr 出现了 33 次,出现次数最少的字母出现了 11 次,3-1=23−1=2,22 是质数。
【输入输出样例 2 解释】
单词 olympic
中出现最多的字母 \texttt ii 出现了 11 次,出现次数最少的字母出现了 11 次,1-1=01−1=0,00 不是质数。
(本处原题面错误已经修正)
noip2008 提高第一题
#include
using namespace std;
int main()
{
int cnt[128]={0},count=0,max=127,min=127,www=0,flag,k;//初始化一个数组cnt[128]={0} max,min
char str[100];//输入字母
int i;
cin.getline(str,100);
for(i = 0; str[i]!='\0'; ++i)
cnt[str[i]]++;//统计单个字母总数
sort(cnt,cnt+128);//排序 排序成1234 此时最后一位为maxn 第一位为minn
for(i=128;i>=0;i--){
if(cnt[i]!=0)
if(min>cnt[i]){
min=i;
}
}//找出第一位置
www=cnt[max]-cnt[min];//求出maxn-minn
k=(int)sqrt((double)www);//开平方减少循环次数
for(i=2;i<=k;i++){
if(www%i==0){
break;
}
}//判断质数
if(i>k&&www>=2){
cout << "Lucky Word" << endl;
cout << www;
}
else{
cout << "No Answer" << endl;
cout << "0";
}
return 0;
}
P1075 [NOIP2012 普及组] 质因数分解
已知正整数 nn 是两个不同的质数的乘积,试求出两者中较大的那个质数。
输入一个正整数 nn。
输出一个正整数 pp,即较大的那个质数。
输入 #1复制
21
输出 #1复制
7
1 \le n\le 2\times 10^91≤n≤2×109
NOIP 2012 普及组 第一题
#include
using namespace std;
int main(){
int n,i,j;
cin >> n;
for(i=2;i<=n;i++){
if(n%i==0){//一个质数i
j=n/i;//另一个质数j
break;
}
}//判断质数 既然n是质数之积 则n=i*j
if(i>j){
cout << i;
}
else{
cout << j;
}//大小
}
P5743 【深基7.习8】猴子吃桃
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 nn 天早上起来一看,只剩下 11 个桃子了。请问小猴买了几个桃子?
输入一个正整数 nn,表示天数。
输出小猴买了多少个桃子。
输入 #1复制
4
输出 #1复制
22
数据保证,1\le n\le201≤n≤20。
#include
using namespace std;
int main(){
int n,k=1;
cin >> n;
while(n>1){
k=(k+1)*2;
n--;
}
cout << k;
}
1.最后剩一个 每次吃一半+1 逆推 即可
P5744 【深基7.习9】培训
某培训机构的学员有如下信息:
经过为期一年的培训,所有同学的成绩都有所提高,提升了 20\%20%(当然 NOIP 满分是 600600 分,不能超过这个得分)。
输入学员信息,请设计一个结构体储存这些学生信息,并设计一个函数模拟培训过程,其参数是这样的结构体类型,返回同样的结构体类型,并输出学员信息。
第一行输入一个正整数 nn,表示学员个数。
第二行开始往下 nn 行。每行首先是一个字符串表示学员姓名,再是一个整数表示学员年龄,再是一个整数为去年 NOIP 成绩。
输出 nn 行,每行首先输出一个字符串表示学生姓名,再往后两个整数,表示经过一年的培训后学员的年龄和他们今年的 NOIP 成绩。以空格隔开。
输入 #1复制
3 kkksc03 24 0 chen_zhe 14 400 nzhtl1477 18 590
输出 #1复制
kkksc03 25 0 chen_zhe 15 480 nzhtl1477 19 600
数据保证,1 \leq n \leq 51≤n≤5。年龄为 0 \sim 1000∼100(含 00 与 100100)的整数。成绩为 0 \sim 6000∼600(含 00 与 600600)的 55 的整倍数。
#include
using namespace std;
int main(){
struct{
string name;
int age;
int ni;
}stu1;
int n,i=1;
cin >> n;
while(i<=n){
int ages=0,nis=0;
cin >> stu1.name >> stu1.age >> stu1.ni;
ages=stu1.age+1;
nis=stu1.ni*0.2+stu1.ni;
if(nis>=600){
nis=600;
}
cout << stu1.name << " " << ages << " " << nis << endl;
i++;
}
}
P5735 【深基7.例1】距离函数
给出平面坐标上不在一条直线上三个点坐标 (x_1,y_1),(x_2,y_2),(x_3,y_3)(x1,y1),(x2,y2),(x3,y3),坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。
对于平面上的两个点 (x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2),则这两个点之间的距离 dis=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}dis=(x2−x1)2+(y2−y1)2
输入三行,第 ii 行表示坐标 (x_i,y_i)(xi,yi),以一个空格隔开。
输出一个两位小数,表示由这三个坐标围成的三角形的周长。
输入 #1复制
0 0 0 3 4 0
输出 #1复制
12.00
数据保证,坐标均为实数且绝对值不超过 100100,小数点后最多仅有 33 位。
#include
using namespace std;
int main(){
double a[10];
int i;
double Perimeter=0.0,dis1=0.0,dis2=0.0,dis3=0.0;
for(i=1;i<=6;i++){
cin >> a[i];
}
dis1=sqrt((a[3]-a[1])*(a[3]-a[1])+(a[4]-a[2])*(a[4]-a[2]));
dis2=sqrt((a[5]-a[3])*(a[5]-a[3])+(a[6]-a[4])*(a[6]-a[4]));
dis3=sqrt((a[5]-a[1])*(a[5]-a[1])+(a[6]-a[2])*(a[6]-a[2]));
Perimeter=dis1+dis2+dis3;
printf("%.2lf",Perimeter);
}