语法周赛 Round 3 题解
2024年12月25日大约 3 分钟
算利润
难度:简单数学问题。
钱包金额
首先判断价格是否存在涨幅,如果明天价格
如果明天价格
#include <bits/stdc++.h>
using namespace std;
int n,x,y;
int main(){
cin>>n>>x>>y;
if(x<y){
cout<<n/x*y+n-n/x*x;
}else{
cout<<n;
}
return 0;
}
星星历
难度:日期进制的数学计算问题,只需要计算日期输出 1 1 n
也有
首先理解星星历的机制,星星历采用每星
还需要了解日期进制和普通进制的差异,例如:
计算方法有两种:
- 方法一,可以使用暴力方案一天一天去数,本题数据可做
分。 - 方法二,
- 计算年可以通过
的方案,主要给天数减一,规避掉整除商会加 的情况,然后从 年开始计算,加到 上即可。 - 计算星可以通过计算得到当前的天数
(也是要规避整除情况),然后再由 计算出星。 - 计算日同上,规避整除即可。
- 计算年可以通过
#include <iostream>
using namespace std;
int main(){
int n;
cin>>n;
cout<<(n-1)/360+1<<" ";
cout<<(((n-1)%360+1)-1)/120+1<<" ";
cout<<(n-1)%120+1;
return 0;
}
简单系动词
难度:主要考察输入问题,如果使用文件结束符结束输入。
输入完成后,从左到右扫描单词,只要不是系动词就输出,如果是系动词,根据当前系动词前面的单词情况,更改现在的系统词输出即可,因为题目保证语句通顺,所以可以保证系统词只是位置不对,数量和匹配一定是对的,也不需要统计系动词数量。
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string last, now;
last = "";
while (cin >> now)
{
if (now == "am" || now == "are" || now == "is")
{
if (last == "i")
now = "am";
else if (last == "you")
now = "are";
else
now = "is";
}
cout << now << " ";
last = now;
}
return 0;
}
唱跳 RAP
难度:主要考察桶的应用。
利用桶统计每个数字出现的次数,然后根据每个数字出现的次数,计算选择方案即可。
对于数字 i
出现次数为 T[i]
次,根据排列组合的逻辑 T[i]
个中取两个 数量次数为 T[i]-1+T[i]-2+T[i]-3+......1
。利用高斯求和公式得出计算公式为 (T[i]-1+1)*(T[i]-1)/2
为数字 i
选取 2
个的次数,所有数字的次数和即为答案。
#include <iostream>
using namespace std;
int n,m;
int a[1005];
int T[105];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
T[a[i]]++;
}
for(int i=1;i<=m;i++){
int t;
cin>>t;
T[a[t]]--;
}
long long sum=0;
for(int i=1;i<=100;i++){
if(T[i]>=2){
sum+=(T[i]-1+1)*(T[i]-1)/2;
}
}
cout<<sum;
}