【基础组】ACGO“飞翔杯”非正经题解
2025-06-21 13:43:45
发布于:浙江
我们只需要判断是否是5的倍数或者用%10来判断:
#include <bits/stdc++.h>
using namespace std;
long long n = 0,ans = 0;
int main(){
cin >> n;
for(int i = 1;i <= n;i++){
int x;
cin >> x;
if(x % 10 == 0 || x % 10 == 5){
ans += x;
}
}
cout << ans;
return 0;
}
我们先输入,在便利全部,用字母的ASCII(int型)相加就行了:
#include <bits/stdc++.h>
using namespace std;
long long ans;
string a;
int main(){
cin >> a;
for(int i = 0;i < a.size();i++){
ans += (int)a[i];
}
cout << ans;
return 0;
}
我们得一个一个的判断大于某月的日子,那么月加1,日重新赋值1,如果大于12月,月重新赋值1,年加1,代码比较复杂:
#include <bits/stdc++.h>
using namespace std;
long long ans = 0;
long long c[10010];
struct node{
int y,m,d;
};
node a,b;
bool p(int n){
if(n % 4 == 0){
return true;
if(n % 100 != 0){
return true;
} else if(n % 400 == 0){
return true;
} else {
return false;
}
} else {
return false;
}
}
int h(int n){
int ans = 0;
while(n > 9){
ans += n % 10;
n /= 10;
}
ans += n;
return ans;
}
int z(int year,int month,int day){
int sum = h(year) + h(month) + h(day);
return sum;
}
int main(){
cin >> a.y >> a.m >> a.d;
cin >> b.y >> b.m >> b.d;
int year = a.y,month = a.m,day = a.d;
while(true){
int sum = z(year,month,day);
if(c[sum] == 0){
c[sum] = 1;
ans++;
}
if(year == b.y && month == b.m && day == b.d){
break;
}
day++;
if(month == 1){
if(day > 31){
day = 1;
month++;
}
} else if(month == 2){
if(p(year)){
if(day > 29){
day = 1;
month++;
}
} else {
if(day > 28){
day = 1;
month++;
}
}
} else if(month == 3){
if(day > 31){
day = 1;
month++;
}
} else if(month == 4){
if(day > 30){
day = 1;
month++;
}
} else if(month == 5){
if(day > 31){
day = 1;
month++;
}
} else if(month == 6){
if(day > 30){
day = 1;
month++;
}
} else if(month == 7){
if(day > 31){
day = 1;
month++;
}
} else if(month == 8){
if(day > 31){
day = 1;
month++;
}
} else if(month == 9){
if(day > 30){
day = 1;
month++;
}
} else if(month == 10){
if(day > 31){
day = 1;
month++;
}
} else if(month == 11){
if(day > 30){
day = 1;
month++;
}
} else if(month == 12){
if(day > 31){
day = 1;
month++;
}
}
if(month > 12){
year++;
month = 1;
}
}
cout << ans;
return 0;
}
先把可以开垦的地方标记一下,在循环遍历全部土地,假设为新放置的杂物的位置(在原本有杂物的地方放置就等于不放),然后记录被取消掉的开垦地的数量(越多越好),最后减去就行了:
#include <bits/stdc++.h>
using namespace std;
int n,m,ans = 0,minx = 0;
char a[10010][10010];
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin >> a[i][j];
}
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
if(a[i][j] == '.' && a[i - 1][j] != '#' && a[i + 1][j] != '#' && a[i][j - 1] != '#' && a[i][j + 1] != '#'){
a[i][j] = '@';
ans++;
}
}
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
int sum = 0;
if(a[i][j] == '@'){
sum++;
}
if(a[i - 1][j] == '@'){
sum++;
}
if(a[i + 1][j] == '@'){
sum++;
}
if(a[i][j - 1] == '@'){
sum++;
}
if(a[i][j + 1] == '@'){
sum++;
}
minx = max(minx,sum);
}
}
cout << ans - minx;
return 0;
}
这一次的,比较简单但我还是有题没过啊,我祝大家每题AC,大家加油!
拜拜!
虽然是非正经题解,但还是求个顶吧!
全部评论 4
其实月份不需要那么复杂,直接
mth[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
然后直接查询数组元素就行,注意 月要根据闰年平年填充。
2025-06-14 来自 广东
1也是
2025-06-14 来自 浙江
0漏了个int
2025-06-14 来自 广东
0哪?
2025-06-19 来自 浙江
0
T3 的码量惊人
2025-06-19 来自 浙江
0毕竟是这种简单题的比赛,手速和码量非常重要
2025-06-19 来自 浙江
0前者不好刻意提高,而后者可以
2025-06-19 来自 浙江
0手速只能在不断刷体中提高
2025-06-19 来自 浙江
0
%%%
2025-06-14 来自 广东
0?
2025-06-14 来自 浙江
0
第一次发比赛题解,有点小激动!
2025-06-14 来自 浙江
0T3复杂了 加油!
2025-06-14 来自 广东
0什么意思?但会加油的
2025-06-14 来自 浙江
0你T3代码过于复杂了 继续加油!
2025-06-14 来自 广东
0
有帮助,赞一个