好久没写洛谷了,不优雅的代码又来啦~


[NOIP2004 普及组] 火星人

题目描述

人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。

火星人用一种非常简单的方式来表示数字――掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为 1,2,3,⋯1,2,3,\cdots1,2,3,⋯。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。

一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指――拇指、食指、中指、无名指和小指分别编号为 1,2,3,41,2,3,41,2,3,4 和 555,当它们按正常顺序排列时,形成了 555 位数 123451234512345,当你交换无名指和小指的位置时,会形成 555 位数 123541235412354,当你把五个手指的顺序完全颠倒时,会形成 543215432154321,在所有能够形成的 120120120 个 555 位数中,123451234512345 最小,它表示 111;123541235412354 第二小,它表示 222;543215432154321 最大,它表示 120120120。下表展示了只有 333 根手指时能够形成的 666 个 333 位数和它们代表的数字:

三进制数 代表的数字
123123123 111
132132132 222
213213213 333
231231231 444
312312312 555
321321321 666

现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围。

输入格式

共三行。
第一行一个正整数 NNN,表示火星人手指的数目(1≤N≤100001 \le N \le 100001≤N≤10000)。
第二行是一个正整数 MMM,表示要加上去的小整数(1≤M≤1001 \le M \le 1001≤M≤100)。
下一行是 111 到 NNN 这 NNN 个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。

输出格式

NNN 个整数,表示改变后的火星人手指的排列顺序。每两个相邻的数中间用一个空格分开,不能有多余的空格。

样例 #1

样例输入 #1

5
3
1 2 3 4 5

样例输出 #1

1 2 4 5 3

提示

对于 30%30\%30% 的数据,N≤15N \le 15N≤15。

对于 60%60\%60% 的数据,N≤50N \le 50N≤50。

对于 100%100\%100% 的数据,N≤10000N \le 10000N≤10000。

noip2004 普及组第 4 题

#include<string>
#include<iostream>
#include<vector>
#include<windows.h>
using namespace std;int a[10005];
bool used[10005] = { 0 };
int m, n;
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];int x = a[i];for (int j = 1; j <= a[i]; j++)x -= used[j];used[a[i]] = 1;a[i] = x - 1;}a[n] += m;for (int i = n; i > 0; i--){a[i - 1] += a[i] / (n - i + 1);a[i] %= n - i + 1;}memset(used, 0, sizeof(used));for (int i = 1; i <= n; i++){for (int j = 0; j <= a[i]; j++)if (used[j])a[i]++;cout << a[i] + 1 << " ";used[a[i]] = 1;}return 0;
}

[NOIP2007 普及组] 奖学金

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 555 名学生发奖学金。期末,每个学生都有 333 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 333 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前 555 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

777 279279279
555 279279279

这两行数据的含义是:总分最高的两个同学的学号依次是 777 号、555 号。这两名同学的总分都是 279279279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 777 的学生语文成绩更高一些。如果你的前两名的输出数据是:

555 279279279
777 279279279

则按输出错误处理,不能得分。

输入格式

共 n+1n+1n+1行。

第 111 行为一个正整数n(≤300)n ( \le 300)n(≤300),表示该校参加评选的学生人数。

第 222 到 n+1n+1n+1 行,每行有 333 个用空格隔开的数字,每个数字都在 000 到 100100100 之间。第 jjj 行的 333 个数字依次表示学号为 j−1j-1j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1∼n1\sim n1∼n(恰好是输入数据的行号减 111)。

所给的数据都是正确的,不必检验。

//感谢 黄小U饮品 修正输入格式

输出格式

共 555 行,每行是两个用空格隔开的正整数,依次表示前 555 名学生的学号和总分。

样例 #1

样例输入 #1

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出 #1

6 265
4 264
3 258
2 244
1 237

样例 #2

样例输入 #2

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出 #2

