省赛训练赛赛题(简单题)
Description
某天早上,小明突然发现自己家里多了两个售货机A和B,如果向A机器中放入a枚硬币,A机器会吐出来2a+1枚硬币。如果向B机器投入a枚硬币,B机器会吐出来2a+2枚硬币,现在小明想获得n枚硬币,请你输出使用机器的顺序。
注:开始时小明是没有硬币的。
Input
输入一行n(1 ≤n≤ 100000000).
Output
输出一行由A和B组成的字符串,代表使用机器的顺序。
Sample Input 1
7
Sample Output 1
AAA
Sample Input 2
10
Sample Output 2
ABB
Hint
AC代码:
#include<iostream> #define int long long using namespace std; string str,str1; int f; void fun(int n) { if(n == 0) return; int temp = (n - 1) % 2; f = (n - 1) / 2; if(temp == 0) { str.append("A"); fun(f); } else { str.append("B"); fun(f); } } signed main() { int n; cin >> n; fun(n); int len = str.length(); for(int i = len - 1;i >= 0;i--) cout << str[i]; return 0; }
Description
今天上课老师给小明了几个n*m的矩阵,她希望小明能找到规律,并能举一反三,成为班级最聪明的人,你能帮他完成吗?
老师给的矩阵如下:
3*3::
4*4:
3*2:
Input
输入共一行,包含两个整数n和m。(1≤n,m≤1000)
Output
输出满足要求的矩阵。注:每行最后一个数的后面没有空格
Sample Input 1
3 3
Sample Output 1
1 2 3 8 9 4 7 6 5
AC代码:
#include<bits/stdc++.h> #define long long int using namespace std; int num[1001][1001]; signed main() { int n,m; cin >> m; cin >> n; int count = 1; int x = 0, y = 0; int dx = 0, dy = 1; if(m == 1) { for(int i = 0;i < n;i++) { if(i != n - 1) cout << i + 1 << " "; else cout << i + 1; } }else if(n == 1) { for(int i = 0;i < m;i++) { if(i != m - 1) cout << i + 1 << endl; else cout << i + 1; } } else { while (count <= m * n) { num[x][y] = count; x += dx; y += dy; if (dy == 1 && (y >= n - 1 || num[x][y+1] != 0)) { dx = 1; dy = 0; } else if (dx == 1 && (x >= m - 1 || num[x+1][y] != 0)) { dx = 0; dy = -1; } else if (dy == -1 && (y <= 0 || num[x][y-1] != 0)) { dx = -1; dy = 0; } else if (dx == -1 && (x <= 0 || num[x-1][y] != 0)) { dx = 0; dy = 1; } count++; } for(int i=0;i<m;i++)//输出矩阵 { for(int j=0;j<n;j++) { if(j != n - 1) cout << num[i][j] << " "; else cout << num[i][j]; } if(i != m - 1) cout << endl; } } return 0; }
Description
小王老师最近迷上了区间问题。
有一次,小王老师为了考考同学们,在黑板上出了一道智力题。
他在黑板上写下了N个数,分别是A1,A2,A3...An.然后他问问大家在这串数中有多少个区间满足区间的和为K。
【即有多少个连续非空的序列Al,A(l+1),A(l+2)...Ar的和为K(l<=r)】
请你告诉他。
Input
第一行是两个正整数 N,K(1<=N<=200000,-pow(10,14)<=K<=pow(10,14)),分别代表数组长度和需满足条件的K。
第二行输入N个数,分别是A1,A2,A3...An。(-pow(10,9)<=Ai<=pow(10,9))
Output
输出一行整数,表示在数组中有多少个区间满足区间和为K.
Sample Input 1
6 3 3 -2 -1 1 1 2
Sample Output 1
3
Hint
三个区间分别是【A1-->A1】,【A3-->A6】,【A5-->A6】
AC代码:
#include<bits/stdc++.h> #define long long int #define N 200000 using namespace std; int a[N]; signed main() { int n,k,flag = 0; cin >> n >> k; for(int i = 1;i <= n;i++) { cin >> a[i]; if(a[i] == k) flag++; } for(int i = 1;i <= n;i++) { int temp = a[i]; for(int j = i + 1;j <= n;j++) { temp += a[j]; if(temp == k) flag++; } } cout << flag << endl; return 0; }