记录洛谷刷题C语言qaq
现在有一个球队需要你评价。
球队中的第 i i i 个人进了 a i a_i ai 个球,犯规了 b i b_i bi 次。
所以第 i i i 个人的分数就是 5 × a i − 3 × b i 5\times a_i-3\times b_i 5×ai−3×bi 。
如果第 i i i 个人的分数大于 40 40 40 ,那么这个人就是一个黄金球员。
相对应的,如果这个球队的所有人都是黄金球员,那么这个球队就是一个黄金球队。
第一行一个整数 n n n ,表示球队的人数。
接下来 2 n 2n 2n 行,第 2 i − 1 2 i - 1 2i−1 行表示 a i a_i ai,第 2 i 2 i 2i 行表示 b i b_i bi 。
共一行,表示黄金球员的数量。如果这是一个黄金球队,请再输出一个 +
。
3
12
4
10
3
9
1
3+
2
8
0
12
1
1
对于全部数据: 1 ≤ n ≤ 20 , 1 ≤ a i , b i ≤ 2000 1\le n\le 20,1\le a_i,b_i\le2000 1≤n≤20,1≤ai,bi≤2000
C语言
#include
#include
#include
#include
int main()
{
int n;
scanf("%d",&n);
int sum = 0;
for(int i = 0;i < n;i++)
{
int a,b;
scanf("%d",&a);
scanf("%d",&b);
int num = a*5 - b*3;
if(num > 40)
{
sum++;
}
}
printf("%d",sum);
if(sum == n)
printf("+\n");
return 0;
}
C++
#include
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
for (int i = 0; i < n; i++)
{
int a, b;
cin >> a >> b;
int num = a * 5 - b * 3;
if (num > 40)
sum++;
}
cout << sum;
if (sum == n)
cout << "+";
return 0;
}
Problem Number: 58 \textit{58} 58
在 Guluo Academic 群中,大家正在魔怔。
洛谷博客上的《魔怔导论》:https://www.luogu.com.cn/blog/supervise/how-to-get-a-mz。
需要《魔怔导论》(目前更新至 v1.1.1 版本)的 PDF 请于下方「题目附件」处下载。
你得到了 n n n 条信息,这些信息共有三种类型(注意 < str > \texttt<\textit{str}\texttt> <str> 描述一个名为 s t r str str 的字符串,该字符串不含空格、字符 : \texttt: : 与 / \texttt/ /,不含两边的尖角括号):
你经过长期观察,发现名称为 oh \texttt{oh} oh 和 hsh \texttt{hsh} hsh 的表情信息具有魔怔的意味。
并且在一段对话中:
现在你需要对于这些信息,计算出总的魔怔值。
第一行三个整数 n , a , b n,a,b n,a,b,表示共有 n n n 条信息, a , b a,b a,b 意义如题述。
接下来 2 × n 2\times n 2×n 行,描述每条信息:
仅一行一个整数,即总的魔怔值。
7 1 2020
wop:
/yueliang
eoq:
wop_loushang
wop:
eoq_npy_when
eoq:
/oh
dek:
/oh
rif:
NOI2022_rp_++
rif:
/hsh
2022
如图所示。
本题采用捆绑测试。
记 l l l 表示输入中单行信息的最大长度。
Subtask
n
≤
特殊性质
分值
1
≤
10
−
20
2
≤
100
−
20
3
无特殊限制
A
20
4
无特殊限制
−
40
\newcommand{\arraystretch}{1.5}
对于 100 % 100\% 100% 的数据,有 1 ≤ n ≤ 1 0 4 1\le n\le 10^4 1≤n≤104, 1 ≤ l ≤ 50 1\le l\le 50 1≤l≤50, 1 ≤ a , b ≤ 1 0 3 1\le a,b\le 10^3 1≤a,b≤103。
C语言
#include
#include
#include
#include
int n,a,b,ans;//定义变量
int main(){
scanf("%d%d%d",&n,&a,&b) ;
char str1[1001],str2[1001];//定义字符串
for(int i=1;i<=n;i++){
scanf("%s%s",&str1,&str2);
int qwq=strlen(str2);//判断长度
if(str2[0]=='/'){//判断第一个字符
if(qwq==3&&str2[1]=='o'&&str2[2]=='h') //判断是否为"/oh"
ans=ans+a;//答案加a
if(qwq==4&&str2[1]=='h'&&str2[2]=='s'&&str2[3]=='h') //判断是否为“/hsh"
ans=ans+b;//答案加b
else continue;//否则继续循环
}
}
printf("%d\n",ans);
return 0;//结束程序
}
C++
#include
using namespace std;
int n,a,b,ans;//定义变量
int main(){
cin>>n>>a>>b;//输入
string str1,str2;//定义字符串
for(int i=1;i<=n;i++){
cin>>str1>>str2;//输入
int qwq=str2.length();//判断长度
if(str2[0]=='/'){//判断第一个字符
if(qwq==3&&str2[1]=='o'&&str2[2]=='h') //判断是否为"/oh"
ans=ans+a;//答案加a
if(qwq==4&&str2[1]=='h'&&str2[2]=='s'&&str2[3]=='h') //判断是否为“/hsh"
ans=ans+b;//答案加b
else continue;//否则继续循环
}
}
cout<<ans<<endl;//输出
return 0;//结束程序
}
与你借星火,容我题山河。
T T T 组数据,每一组数据给定 l , r , x l,r,x l,r,x,试求: gcd ( ⌊ l x ⌋ , ⌊ l + 1 x ⌋ , ⋯ , ⌊ r x ⌋ ) \gcd(\lfloor \frac{l}{x}\rfloor,\lfloor \frac{l+1}{x}\rfloor,\cdots,\lfloor \frac{r}{x}\rfloor) gcd(⌊xl⌋,⌊xl+1⌋,⋯,⌊xr⌋) 的值。
第一行输入一个正整数 T T T,表示数据组数。
对于每一组数据,输入一行三个正整数 l , r , x l,r,x l,r,x,以空格隔开。
对于每一组数据,输出一行,一个正整数表示答案。
4
3 6 1
8 11 4
4 4 3
7 16 2
1
2
1
1
【样例解释和说明】
样例中的 T = 4 T=4 T=4,说明有 4 4 4 组数据。
【数据范围】
C语言
#include
#include
#include
#include
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
long long l, r, x; //本题唯一坑点,要记得开 long long。
scanf("%lld%lld%lld", &l, &r, &x);
if (l / x != r / x) puts("1");
else printf("%lld\n", l / x);
}
return 0;
}
C++
#include
#include
using namespace std;
int main()
{
int T;
cin >> T;
while (T--)
{
long long l, r, x; //本题唯一坑点,要记得开 long long。
cin >> l >> r >> x;
if (l / x != r / x) puts("1");
else printf("%lld\n", l / x);
}
return 0;
}
Problem Number: 22 \textit{22} 22
在能力卡牌异变之后,幻想乡的少女们将多余的卡牌收集起来,仿照外界人的「斗地主」这一游戏,进行了愉快的玩耍。
斗地主是一种使用 A \tt A A 到 K \tt K K 加上大小王的共 54 54 54 张扑克牌来进行的游戏,其中大小王各一张,其它数码牌各四张。在斗地主中,牌的大小关系根据牌的数码表示如下:
3
<
4
<
5
<
6
<
7
<
8
<
9
<
10
<
J
<
Q
<
K
<
A
<
2
<
小王
wxy
<
大王
\tt 3<4<5<6<7<8<9<10
且牌的大小关系和花色无关。
游戏开始时,将会给 3 3 3 名玩家各自发放 17 17 17 张牌作为手牌,余下三张作为底牌。玩家会将牌从大到小排序理好,然后根据自己牌型的好坏程度来选择是否叫地主。
你认为,如果自己的手牌中存在王炸(即大小王各一张)或者至少一个炸弹(即四张数码相同的牌),则你会选择叫地主。
请实现一个程序来判断你是否应该叫地主。
本题包含多组数据。
yes
代表你应该叫地主。no
代表你不应该叫地主。yes
、Yes
、YES
均会被视为表示应该叫地主。3
X2AAKKKKQT9765433
DX22AKKQJTT884443
X2AAAKQQJT8554433
Yes
Yes
No
对于数据 1 1 1,输入数据相当于下面的手牌(忽略花色):
该手牌中存在炸弹:
故你选择叫地主。
对于数据 2 2 2,输入数据相当于下面的手牌(忽略花色):
该手牌中存在王炸:
故你选择叫地主。
对于数据 3 3 3,输入数据相当于下面的手牌(忽略花色):
该手牌中不存在王炸和炸弹。故你选择不叫地主。
对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 1 0 4 1 \le T \le 10^4 1≤T≤104。保证牌已经预先理好。
C语言
#include
#include
#include
#include
int main()
{
int T, b[128];
scanf("%d",&T);
while (T--)
{
memset(b, 0, sizeof(b));//多测清空
int flag = 0;
char s[1001];
scanf("%s",&s);
for (int i = 0; i < strlen(s); i++)//将牌放入桶中
b[s[i]]++;
if (b['X'] > 0 && b['D'] > 0)//判断是否存在大小王
flag = 1;
for (int i = 1; i <= 127 && !flag; i++)//判断是否存在炸弹
{
if (b[i] >= 4)
flag = 1;
}
puts(flag ? "Yes" : "No");
}
return 0;
}
C++
#include
#include
#include
using namespace std;
int main()
{
int T, b[128];
cin >> T;
while (T--)
{
memset(b, 0, sizeof(b));//多测清空
bool flag = false;
string s;
cin >> s;
for (int i = 0; i < s.length(); i++)//将牌放入桶中
b[s[i]]++;
if (b['X'] > 0 && b['D'] > 0)//判断是否存在大小王
flag = true;
for (int i = 1; i <= 127 && !flag; i++)//判断是否存在炸弹
{
if (b[i] >= 4)
flag = true;
}
puts(flag ? "Yes" : "No");
}
return 0;
}
uuku \text{uuku} uuku 在学习四则运算!
为了验证 uuku \text{uuku} uuku 学习成果, bh1234666 \text{bh1234666} bh1234666 给出一个长为 n n n 整数序列 a i a_i ai。并让 uuku \text{uuku} uuku 给这个序列进行 m m m 次操作。
每次操作可以任意选择序列中一个数 a i a_i ai,令 a i a_i ai 变成 a i + 2 a_i+2 ai+2, a i − 2 a_i-2 ai−2, a i × 2 a_i\times 2 ai×2, ⌊ a i 2 ⌋ \lfloor\frac{a_i}{2}\rfloor ⌊2ai⌋ 这四个结果中的一个。
bh1234666 \text{bh1234666} bh1234666 希望 m m m 次操作后,整个序列的极差(最大值减最小值)最大。
显然 uuku \text{uuku} uuku 没有认真学习,所以他希望你来帮他回答这个问题。
第一行两个整数 n n n, m m m。
第二行 n n n 个整数,表示序列 a i a_i ai。
共一行一个整数,表示最大的极差。
3 2
0 1 0
6
第一步操作:将 1 1 1 加上 2 2 2 得到 3 3 3。
第二步操作:将 3 3 3 乘以 2 2 2 得到 6 6 6。
极差为 6 − 0 = 6 6-0=6 6−0=6。
本题采用捆绑测试,共有 2 2 2 个 subtask \text{subtask} subtask,最终分数为所有 subtask \text{subtask} subtask 分数之和。
KaTeX parse error: \hline valid only within array environment
对于 100 % 100\% 100% 的数据, 2 ≤ n ≤ 1 0 6 2 \le n \le 10^6 2≤n≤106, 1 ≤ m ≤ 10 1 \le m \le 10 1≤m≤10, 0 ≤ a i ≤ 1 0 9 0 \le a_i \le 10^9 0≤ai≤109。
C语言
#include
#include
#include
#include
int n,val,mx,mn=1e9,m;
int main()
{
scanf("%d%d",&n,&m);
while(n--)
{
scanf("%d",&val);
if(val>mx)mx=val;
if(val<mn)mn=val;
}
if(mx<2)mx+=2,m--;
printf("%lld",((1ll*mx)<<m)-mn);
return 0;
}
C++
#include
#include
using namespace std;
int n, val, mx, mn = 1e9, m;
int main()
{
cin >> n >> m;
while (n--)
{
cin >> val;
if (val > mx)mx = val;
if (val < mn)mn = val;
}
if (mx < 2)mx += 2, m--;
printf("%lld", ((1ll * mx) << m) - mn);
return 0;
}