8 265
2 264
6 264
1 258
5 258
#include<iostream>
#include<algorithm>
using namespace std;
struct stu
{int num;//编号int c, m, e;int sum;
}student[310];
bool cmp(stu a, stu b)
{if (a.sum > b.sum) return 1;else if (a.sum < b.sum) return 0;else{if (a.c > b.c) return 1;else if (a.c < b.c) return 0;else{if (a.num > b.num) return 0;else return 1;}}
}
int main()
{int n;cin >> n;for (int i = 1; i <= n; i++){student[i].num = i;//录入编号cin >> student[i].c >> student[i].m >> student[i].e;//输入student[i].sum = student[i].c + student[i].m + student[i].e;//计算总分}sort(student + 1, student + 1 + n, cmp);for (int i = 1; i <= 5; i++)cout << student[i].num << ' ' << student[i].sum << endl;return 0;
}

[NOIP2007 普及组] 纪念品分组

题目描述

元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。

你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

输入格式

共 n+2n+2n+2 行:

第一行包括一个整数 www,为每组纪念品价格之和的上限。

第二行为一个整数 nnn,表示购来的纪念品的总件数 GGG。

第 3∼n+23\sim n+23∼n+2 行每行包含一个正整数 PiP_iPi​ 表示所对应纪念品的价格。

输出格式

一个整数,即最少的分组数目。

样例 #1

样例输入 #1

100
9
90
20
20
30
50
60
70
80
90

样例输出 #1

6

提示

50%50\%50% 的数据满足:1≤n≤151\le n\le151≤n≤15。

100%100\%100% 的数据满足:1≤n≤3×1041\le n\le3\times10^41≤n≤3×104,80≤w≤20080\le w\le20080≤w≤200,5≤Pi≤w5 \le P_i \le w5≤Pi​≤w。

#include<bits/stdc++.h>
using namespace std;
int W,ans=0;
int n,a[30001];
int l,r,i;
int main()
{scanf("%d%d",&W,&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);l=1;  r=n;while(l<=r){if(a[l]+a[r]<=W)   l++,r--,ans++;elser--,ans++;  }printf("%d",ans);return 0;
}

[NOIP2007 提高组] 统计数字

题目背景

#警告:数据可能存在加强

题目描述

某次科研调查时得到了nnn个自然数,每个数均不超过1500000000(1.5×109)1500000000(1.5 \times 10^9)1500000000(1.5×109)。已知不相同的数不超过100001000010000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入格式

共n+1n+1n+1行。

第一行是整数nnn,表示自然数的个数;

第222至n+1n+1n+1每行一个自然数。

输出格式

共mmm行(mmm为nnn个自然数中不相同数的个数),按照自然数从小到大的顺序输出。

每行输出222个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

样例 #1

样例输入 #1

8
2
4
2
4
5
100
2
100

样例输出 #1

2 3
4 2
5 1
100 2

提示

40%40\%40%的数据满足:1≤n≤10001 \le n \le 10001≤n≤1000

80%80\%80%的数据满足:1≤n≤500001 \le n \le 500001≤n≤50000

100%100\%100%的数据满足:1≤n≤2000001 \le n \le 2000001≤n≤200000,每个数均不超过1500000000(1.5×109)1500 000 000(1.5 \times 10^9)1500000000(1.5×109)

NOIP 2007 提高第一题

#include<stdio.h>
void quicksort(int x[],int left,int right);
int a[200005];//注意100%的数据<=200000,第一次就因为这个运行错误
int main()
{int n,i,front,cnt;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);quicksort(a,0,n-1);front=a[0];cnt=1;for(i=1;i<n;i++)  //i从1开始 {if(a[i]!=front){printf("%d %d\n",front,cnt);cnt=0;  //注意cnt更新为0,而不是1 }front=a[i];//更新front cnt++;   //更新计数器 }printf("%d %d\n",front,cnt);  //不要漏了最后一个数 return 0;
}
void quicksort(int x[],int left,int right)  //快速排序
{if(left<right){int i=left,j=right,key=x[left];while(i<j){while(i<j&&x[j]>key)j--;if(i<j)x[i++]=x[j];while(i<j&&x[i]<key)i++;if(i<j)x[j--]=x[i];}x[i]=key;quicksort(x,left,i-1);quicksort(x,i+1,right);}
}

[NOIP2007 提高组] 字符串的展开

题目描述

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于 d-h 或者 4-8 的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为 defgh45678。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号 - ,减号两侧同为小写字母或同为数字,且按照 ASCII 码的顺序,减号右边的字符严格大于左边的字符。

(2) 参数 p1p_1p1​:展开方式。p1=1p_1=1p1​=1 时,对于字母子串,填充小写字母;p1=2p_1=2p1​=2 时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3p_1=3p1​=3 时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号 * 来填充。

