A. Appleman and Toastman
链接
这个题要计算最大值所以我们肯定直接,每次都减少最少的那个,然后使用一个变量每次把值加上最后打印出来结果就可以了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
const int N = 300008;
int a[N];
signed main () {
int n;
scanf("%lld", &n);
int sum = 0;
for (int i = 0; i < n; i++) {
scanf("%lld", &a[i]);
sum = sum + a[i];
}
//先计算sum的总和
sort(a, a + n);//然后对数组进行排序
int ans = sum;//先让ans加上整个数组
for (int i = 1; i < n; i++) {
ans = ans + a[i - 1];//每一次循环加上
sum = sum - a[i - 1];
ans = ans + sum;
}
printf("%lld", ans);
return 0;
}
C. Corners
链接
找规律我们可以发现,如果图形中4个中有两个1的话,或者少于两个1.只要有一个图形满足这种情况的话
就肯定可以使用L这种操作一次只删除一个1
如果不存在这种情况的话,如果最多一个这种图形里面有3个1就要将1的总数减去1,如果只存在4个1的话,就必须要从全部的1里面减去2
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
const int N = 600;
char mp[N][N];
void solve() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
scanf("%s", mp[i] + 1);//读入数据
}
int flag = 0;
int ling = 0;
int one = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (mp[i][j] == '0') {
ling++;
} else {
one++;
}
}
}//统计有几个0,几个1
for (int i = 1; i <= n - 1; i++) {
for (int j = 1; j <= m - 1; j++) {
int x = 0;
if (mp[i][j] == '0') {
x++;
}
if (mp[i + 1][j] == '0') {
x++;
}
if (mp[i][j + 1] == '0') {
x++;
}
if (mp[i + 1][j + 1] == '0') {
x++;
}
if (x >= 2) {//如果一个4个如图组成的正方形里面的0大于等于两个
flag = 1;
}
}
}
if (flag == 1) {//就打印出全部1的数量
cout << one << '\n';
if (ling == 0) {//如果一个0都没有就打印出1的数量减2
cout << one - 2 << '\n';
} else {//其他情况加上4个字符只有一个0的情况,打印1的数量减一
cout << one - 1 << '\n';
}
}
}
signed main () {
int t;
cin >> t;
while (t) {
solve();
t--;
}
return 0;
}
A. Buying Torches
链接
具体分析看一下代码,不好解释
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
void solve() {
int x, y, k;
cin >> x >> y >> k;//读入数据
int number = (y + 1) * k;//制作一个火把需要一个煤炭和一个棍子,,,,所需要的总的棍子数
number--;//最开始有一个棍子了,让number成为还需要的棍子的数量
int ans = (number + (x - 1) - 1) / (x - 1);//(x-1)为一次增加x-1个这样,让number除以(x-1)向上取整
cout << ans + k << '\n';//打印ans加k....ans是兑换木棍的操作,k是兑换煤炭的数量
}
signed main () {
int t;
cin >> t;
while (t) {
solve();
t--;
}
return 0;
}
C. Paint the Array
链接
这个题我也是看了别人的代码才会的,就是说从第1,3,5,7索引中找到他们的最大公约数.然后判断索引0,2,4,6,8里面能不能被他们的最大公约数整除..
同时求出0,2,4,6,8.的最大公约数,然后判断一下这些索引1,3,5,7,9....的数组能不能整除上面的最大公约数
这两种情况满足那一种我们就打印哪一种的最大公约数就可以了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
const int N = 200;
int a[N];
void solve() {
int n;
scanf("%lld", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);//读入
}
int gcd1 = a[1];
int gcd2 = a[2];
for (int i = 1; i <= n; i += 2) {
gcd1 = __gcd(a[i], gcd1);//求出1,3,5.....为索引的数组的最大公约数gcd1
}
for (int i = 2; i <= n; i += 2) {
gcd2 = __gcd(a[i], gcd2);//求出2,4,6.....为索引的数组的最大公约数gcd2
}
int flag1 = 1, flag2 = 1;
for (int i = 2; i <= n; i += 2) {
if (a[i] % gcd1 == 0) {//如果2,4,6.....为索引的数组不能整除gcd1的话,就打印gcd1
flag1 = 0;
break;
}
}
for (int i = 1; i <= n; i += 2) {
if (a[i] % gcd2 == 0) {//如果1,3,5.....为索引的数组不能整除gcd2的话,就打印gcd2
flag2 = 0;
break;
}
}
if (flag1 == 1) {
cout << gcd1 << '\n';
} else if (flag2 == 1) {
cout << gcd2 << '\n';
} else {//如果两种情况都不满足的话,打印0
cout << 0 << '\n';
}
}
signed main () {
int t;
cin >> t;
while (t) {
solve();
t--;
}
return 0;
}
标签:03,12,cout,int,number,long,刷题,include,define
From: https://www.cnblogs.com/harper886/p/17228186.html