小明种苹果
实现
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int T = 0, K, P = -1;
for (int i = 1; i <= n; i ++ )
{
int tot, sum = 0, x;
scanf("%d", &tot);
for (int j = 0; j < m; j ++ )
{
scanf("%d", &x);
sum += abs(x);
}
T += tot - sum;
if (sum > P) K = i, P = sum;
}
cout << T << ' ' << K << ' ' << P << endl;
return 0;
}
小明种苹果(续)
实现
来自https://www.acwing.com/activity/content/code/content/909148/
从后向前,找到第一次记录即可得知是否有自然掉落
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int n;
vector<int> q[N];
bool st[N];
int get(vector<int>& a, int k)
{
int res = a[k];
for (int i = k + 1; i < a.size(); i ++ )
if (a[i] <= 0)
res += a[i];
return res;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ )
{
int k;
scanf("%d", &k);
while (k -- )
{
int x;
scanf("%d", &x);
q[i].push_back(x);
}
}
int T = 0, D = 0, E = 0;
for (int i = 0; i < n; i ++ )
{
int a, b;
for (int j = q[i].size() - 1; j >= 0; j -- )
if (q[i][j] > 0)
{
a = get(q[i], j);
break;
}
b = get(q[i], 0);
T += a;
if (b > a) st[i] = true, D ++ ;
}
for (int i = 0; i < n; i ++ )
if (st[i] && st[(i + 1) % n] && st[(i + 2) % n])
E ++ ;
printf("%d %d %d\n", T, D, E);
return 0;
}
字符画
实现
来自https://www.acwing.com/activity/content/code/content/908738/
#include<bits/stdc++.h>
using namespace std;
typedef unsigned char UC;
const int N = 1080, M = 1920;
int m, n, p, q;
UC g[N][M][3];
inline int get(char c)
{
if (c <= '9') return c - '0';
return c - 'a' + 10;
}
inline char get(int x)
{
if (x <= 9) return x + '0';
return x - 10 + 'A';
}
inline void print(char* str) //对输出进行转义
{
for (int i = 0; str[i]; i ++ )
printf("\\x%c%c", get(str[i] / 16), get(str[i] % 16));
}
int main()
{
scanf("%d%d%d%d", &m, &n, &p, &q);
char str[100];
for (int i = 0; i < n; i ++ )
for (int j = 0; j < m; j ++ )
{
scanf("%s", str);
int len = strlen(str);
if (len == 2) //分情况处理输出
{
int t = get(str[1]);
for (int k = 0; k < 3; k ++ )
g[i][j][k] = t * 16 + t;
}
else if (len == 4)
{
for (int k = 0; k < 3; k ++ )
{
int t = get(str[1 + k]);
g[i][j][k] = t * 16 + t;
}
}
else
{
for (int k = 0; k < 3; k ++ )
g[i][j][k] = get(str[1 + k * 2]) * 16 + get(str[2 + k * 2]);
}
}
int bg[3] = {
0}; //存储前一个颜色
for (int i = 0; i < n / q; i ++ )
{
for (int j = 0; j < m / p; j ++ )
{
int cur[3] = {
0};
for (int x = 0; x < q; x ++ )
for (int y = 0; y < p; y ++ )
for (int z = 0; z < 3; z ++ )
cur[z] += g[i * q + x][j * p + y][z];
for (int k = 0; k < 3; k ++ ) cur[k] /= p * q; //计算某一色块的值
if (cur[0] == bg[0] && cur[1] == bg[1] && cur[2] == bg[2]) ; // pass
else if (!cur[0] && !cur[1] && !cur[2]) print("\033[0m");
else
{
sprintf(str, "\033[48;2;%d;%d;%dm", cur[0], cur[1], cur[2]);
print(str);
}
for (int k = 0; k < 3; k ++ ) bg[k] = cur[k];
print(" ");
}
if (bg[0] || bg[1] || bg[2]) //输出一行结束,如果不是默认值,需要恢复
{
print("\033[0m");
for (int k = 0; k < 3; k ++ ) bg[k] = 0;
}
print("\n");
}
return 0;
}