(3) 参数 p2p_2p2​:填充字符的重复个数。p2=kp_2=kp2​=k 表示同一个字符要连续填充 kkk 个。例如,当 p2=3p_2=3p2​=3 时,子串d-h 应扩展为 deeefffgggh。减号两边的字符不变。

(4) 参数 p3p_3p3​:是否改为逆序:p3=1p_3=1p3​=1 表示维持原来顺序,p3=2p_3=2p3​=2 表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当 p1=1p_1=1p1​=1、p2=2p_2=2p2​=2、p3=2p_3=2p3​=2 时,子串 d-h 应扩展为 dggffeeh

(5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:d-e 应输出为 de3-4 应输出为 34。如果减号右边的字符按照 ASCII 码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:d-d 应输出为 d-d3-1 应输出为 3-1

输入格式

共两行。

第 111 行为用空格隔开的 333 个正整数,依次表示参数 p1,p2,p3p_1,p_2,p_3p1​,p2​,p3​。

第 222 行为一行字符串,仅由数字、小写字母和减号 - 组成。行首和行末均无空格。

输出格式

共一行,为展开后的字符串。

样例 #1

样例输入 #1

1 2 1
abcs-w1234-9s-4zz

样例输出 #1

abcsttuuvvw1234556677889s-4zz

样例 #2

样例输入 #2

2 3 2
a-d-d

样例输出 #2

aCCCBBBd-d

提示

40%40\%40% 的数据满足:字符串长度不超过 555。

100%100\%100% 的数据满足:1≤p1≤3,1≤p2≤8,1≤p3≤21 \le p_1 \le 3,1 \le p_2 \le 8,1 \le p_3 \le 21≤p1​≤3,1≤p2​≤8,1≤p3​≤2。字符串长度不超过 100100100。

NOIP 2007 提高第二题

#include<bits/stdc++.h>
using namespace std;
int p1,p2,p3,i=0,k;
char ch[300],be,af,f,j,p;//p用于输出;
int main() {scanf("%d%d%d%s",&p1,&p2,&p3,ch);//输入;while(ch[i]){//当ch[i]有值时;be=ch[i-1];af=ch[i+1];f=ch[i];//f存储ch[i],便于判断; if(f=='-'&&af>be&&(be>='0'&&af<='9'||be>='a'&&af<='z')){//意思是ch[i]若为'-',就判断其前后是否满足条件,满足进入循环; for(p3==1?j=be+1:j=af-1; p3==1?j<af:j>be; p3==1?j++:j--){p=j;//j是整形变量,p是字符型变量,这样是将p赋值为ASCII码为j的字符; if(p1==2)//是否大写; p=(p>='a')?p-32:p;//如果是字母就转成大写 else if(p1==3) p='*';//是否输出'*' for(k=0; k<p2; k++)//输出p2个 printf("%c",p);}} elseprintf("%c",f);//如果ch[i]是非'-'或者其前后不满足条件,就原样输出;i++;//一定要放在后面,不然会出错QAQ;}return 0;
}

洛谷刷题:火星人、奖学金、纪念品分组、统计数字、字符串的展开相关推荐

  1. 洛谷刷题部分代码(C语言)

    洛谷刷题部分代码存档 我刚刚发现做过的题再找源代码有一点麻烦,遂决定以博客的形式保存.以方便引用.更新. P1055 [NOIP2008 普及组] ISBN 号码 #include<stdio. ...

  2. 洛谷刷题C语言:数字反转、再分肥皂水、三角形面积、Apples Prologue/苹果和虫子、数的性质

    记录洛谷刷题QAQ,一些不大优雅的代码 一.[深基2.例7]数字反转 题目描述 输入一个不小于 100100100 且小于 100010001000,同时包括小数点后一位的一个浮点数,例如 123.4 ...

  3. 洛谷刷题C语言:Even? Odd? G、The Robot Plow G、pb的游戏(1)、询问学号、cover

    记录洛谷刷题QAQ 一.[USACO09OCT]Even? Odd? G 题目描述 Bessie's cruel second grade teacher has assigned a list of ...

  4. 洛谷刷题:小玉家的电费、小玉在游泳、小鱼的航程(改进版)、小鱼的游泳时间、小鱼会有危险吗

    记录洛谷刷题QAQ 一.小玉家的电费 题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了.小玉家今天收到了一份电费通知单.小玉看到上面写:据闽价电 [2006]27 号规定,月用 ...

  5. 洛谷刷题C语言:闰年判断、Apples、洛谷团队系统、肥胖问题、三位数排序

    记录洛谷刷题QAQ 一.[深基3.例3]闰年判断 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 111,否则输出 000. 输入格式 输入一个正整数 nnn,表示年份. 输出格式 输出一行 ...

  6. 洛谷刷题C语言:距离函数、闰年展示、计算阶乘、猴子吃桃、培训

    记录洛谷刷题QAQ 一.[深基7.例1]距离函数 题目描述 给出平面坐标上不在一条直线上三个点坐标 (x1,y1),(x2,y2),(x3,y3)(x_1,y_1),(x_2,y_2),(x_3,y_ ...

  7. 洛谷刷题C语言:潇湘の雨、分糖果、Addition、Ljeto、TRI

    记录洛谷刷题C语言QAQ 「PMOI-0」潇湘の雨 题目背景 (原 LZOI-1,改名已经 PMOI 成员同意) lhm-01 题目描述 言琢დ 在一个 2n×2n2n \times 2n2n×2n ...

  8. 洛谷刷题C语言:Bold、饱食、公平の意、DOM、

    记录洛谷刷题C语言qaq [COCI2020-2021#6] Bold 题目描述 Paula 给 Daniel 写了一封信,她需要加粗文本的字体,以便视力恶化的 Daniel 阅读. 信可以用 . 和 ...

  9. 洛谷刷题C语言:FILIP、修改数组、Fun、Šifra、Erinnerung

    记录洛谷刷题QAQ [COCI2009-2010#3] FILIP 题目描述 给你两个十进制正整数 a,ba, ba,b,输出将这两个数翻转后的较大数. 「翻转」在本题中的定义详见「说明 / 提示」部 ...

  10. 洛谷刷题C语言:陶瓷项链、Cow Gymnastics B、Where Am I? B、Hello, 2020!、SIR 模型

    记录洛谷刷题C语言 一.[NOI2000] 瓷片项链 题目描述 原始部落用一种稀有的泥土烧制直径相同的圆瓷片并串成项链,串的时候沿瓷片的直径方向顺次连接,瓷片之间没有空隙也不重叠,一条项链至少由一个瓷 ...

最新文章

  1. 为增进理解力而奋斗终身
  2. 如何在node.js中发出HTTP POST请求?
  3. 让iPhone帮你找钥匙钱包?这事还真的可行
  4. 教孩子学编程python语言pdf_iOS(iPhone)应用程序开发入门视频教程(35讲)
  5. 实验协作的时候需要做什么?
  6. dnn中个性化服务的使用
  7. C++描述杭电OJ 2009.求数列的和 ||
  8. VS 调用外部DLL时提示“无法嵌入互操作类型”
  9. 想做出让老板眼前一亮的可视化报告,这几个“心机”千万要有
  10. 用VC++绘制位图按钮
  11. access订单明细表怎么做_图书销售订单明细表
  12. 十大排序算法(数据结构)
  13. 香港各个大学计算机类专业
  14. SylixOS学习二—— SylixOS认识和使用_SylixOS虚拟机使用
  15. 一些好用的APP推荐给你
  16. 计算机下桌面显示不出来,电脑桌面文档不会在右边显示出来怎么办
  17. linux who 时间,linux命令之who、w、whoami
  18. 【刷题】验证回文字符串
  19. 小白打卡python day 1
  20. QMainWindow的使用

热门文章

  1. LINUX 0.11内核完全剖析学习笔记-第三章内核编程语言和环境
  2. 360极速浏览器网页保护色
  3. AI工具:通过智能实现工作和学习效率的革命化
  4. linux mount挂载设备(U盘,光盘,iso等)使用说明
  5. 48小时极限游戏开发比赛介绍以及Global Game Jam 历年主题和CiGA Game Jam 多年主题
  6. Leetcoode 682. 棒球比赛
  7. Selenium Webdriver重新使用已打开的浏览器实例(Chrome版)
  8. vue——自定义指令
  9. 男人减掉小肚子之简易法
  10. c# 实现网页加载后将页面截取为长图片