这个题目我先写了些简单的 之后继续填坑;
比赛链接
题目链接
题目描述
小智是一名刚满十岁的男孩,住在真新镇中,他目标是成为一名优秀的宝可梦训练师,他明天就要从大木博士那里获得自己的第一只宝可梦了。博士在电视里建议初学者从妙蛙种子,小火龙和杰尼龟这三种宝可梦里选一只开始训练。小智非常期待明天的到来,他在床上念着三种宝可梦的特性,渐渐进入了梦境…
在梦中,小智已经踏上了宝可梦训练师修行之旅,大木博士对他说:"你修行的内容如下:
第一天我将给你一只宝可梦。
从第二天起,你每天必须抓到的宝可梦数量都是在你前一天抓到的宝可梦数量上增加一只。(第一天博士给小智的宝可梦也当作是抓到的)
当某一天你抓到的宝可梦数量达到
NN
N 时,从下一天起,你必须抓到的宝可梦数量变成了你前一天抓到的宝可梦数量上减少一只
当最后你必须抓的宝可梦数量只剩
00
0 只的时候,你便已经完成了此次修行,成为了宝可梦训练师!
小智醒来后,想起昨天晚上的梦觉得非常开心,但是他想知道成为宝可梦训练师的时候他总共抓到多少只宝可梦(包含博士給的),掐着手指算了好久也算不清楚,抬头看到闹钟,啊…已经睡过头了,说不定连一只宝可梦都拿不到!他顾不上换衣服,直奔大木博士的那里去了……
假设小智能顺利的完成修行,也就是每天抓到的宝可梦数量都符合修行内容,现在给你修行内容中的
NN
N,请你算出他最后总共拥有的宝可梦数量。
输入描述
输入一个整数
N(2≤N≤109)N(2\le N \le10^9)
N(2≤N≤10
9
)。
输出描述
输出小智最后总共拥有的宝可梦数量。
样例输入 1
2
样例输出 1
4
简单 规律
1 2 3 … n-1 n n-1 n-2 …3 2 1 0
结果就是他们之和;
解题
可以推出就是 n*n
#include<stdio.h>
#include<iostream>
#include<math.h>
#define ll long long
using namespace std;
int main()
{
ll t;
scanf("%lld",&t);
ll sum=t*t;
printf("%lld\n",sum);
return 0;
}
第003话 收服宝可梦吧!
题目描述
继上一话皮卡丘把那几个坏人炸飞之后,小智确认皮卡丘已经完全恢复了。于是带着皮卡丘继续上路,前往尼比市去,小霞为了她的脚踏车的事情也一直跟着小智。
在通往尼比市的路上,要经过一个漆黑的常磐森林,小智信心满满,他相信这个森林一定能抓到很多宝可梦,正走着,小霞突然害怕地双手扑到小智的背上,小智侧头一看,咦,这不是可爱的虫系宝可梦——绿毛虫吗? 小智向前走一步,撇开衣角摸出挂在皮带上的精灵球,决定将这条绿毛虫收服了。说时迟那时快,小智将精灵球精准地砸中绿毛虫的头部,绿毛虫瞬间被收进了精灵球里面。
虽然小霞非常讨厌虫,但是小智作为一个不挑食、啥都喜欢的好孩子,对绿毛虫可算是非常喜欢,而且这也是他收服的第一个宝可梦,是迈向成功的一大步!对绿毛虫喜欢的不仅仅是小智,皮卡丘也开心的喊着"皮卡皮卡!",终于有同类一起生活了!
到了夜晚,小智和小霞都各自钻进自己的睡袋里睡觉了,皮卡丘和绿毛虫却在一块大石头上享受月光浴,他们开心地交流着…
实际上,不同宝可梦之间的对话是有规则的。假设绿毛虫说出的话是字符串 s ,皮卡丘需要先说一个字符串 t , t 是 s 删掉两个字符之后得到的字符串,他才能获得绿毛虫要传达的信息,绿毛虫面对皮卡丘说的话也是一样的规则。
那么,给出两个字符串 s 和 t ,你能判断 t是不是 s 删掉两个字符的字符串吗?
输入描述
输入有多组数据,第一行输入一个正整数T(1≤T≤2×10^5),表示测试组数。然后对于每组数据,第一行有一个字符串 s ,第二行有一个字符串 t。
数据中所有字符串都是由英文小写字母 ′a′至 ′z’组成的,长度都不是 0,且所有字符串的总长度和不超过 10^6。
输出描述
对于每组数据各输出一行,如果是,输出数字
1,如果不是,输出数字 0。
样例输入
3
abcde
ace
abcde
aed
abcde
abcd
样例输出
1
0
0
提示
对于样例中第一个数据对于样例中第一个数据,可以把字符串 “abcde” 删掉第 2 个和第 4 个字符来得到字符串 “ace”,故要輸出 1。
对于样例中第二和第三个数据,删掉 2 个字符后可能得到的结果有"abc"、“abd”、“abe”、“acd”、“ace”、“ade”、“bcd”、“bce”、“bde”、“cde” 这 10 种,并无法产生 “aed” 或 “abcd”,所以都要輸出 0。
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
#define ll long long
using namespace std;
const int MM=1e6+5;
char s[MM];
char p[MM];
int sum;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
//memset(s,0,sizeof(s));//这个其实没必要用 用了会超时,我做错了 就是因为这个;
//memset(p,0,sizeof(p));
scanf("%s",s);
getchar();
scanf("%s",p);
int len1=strlen(s);
int len2=strlen(p);
int l=0;
sum=0;
if(len1-len2!=2)
{
printf("0\n");
}
else{
for(int i=0;i<len1;i++)
{
if(s[i]==p[l])
{
l++;
}
}
if(len1-l==2)
cout<<"1"<<endl;
else
cout<<"0"<<endl;
}
}
return 0;
}
第004话 武士少年的挑战!
题目描述
收服绿毛虫后,小智一行继续在常磐森林里往尼比市的方向前进,小霞一路上都在大惊小怪。这时,小智发现了独角虫,他打算靠皮卡丘来收服独角虫,可是皮卡丘却懒得搭理。小霞非常讨厌虫子,远远的逃开,却碰见一个身着武士铠甲的少年。这位武士少年似乎在寻找真新镇的训练师,他的目的是什么呢?与此同时,小智还在设法收服独角虫,丝毫不知道自己被人盯上了……
武士少年将他的剑指向小智,扬言说要跟小智用宝可梦进行决斗,此时独角虫偷偷溜走了,小智很生气,决定接受武士少年的挑战。
两轮比赛下来……仍未分出胜负,而此时双方派上场的宝可梦都是铁甲蛹 (铁甲蛹是由绿毛虫进化而来的),不会跑,只会变硬,于是一直在僵持着。旁边的小霞已经无聊至极,她拿出一副扑克牌,“喂,那边那两个,来陪我打牌!” 小智和武士少年也觉得有点无聊了,于是走到小霞身边坐了下来。
小霞清了清嗓子,说:" 我们来玩一个扑克牌游戏,一副牌有
54 张,1∼13 每种数字 4 张,鬼牌是数字 0,有两张,我们三个人玩,所以每人初始拿到的牌 18 张,如果拿到的牌里有相同的数字,就要丢掉两张,但是鬼牌不能丢,最后谁剩的牌最少谁就赢。"
小智举起了手:“请问,如果拿到的相同牌大于两张可以全部扔掉吗?”
小霞:“相同的牌数只有 2 张,3 张,4 张三种可能,2 张和 4 张的时候可以全部扔掉,3 张的时候只能扔掉2 张”。
武士少年也举起了手 : “请问,如果拿到两张鬼牌可以扔掉吗?”
小霞 : “不行,鬼牌是特殊的,多少张都不能扔掉!”
大家貌似都弄懂了规则,于是小霞开始发牌….
聪明的你理解规则了吗?现在假设你是三个人打牌中的一个,给你初始的牌,请算出你最后剩下几张牌。
输入描述
输入一行 18 个数字,0 代表鬼牌,1∼13 是正常的扑克牌的数字。 0 最多只会出现两个,1∼131 中每个数字至多只会出现四个。
输出描述
输出一行表示最后剩几张牌。
样例输入 1
1 1 4 5 1 4 5 6 8 9 0 0 12 13 13 13 11 10
样例输出 1
10
提示
样例可以丢出的牌有两张 1 两张 4、两张 5、两张 13,共丢出了 8 张,所以共剩下 18−8=10 张牌。 鬼牌(数字 0) 虽然有 2 张,但不能丢弃。
题意简单:
思路讲一下吧:
就是记录出现的牌数,然后按题意丢弃牌。
#include<stdio.h>
#include<iostream>
#include<math.h>
#define ll long long
using namespace std;
const int MM=1e6+5;
ll a[MM];
ll vis[MM];
int sum;
int main()
{
for(int i=0; i<18; i++)
{
scanf("%d",&a[i]);
vis[a[i]]++;
}
sum=18;
for(int i=1;i<14;i++)
{
if(vis[i]==2)
{
sum-=2;
}
else if(vis[i]==4)
{
sum-=4;
}
else if(vis[i]==3)
{
sum-=2;
}
}
cout<<sum;
return 0;
}