目录
P1824 进击的奶牛
题目描述
Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000,000)。
他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?
输入格式
第1行:两个用空格隔开的数字N和C。
第2~N+1行:每行一个整数,表示每个隔间的坐标。
输出格式
输出只有一行,即相邻两头牛最大的最近距离。
输入输出样例
代码实现
#include <bits/stdc++.h>
using namespace std;
int n, c;
int a[200004];
int main() {
cin >> n >> c;
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + 1 + n);
int lef = 1, rig = a[n], mid, ans = -1;
while (lef <= rig) {
mid = (lef + rig) / 2;
int lst = a[1], res = c - 1;
for (int i = 2; i <= n; i++) {
if (a[i] - lst >= mid) {
res--;
lst = a[i];
}
}
if (res <= 0) {
ans = mid;
lef = mid + 1;
} else {
rig = mid - 1;
}
}
cout << ans << endl;
}
P5721 【深基4.例6】数字直角三角形
题目描述
给出n(1\le n\le13)n(1≤n≤13),请输出一个直角边长度是 nn 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
输入格式
无
输出格式
无
输入输出样例
代码实现
# include<stdio.h>
int main()
{
int n,k=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=n;j>=i;j--)
{
printf("%02d",k);
k++;
}
printf("\n");
}
return 0;
}
P1914 小书童——凯撒密码
题目背景
某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。
题目描述
蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 nn位形成的。z
的下一个字母是 a
,如此循环。他现在找到了移动前的原文字符串及 nn,请你求出密码。
输入格式
第一行:n。第二行:未移动前的一串字母
输出格式
一行,是此蒟蒻的密码
输入输出样例
说明/提示
字符串长度<=50
代码实现
#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <cstring>
using namespace std;
char s[1000];
int main() {
int n;
cin >> n;
n % 26;
cin >> s;
int len = strlen(s);
for (int i = 0; i < len; i++) {
s[i] += n;
if (s[i] > 'z' || s[i] < 'a') {
s[i] -= 26;
}
}
cout << s << endl;
return 0;
}
P1097 [NOIP2007 提高组] 统计数字
题目背景
#警告:数据可能存在加强
题目描述
某次科研调查时得到了nn个自然数,每个数均不超过1500000000(1.5 \times 10^9)1500000000(1.5×109)。已知不相同的数不超过1000010000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入格式
共n+1n+1行。
第一行是整数nn,表示自然数的个数;
第22至n+1n+1每行一个自然数。
输出格式
共mm行(mm为nn个自然数中不相同数的个数),按照自然数从小到大的顺序输出。
每行输出22个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
输入输出样例
说明/提示
40\%40%的数据满足:1 \le n \le 10001≤n≤1000
80\%80%的数据满足:1 \le n \le 500001≤n≤50000
100\%100%的数据满足:1 \le n \le 2000001≤n≤200000,每个数均不超过1500 000 000(1.5 \times 109)1500000000(1.5×109)
NOIP 2007 提高第一题
代码实现
#include<stdio.h>
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
map<int,int> m;
int main(){
int n;
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
m[a]++;
}
for(map<int,int>::iterator it=m.begin();it!=m.end();it++){
pair<int,int> p=*it;
printf("%d %d\n",p.first,p.second);
}
}
P6367 [COCI2006-2007#6] PRASE
题目描述
孩子们正在餐桌旁吃午餐,共有 nn 份食物,孩子们会按照从 11 至 nn的顺序依次取走这 nn 份食物。
当某个孩子取走了一份食物时,如果这个他之前已经取走的食物份数(不包括当前这一份)比其他人取走的食物份数之和还要多,那么他的妈妈就会提醒他注意自己不礼貌的行为。注意,虽然被妈妈提醒了,但是他仍然会取走这份食物。换句话说,妈妈的提醒对孩子的行为没有任何影响。
给定 nn 份食物分别被哪个孩子取走了,请求出妈妈们一共提醒了多少次。
输入格式
第一行是一个整数,代表食物的份数 nn。
第 22 到第 (n + 1)(n+1) 行,每行一个字符串,第 (i + 1)(i+1) 行的字符串 s_isi表示取走第 ii 份食物的孩子的名字。
输出格式
输出一行一个整数表示答案。
输入输出样例
说明/提示
样例 1 解释
当取到第 33 份食物时,stanko 已取走的食物(不包括当前这份)的份数是一份,而其他人也总共取走了一份,所以 stanko 的妈妈不会提醒他注意礼貌。
当取到第 44 份食物时,stanko 已经取走两份食物,其他人总共取走了一份食物,因此妈妈会提醒他。
数据规模与约定
对于全部的测试点,保证:
- 1 \leq n \leq 1001≤n≤100
- 1 \leq |s_i| \leq 201≤∣si∣≤20,s_isi 中只含小写英文字母。|s_i|∣si∣ 表示字符串 s_isi 的长度。
说明
题目译自 COCI2006-2007 CONTEST #6 T1 PRASE。
代码实现
#include <bits/stdc++.h>
using namespace std;
int n;
map<string, int> mp;
string st[200];
int main() {
cin >> n;
int ans = 0;
for (int i = 1; i <= n; i++) {
string name;
cin >> name;
int my = mp[name];
int other = (i - 1) - my;
if (my > other)
ans++;
mp[name]++;
}
cout << ans << endl;
}
P2580 于是他错误的点名开始了
题目背景
XS中学化学竞赛组教练是一个酷爱炉石的人。
他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON900)。
题目描述
这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)
输入格式
第一行一个整数 nn,表示班上人数。
接下来 nn 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 5050)。
第 n+2n+2 行一个整数 mm,表示教练报的名字个数。
接下来 mm 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 5050)。
输出格式
对于每个教练报的名字,输出一行。
如果该名字正确且是第一次出现,输出 OK
,如果该名字错误,输出 WRONG
,如果该名字正确但不是第一次出现,输出 REPEAT
。
输入输出样例
说明/提示
代码实现
#include <bits/stdc++.h>
using namespace std;
int n;
map<string, int> _list;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
string st;
cin >> st;
_list[st] = 1;
}
int m;
cin >> m;
for (int i = 1; i <= m; i++ ) {
string name;
cin >> name;
if ( _list.count(name) ) {
if (_list[name] == 1) {
cout << "OK" << endl;
_list[name] = 0;
} else {
cout << "REPEAT" << endl;
}
} else {
cout << "WRONG" << endl;
}
}
}
持续更新.....
♥♥♥每天提醒自己,自己就是个菜鸡!
♥♥♥已经看到最后啦,如果对您有帮助留下的每一个点赞、收藏、关注是对菜鸡创作的最大鼓励❀
♥♥♥有相关问题可以写在评论区,一起学习,一起进步。