A - Anyway Takahashi
题意:输出 (a + b)* (c - d)的结果
AC代码:
#include <iostream>
using namespace std;
int a, b, c, d;
int main()
{
cin >> a >> b >> c >> d;
cout << (a + b) * (c - d) << endl;
cout << "Takahashi" << endl;
return 0;
}
B - Rectangle Detection
题意:给你一个字符二维数组,其中有一片由#构成的矩阵区域,请你输出这片矩阵区域左上角和右下角的位置
思路:遍历这十个字符串,不断地更新左边界,右边界的大小即可,取最小的左边界和最大的右边界
AC代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int N = 15;
int a = 10, b = 0, c = 10, d = 0;
vector<string> s(N);
int main()
{
for(int i = 0; i < 10; i ++) cin >> s[i];
for(int i = 0; i < 10; i ++)
{
for(int j = 0; j < 10; j ++)
{
if(s[i][j] == '#')
{
a = min(a, i);
b = max(b, i);
c = min(c, j);
d = max(d, j);
}
}
}
cout << a + 1 << ' ' << b + 1 << endl;
cout << c + 1 << ' ' << d + 1 << endl;
}
C - Submask
题意:
给你一个非负整数N,让你输出符合以下要求的所有数
- 在二进制下,如果此数某位是1,那么N的这一位也应当是1
- 换句话说,如果N的某位是0,那么此数的这一位就不能是1
思路:先开一个向量用来存下答案,然后再遍历二进制下N的每一位,如果是此位是1,那么就把向量中每个元素的这一位改成1,形成一个新元素存入答案,最后直接输出即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
vector<int>res;
LL x, ans;
int main()
{
cin >> x;
for(int i = 0; i < 60; i ++)
{
if(x >> i & 1) res.push_back(i);//按位运算
}
int n = res.size();
for(int i = 0 ; i < 1 << n; i ++)
{
ans = 0;
for(int j = 0; j < n; j ++)
{
if(i >> j & 1)
{
ans += (1LL << res[j]);//1LL会在运算时把后面的临时数据扩容成long long类型,再在赋值给左边时转回int类型。
}
}
printf("%lld\n",ans);
}
return 0;
}