记录洛谷刷题QAQ,一些不太优雅的代码
小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和。
等差数列:对于一个 n n n 项数列 a a a,如果满足对于任意 i ∈ [ 1 , n ) i \in [1,n) i∈[1,n),有 a i + 1 − a i = d a_{i+1} - a_i = d ai+1−ai=d,其中 d d d 为定值,则称这个数列为一个等差数列。
一行 3 3 3 个整数 a 1 , a 2 , n a_1, a_2, n a1,a2,n,表示等差数列的第 1 , 2 1,2 1,2 项以及项数。
数据范围:
一行一个整数,表示答案。
1 2 3
6
-5 -10 5
-75
【样例 1 1 1 说明】
这个等差数列为 1 2 3
,其各项之和为 6 6 6。
#include
#include
#include
#include
int main()
{
long long a1, a2, n;
scanf("%lld%lld%lld",&a1,&a2,&n);
long long sum = 0;
long long k = a2 - a1;
sum = n*a1 + n*(n - 1)*k/2;
printf("%lld\n",sum);
return 0;
}
X 校正在进行 CSP 前的校内集训。
一共有 n n n 名 OIer 参与这次集训,教练为他们精心准备了 m m m 套模拟赛题。
然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 k k k 天中都恰好有 m m m 天有空打模拟赛。
为了方便管理,教练规定一个人必须按顺序打完 m m m 套模拟赛题。
比如,小 X 在接下来的第 2 , 3 , 5 2,3,5 2,3,5 天有空打模拟赛,那么他就必须在第 2 2 2 天打第 1 1 1 套模拟赛题,第 3 3 3 天打第 2 2 2 套模拟赛题,第 5 5 5 天打第 3 3 3 套模拟赛题。
教练需要为每一个人的每一次模拟赛做准备,为了减小工作量,如果在某一天有多个人打同一套模拟赛题,那么教练只需要在这一天准备一场使用这一套题的模拟赛即可。
你作为机房大佬,教练想请你帮他计算一下,他每天需要准备多少场模拟赛。
第一行三个整数 n , m , k n,m,k n,m,k。
接下来 n n n 行,每行 m m m 个整数,第 i i i 行第 j j j 列的整数 a i , j a_{i,j} ai,j 表示第 i i i 个人在接下来的 k k k 天中第 j j j 个有空的日子为第 a i , j a_{i,j} ai,j 天。
一行 k k k 个整数,第 i i i 个整数表示接下来的第 i i i 天教练需要准备的模拟赛场数。
1 3 5
2 3 5
0 1 1 0 1
6 3 7
2 3 4
2 5 7
3 5 7
1 3 5
5 6 7
1 2 3
1 2 3 1 3 1 1
10 10 20
2 3 4 8 9 11 12 16 17 18
2 3 6 10 12 13 14 15 19 20
1 3 7 10 11 13 14 15 17 19
1 2 4 6 7 9 15 17 19 20
2 3 5 6 9 11 14 16 19 20
1 2 3 8 9 10 11 12 15 19
1 4 6 7 9 12 13 17 18 19
1 7 8 9 10 11 13 15 18 20
1 5 6 7 8 9 13 16 18 19
4 5 7 10 11 13 14 17 18 20
1 2 2 3 2 2 4 3 3 3 3 4 2 1 3 1 2 2 2 1
本题采用捆绑测试。
对于 100 % 100\% 100% 的数据, 1 ≤ n , m , k ≤ 1 0 3 1 \le n,m,k \le 10^3 1≤n,m,k≤103, m ≤ k m \le k m≤k, 1 ≤ a i , 1 < a i , 2 < ⋯ < a i , m ≤ k 1 \le a_{i,1} < a_{i,2} < \cdots < a_{i,m} \le k 1≤ai,1<ai,2<⋯<ai,m≤k。
#include
#include
#include
#include
int n, m, k, tot[1004], vis[1004][1004], a[1004][1004];
int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
scanf("%d", &a[i][j]);
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= m; ++j) {
if(!vis[j][a[i][j]]) {
vis[j][a[i][j]] = 1;
tot[a[i][j]]++;
}
}
}
for(int i = 1; i <= k; ++i)
printf("%d ", tot[i]);
return 0;
}
小 D 是一位即将参加 ION 的 IO 选手,然而笔试题库中数量繁多的奇怪题目让他大伤脑筋,快来帮帮他!
笔试题库可以抽象为 n n n 道题目,每道题目由题面和答案组成,都是一个字符串,保证所有题目题面互不相同。
为了检验小 D 背笔试的效果,教练进行了一次模拟考试,考试包含 q q q 道题目,每道题目都有 4 4 4 个选项,小 D 需要从 4 4 4 个选项中选出与答案相符的选项。
现在你需要帮助小 D 完成这场考试。
第一行两个正整数 n , q n, q n,q。
接下来 n n n 行,每行 2 2 2 个用空格分隔的字符串,表示这道题目的题面和答案。
接下来 q q q 行,每行 5 5 5 个用空格分隔的字符串,第一个字符串表示模拟考试中这道题目的题面,其余 4 4 4 个字符串按顺序分别为这道题目的选项 A 到选项 D,保证选项各不相同。
对于模拟考试中的每道题目,输出一个字符表示这道题目答案对应的选项,保证所有题目均有解。
3 4
decoak yes
duliuchutiren nonono
csps noiptg
decoak yes no qwq qaq
csps noiptg noippj noi cspj
decoak qwq qaq yesyes yes
duliuchutiren yes no nono nonono
A
A
D
D
【数据范围】
令 s s s 为输入中字符串长度的最大值。
对于 30 % 30 \% 30% 的数据, n , q , s ≤ 10 n, q, s \le 10 n,q,s≤10。
对于另 20 % 20 \% 20% 的数据, s = 1 s = 1 s=1。
对于 100 % 100 \% 100% 的数据, n , q , s ≤ 100 n, q, s \le 100 n,q,s≤100,所有字符串都由小写拉丁字母组成。
#include
#include
#include
#include
char a[101][101],ans[101][101];
char p[101],pp[101][101];
char h[5]={'0','A','B','C','D'};
int main()
{
int n,m,qwq=0;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+1);
scanf("%s",ans[i]+1);
}
for(int i=1;i<=m;i++)
{
scanf("%s",p+1);
for(int j=1;j<=n;j++)
{
if(strcmp(p+1,a[j]+1)==0)
{
for(int t=1;t<=4;t++)
scanf("%s",pp[t]+1);
for(int t=1;t<=4;t++)
{
if(strcmp(pp[t]+1,ans[j]+1)==0)
{
printf("%c\n",h[t]);
qwq=1;
break;
}
}
if(qwq)
break;
}
}
qwq=0;
}
}
性★感☆大★草 在☆线★开☆门
定☆数★一☆零 实★则☆虚★高
加★速☆转★圈 开☆幕★雷☆击
疯☆狂★交☆互 劲★爆☆咚★咚
黑★蚊☆子★多 邀☆您★来☆爽
超☆越★模☆式 直★角☆旋★钮
山★东☆卫★星 马☆上★联☆动
变☆成★十☆加 已★经☆爽★爆
Hikari 的面前有 n ( 1 ≤ n ≤ 1000 ) n(1\leq n\leq 1000) n(1≤n≤1000) 级台阶,每 1 s 1s 1s 她可以向上跳 m ( 1 ≤ m ≤ n ) m(1\leq m\leq n) m(1≤m≤n) 级台阶。(不在中间的台阶上停留)
台阶上有 k ( k ≤ 10 ) k(k\leq 10) k(k≤10) 个特殊的平台 a i a_i ai,Hikari 在该平台 停留 时会使得 m m m 增加 1 1 1。
请问 Hikari 到达台阶顶部花费的时间。
共 2 2 2 行。
第 1 1 1 行输入 3 3 3 个非负整数 n , m , k n,m,k n,m,k。
第 2 2 2 行输入 k k k 个正整数,第 i i i 个正整数表示 a i a_i ai,保证输入的 a i a_i ai 单调递增。
共 1 1 1 行,输出 1 1 1 个正整数表示花费的时间。
10 5 0
2
31 4 2
8 13
6
对于 60 % 60\% 60% 的数据, k = 0 k=0 k=0。
对于 100 % 100\% 100% 的数据, 1 ≤ m ≤ n ≤ 1000 1\leq m\leq n\leq 1000 1≤m≤n≤1000, k ≤ 10 k\leq 10 k≤10。
MtOI2019 Extra Round T1
出题人:disangan233
#include
#include
#include
#include
int main()
{
int n, m, k;
scanf("%d%d%d",&n,&m,&k);
int num[k+1];
for(int i = 1;i <= k;i++)
{
scanf("%d",&num[i]);
}
int sum = 0;
int j = 1;
int time = 0;
while(sum < n)
{
sum = sum + m;
for(int j = 1;j <= k;j++)
{
if(sum == num[j])
{
m++;
}
}
time++;
}
printf("%d\n",time);
return 0;
}
小 K 又在做白日梦了。他进入到他的幻想中,发现他打下了一片江山。
小 K 打下的江山一共有 n n n 个城市,城市 i i i 和城市 i + 1 i+1 i+1 有一条双向高速公路连接,走这条路要耗费时间 a i a_i ai。
小 K 为了关心人民生活,决定定期进行走访。他每一次会从 1 1 1 号城市到 n n n 号城市并在经过的城市进行访问。其中终点必须为城市 n n n。
不仅如此,他还有一个传送器,传送半径为 k k k,也就是可以传送到 i − k i-k i−k 和 i + k i+k i+k。如果目标城市编号小于 1 1 1 则为 1 1 1,大于 n n n 则为 n n n。
但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快的完成访问,于是就想问交通部部长您最快的时间是多少。
注意:他可以不访问所有的城市,使用传送器不耗费时间。
两行,第一行 n , k n,k n,k。
第二行 n − 1 n-1 n−1 个整数,第 i i i 个表示 a i a_i ai。
一个整数,表示答案。
4 0
1 2 3
6
4 1
1 2 3
3
样例 1,2 的图示均为以下图片:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pVGMRQcM-1658836203174)(https://s2.ax1x.com/2019/11/08/MZbuTK.png)]
不使用传送器直接走,答案为 6 6 6,可以证明这个是最小值。
在 3 3 3 处使用,传送到 4 4 4,答案为 3 3 3,可以证明这个是最小值。
对于所有数据, a i > 0 a_i > 0 ai>0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7i401n5Z-1658836203175)(https://s2.ax1x.com/2019/11/04/Kvrl34.jpg)]
#include
#include
#include
#include
long long a[1000005];
int main()
{
long long n,k,maxx=0;
scanf("%ld%ld",&n,&k);
for (int i=1;i<n;++i)
{
scanf("%ld",&a[i]);
a[i]+=a[i-1];//前缀和
}
for (int i=1;i<=n-k;++i)
{
if(maxx < a[i+k-1]-a[i-1])
{
maxx = a[i+k-1]-a[i-1];
}//求最多能越过的权值
}
printf("%ld",a[n-1]-maxx);//别忘了用总路程减去能越过的路程
return 0;
}