庙会
庙会
题目大意
是谁带你来看这场庙会
行为掩饰后超越了思维
舞台上的小丑和你的左小腿
别管我,别把我和他们扯在一起
——李志《鸵鸟》
来到这场庙会,现在需要男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。
输入格式
三个整数 m, n, k (1
≤
\leq
≤ m,n
≤
\leq
≤ 150,1
≤
\leq
≤ k
≤
\leq
≤ 4000),分别表示男士人数、女士人数、几轮舞曲。
输出格式
输出各轮舞曲的配对方案。
输入样例
2 4 6
输出样例
1 1
2 2
1 3
2 4
1 1
2 2
解题思路
两个指针分别指向男和女,到达临界点更新指针的值
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int m,n,k,cnt=0;
scanf("%d%d%d",&m,&n,&k);
for(int i=1,j=1;cnt<k;i++,j++)
{
printf("%d %d\n",i,j);
if(i==m) i=0;
if(j==n) j=0;
++cnt;
}
return 0;
}
热河路
热河路
题目大意
没有人在热河路谈恋爱,
总有人在天亮时伤感
如果年轻时你没来过热河路,
那你现在的生活是不是很幸福
——李志《热河》
奔跑。跌倒。奔跑。
热河路有一家开了好多年的理发店,不管剪什么样的发型,你只要付五块钱。现在我们来到了热河路。
我们可以将其抽象成一个如下的序列:
110100100010000100000……
请你找出这个无穷序列中指定位置上的数字。
输入格式
第一行一个正整数 n (1
≤
\leq
≤ n
≤
\leq
≤ 1500000),表示询问次数。
接下来的 行,每行一个正整数 a
i
_i
i (1
≤
\leq
≤a
i
_i
i
≤
\leq
≤ 10
9
{^9}
9), 表示在序列中的位置。
输出格式
输出 n 行,每行为一个 0 或 1,表示该序列第 a
i
_i
i 位上的数字。
输入样例
4
3
14
7
6
输出样例
0
0
1
0
解题思路
数学的思维,打标代数据这个规律是正确的,至于为什么,我没想明白,数学差hhh,数学啊,要我小命,呜呜呜
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int num;
scanf("%d",&num);
int n=sqrt((num-1)*2);
if(n*(n+1)==(num-1)*2||n*(n-1)==(num-1)*2) cout<<1<<'\n';
else cout<<0<<'\n';
}
return 0;
}
用STL里面的 set ,然后用 find()函数在集合中查找,如果找到就输出1,否则输出0。 find()函数的时间复杂度是O(logN),最好的情况的O(1),基于红黑树的原理。 孩子不会红黑树呜呜呜,丢了大学生的脸本蒟蒻的代码,欢迎参考学习啦~~
#include <cstdio>
#include <set>
using namespace std;
set<int>st;
int n,a;
int main()
{
for(int k=0,i=1; i<=1e9 ; )
{
st.insert(i);
++k;
i+=k;
}
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
if(st.find(a)!=st.end()) puts("1");
else puts("0");
}
return 0;
}
定西
定西
题目大意
这么多年你一个人一直在走
方向和天气的节奏会让你忧愁
你说你遇见了一大堆奇怪的人
他们看上去好像都比你开心
——李志《定西》
这首歌的吉他节奏总感觉是在致敬《加州旅馆》,前奏又像葫芦娃里面在蛇精洞是的配乐
一个人走走了很多年,发现自己走到了一个很长的,年久失修的楼梯面前。年久失修的意思就是,有 k 个台阶坏了,没法走。
楼梯一共有 n 层,你一次能上一阶、两阶或三阶台阶,请问,你从楼梯底部 ( 0 开始) 走到楼梯顶部,共有多少种走法。
输入格式
输入数据共两行,第一行包含两个自然数 n (1
≤
\leq
≤ n
≤
\leq
≤ 100) 和 k (0
≤
\leq
≤ k < n),第二行包含
k
k
k 个自然数
X
i
X_i
Xi (1
≤
\leq
≤
x
x
x
≤
\leq
≤
n
n
n),数字之间用一个空格隔开,表示损坏的台阶的序号(从楼梯底部到楼梯顶部,台阶序号依次为 1 到
n
n
n)。
输出格式
输出数据仅包含一个整数,表示所有可行走法的总数。
输入样例
5 2
2 4
输出样例
2
解题思路
初始化,
d
p
[
0
]
dp[0]
dp[0] = 1;第二个阶梯是坏的,
d
p
[
1
]
dp[1]
dp[1]=0,否则
d
p
[
1
]
dp[1]
dp[1] =
d
p
[
0
]
dp[0]
dp[0],第三个台阶是坏的,
d
p
[
2
]
dp[2]
dp[2]=0,否则
d
p
[
2
]
dp[2]
dp[2] =
d
p
[
0
]
dp[0]
dp[0] +
d
p
[
1
]
dp[1]
dp[1],最后确定状态转移方程
d
p
[
n
]
dp[n]
dp[n] =
d
p
[
n
−
3
]
dp[n-3]
dp[n−3] +
d
p
[
n
−
2
]
dp[n-2]
dp[n−2] +
d
p
[
n
−
1
]
dp[n-1]
dp[n−1];
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100+5;
int f[N]={0},g[N]={0};
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;++i)
{
int x;
cin>>x;
g[x]=1;
}
f[0]=1;
if(g[1]==1)f[1]=0;
else f[1]=f[0];
if(g[2]==1)f[2]=0;
else f[2]=f[0]+f[1];
for(int i=3;i<=n;++i)
{
if(g[i]==1)continue;
f[i]=f[i-1]+f[i-2]+f[i-3];
}
cout<<f[n]<<endl;
return 0;
}
和你在一起
和你在一起
题目大意
我想和你在一起
直到我不爱你
宝贝 人和人 一场游戏
我愿意为你死去
如果我还爱你
宝贝 反正活着 也没意义
宝贝 我也只能 这样为你
——李志《和你在一起》
现场4分10秒,小哥跟着逼哥嘶吼,泪流满面。我要和你在一起,直到我不爱你。有这么 n 个数字,联成一排拼到一起便是我爱你的时间,那么我们会在一起多久呢
例如: n = 3 时,3 个整数 13,312,343 联接成的最长时间为: 34331213。
又如: n = 4 时,4 个整数 7,13,4,246 联接成的最长时间为: 7424613。
输入格式
n (1
≤
\leq
≤ n
≤
\leq
≤ 20),表示 n 个数。
接下来一行
n
n
n 个正整数,大小不超过 1e
4
{^4}
4。
输出格式
拼成的最长时间。
输入样例
3
623 583 413
输出样例
623583413
解题思路
一看数据,直接字符串来个冒泡排序,数据小可以暴力做,比较第一个字符串的第一个字符,相等就比较下一位,否则得出排序结果。
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
using namespace std;
string s[30];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i) cin>>s[i];
for(int i=2; i<=n ;++i){
for(int j=1;j<i;j++){
for(int k=0;k<=4;){
if(s[j][k]<s[i][k]){
string ss="";
ss=s[i];
s[i]=s[j];
s[j]=ss;
}
if(s[j][k]==s[i][k]) ++k;
else break;
}
}
}
for(int i=1;i<=n;++i) cout<<s[i];
return 0;
}
梵高先生
梵高先生
题目大意
谁的父亲死了
请你告诉我如何悲伤
谁的爱人走了
请你告诉我如何遗忘
——李志《梵高先生》
2009年的最后一天 在义乌隔壁酒吧 李志为了还做唱片欠下来的20W 巡回35场演出 在这晚完成 喝醉了的逼哥哽咽着唱完梵高先生 说最后一次唱这歌。他粗鲁的打断了大家的合唱,然后用最沙哑的嗓音唱了起来,哪天,唯一和他合音的只有一只狗。
抬头再看了一眼星空和黑夜,今晚的星星变成了一个三角形的样子,像这样:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
…
现在给你一个正整数 n,请你给出星空的前 n 行。
输入格式
输入文件共一行,包含一个正整数 n (1
≤
\leq
≤ n
≤
\leq
≤ 20)。
输出格式
输出文件共 n 行,即星空的前 n 行。每行包含若干正整数,这些正整数之间用一个空格隔开(不能有多余的空格),最后一个正整数后面没有空格。
输入样例
4
输出样例
1
1 1
1 2 1
1 3 3 1
解题思路
水题,
d
p
[
i
]
[
j
]
=
d
p
[
i
−
1
]
[
j
−
1
]
+
d
p
[
i
−
1
]
[
j
]
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]
dp[i][j]=dp[i−1][j−1]+dp[i−1][j]
#include <iostream>
using namespace std;
int dp[50][50];
int main()
{
int n;
cin>>n;
dp[1][1]=1;
for(int i=2;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
if(j==1 || j==n) dp[i][j]=1;
else dp[i][j]=dp[i-1][j]+dp[i-1][j-1];
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=i;j++)
{
if(j==1) cout<<dp[i][j];
else cout<<" "<<dp[i][j];
}
cout<<endl;
}
return 0;
}
西班牙馅饼
西班牙馅饼
题目大意
港岛妹妹,你献给我的西班牙馅饼
甜蜜地融化了我,天空之城在哭泣
港岛妹妹,我们曾拥有的甜蜜的爱情
疯狂地撕裂了我,天空之城在哭泣
——李志《天空之城》
粉丝问:“我想问一下在你歌词里面的馅饼是什么?”
李志答:“告诉你,西班牙馅饼是怎么一回事。是有一次我一个朋友给我寄了一张明信片,从西班牙寄过来的,明信片的封面是一块馅饼,谢谢你,你惊讶吗?你们惊讶吗?想想啥?你们知道个几把?整天瞎几把猜对不对?挺可笑的。所以答案一公布就这个样子。你再回想一下生活里面有多少个这样的事情,你充满了幻想,充满了好奇,猜哦,瞎几把猜,猜到后面傻逼了吧?没猜到了吧?”
现在我们看见了这个西班牙馅饼长什么样,西班牙馅饼是个矩形形状,想不到吧。我们可以把它抽象成一个 N 行 M 列的正整数矩阵。每个格子有一个“美味值”,由于一些不可告人的原因我们对于这个馅饼没行只能吃一口,港岛妹妹说如果她吃到美味值为 k 的馅饼,就会给我做出美味值为 k 的红烧肉。问红烧肉最多能有多好吃。
输入格式
N,M:表示 N 行 M 列,馅饼的尺寸大小。
以下 N 行 M 列为馅饼每个格子的美味值。
输入中所有数是不超过 100 的正整数。
输出格式
一个正整数,表示红烧肉最多能有多好吃。
输入样例
3 2
8 15
11 4
2 43
输出样例
69
#include <iostream>
using namespace std;
int main()
{
int n,m,ans=0;
cin>>n>>m;
for(int i=0;i<n;++i)
{
int maxx=-0x3f3f3f3f,t;
for(int j=0;j<m;++j)
{
cin>>t;
if(t>maxx) maxx=t;
}
ans+=maxx;
}
cout<<ans<<endl;
return 0;
}