这里写目录标题
B. 程序员的感激方式
民大计科院的学生LJH真诚而又激动的想用程序员的方式致敬和感谢。
他觉得用电脑符号,小星星 ***** 拼成他用于表达情感的文字的样子是一件很酷的事。
由于他读书不多,胸无点墨,文思迟钝,暂未构思完成,但为了直抒胸臆,他确定最后一句一定是,“Thank you”。
极简主义的他希望用首字母T和Y来表示Thank you。
下面给出,T和Y的构成规则。
他首先将T视为两根线组成,Y视为3根线组成.
每根线都拥有相同的长度和宽度,且长度和宽度都只由 ***** 的数量决定.
为了使下面的T和Y下面的线保证处于字母中间位置,线的长度和宽度均为偶数。
Input
输入包含多组测试样例。
输入的第一行仅包含一个正整数 T ( 1 ≤ T < 50 ) T(1≤T<50) T(1≤T<50),代表测试样例的组数
每组测试样例仅包含两个正整数, W W W和 L ( 1 < W < L < 30 ) ( 1 < W < L < 30 ) L(1<W<L<30)(1<W<L<30) L(1<W<L<30)(1<W<L<30),分别代表线的长度和宽度,如上描述
Output
对于每组测试样例,请根据输入的W和L输出如题目所示的图形。
输入
1 2 6
输出
****** ****** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **** ** ** ** ** ** **
Accepted code
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#define ll long long
#define db double
#define inf INT_MAX
#define s(a, n) memset(a, n, sizeof(a))
#define g(a, max) fgets(a, max, stdin)
#define debug(a) cout << '#' << a << '#' << endl
using namespace std;
const unsigned long long MOD = 1e9 + 7;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
bool fi = true;
while (t--) {
int a, b;
cin >> a >> b;
if (fi)
fi = !fi;
else
cout << endl;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
cout << "*";
}
cout << endl;
}
for (int i = 0; i < b; i++) {
for (int j = 0; j < ((b - a) / 2); j++) {
cout << ' ';
}
for (int j = 0; j < a; j++) {
cout << '*';
}
cout << endl;
}
for (int i = 0; i < b; i++) {
for (int j = 0; j < i; j++) {
cout << ' ';
}
for (int j = 0; j < a; j++) {
cout << "*";
}
for (int j = 0; j < (b - 1 - i) * 2; j++) {
cout << ' ';
}
for (int j = 0; j < a; j++) {
cout << "*";
}
cout << endl;
}
for (int i = 0; i < b; i++) {
for (int j = 0; j < b+a/2-1; j++) {
cout << ' ';
}
for (int j = 0; j < a; j++) {
cout << "*";
}
if (i != b - 1) cout << endl;
}
}
return 0;
}
C. 打印乘法表
小时候,我们都背过九九乘法表,但其实乘法表不一定是九九,也可以是七七、十十……只要它像下面这样排列:
1x1=1
1x2=2 2x2=4
1x3=2 2x3=6 3x3=9
1x4=2 2x4=8 3x4=12 4x4=16
……
如果我们斜着观察乘法表,我们可以把乘法表平行于对角线分成多条,我们称之为斜线,如图:
每个箭头代表一条斜线,并且上面的数字指出了它们的编号顺序,由于乘法表并没有具体的行列数限制(也就是乘法表只要按照它的规律构造是无穷无尽的),所以每条斜线也是无穷的。
现在给定你两个正整数n和k,请你求出在第n条斜线上,从左上角往右下角依次累加,累加的和超过k需要的最少数字个数。
Input
第一行是两个正整数 n ( 1 ≤ n ≤ 1 0 9 ) n(1≤n≤10^9) n(1≤n≤109)和 k ( 1 ≤ k ≤ 1 0 9 ) k(1≤k≤10^9) k(1≤k≤109),分别代表斜线的序号,和需要累加超过的数。
Output
第一行是一个数,为第n条斜线上,从左上角往右下角依次累加,累加的和超过k需要的最少数字个数
输入
1 10
输出
3
Note
在第一条斜线中, 1 + 4 = 5 < 10 1+4=5<10 1+4=5<10, 1 + 4 + 9 = 14 > 10 1+4+9=14>10 1+4+9=14>10,所以最少需要3个。
Accepted code
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#define ll long long
#define db double
#define inf INT_MAX
#define s(a, n) memset(a, n, sizeof(a))
#define g(a, max) fgets(a, max, stdin)
#define debug(a) cout << '#' << a << '#' << endl
using namespace std;
const unsigned long long MOD = 1e9 + 7;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll a[45];
int l = 0;
ll i;
cin >> i;
ll k = 1;
ll ans = 0;
cin >> l;
for (ll j = i; ; j++) {
a[1] = j * (k++);
ans += a[1];
// debug(a[l]);
if(ans>l){
cout << j - i + 1;
break;
}
}
return 0;
}
D. 异或之后的和
给定n个二进制表示的正整数( 01 01 01串),每个串长度为m。
现将n个数分别异或一个正整数x,得到n个新的数。
请你求出新得到的n个数的和。
Input
输入包含多组测试样例。
输入的第一行为一个正整数 T ( 1 ≤ T ≤ 100000 ) T(1≤T≤100000) T(1≤T≤100000),代表测试样例组数。
每组输入包含 n + 2 n+2 n+2行:
第一行包含两个用空格隔开的整数 n , m ( 1 ≤ n , m ≤ 30 ) n,m(1≤n,m≤30) n,m(1≤n,m≤30);
第二行是x的m位二进制形式,其中 0 ≤ x < 2 m 0≤x<2^m 0≤x<2m;
后面n行均为长度为m的 01 01 01串,分别代表n个整数的二进制。
Output
输出仅包含一个整数,代表新得的 n n n个数之和。
输入
1 3 4 1111 1001 0111 0001
输出
28
Accepted code
//打表,位运算
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#define ll long long
#define db double
#define inf INT_MAX
#define s(a, n) memset(a, n, sizeof(a))
#define g(a, max) fgets(a, max, stdin)
#define debug(a) cout << '#' << a << '#' << endl
using namespace std;
const unsigned long long MOD = 1e9 + 7;
unsigned ll a[100] = {
1, 2, 4, 8, 16, 32, 64,
128, 256, 512, 1024, 2048, 4096, 8192,
16384, 32768, 65536, 131072, 262144, 524288, 1048576,
2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728,
268435456, 536870912, 1073741824, 2147483648};
unsigned ll ans[100];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
bool fi = true;
while (t--) {
int n, m;
cin >> n >> m;
// ll x;
// cin >> x;
// getchar();
s(ans, 0);
int s;
// ll answer = 0;
ll ans1 = 0;
for (int i = 0; i <= n; i++) {
cin.get();
for (int j = m - 1; j >= 0; j--) {
s = cin.get();
// debug(s);
// cout<<endl;
if (s == '1') {
ans[i] += a[j];
// debug(a[j]);
}
}
// answer += ans[i];
}
for (int i = 1; i <= n; i++) {
ans1 += (ans[0] ^ ans[i]);
}
if (fi)
fi = !fi;
else
cout << endl;
cout << ans1;
}
}
E. Activity生命周期
日常生活中我们接触到的 A n d r o i d Android