中石大第41次CSP培训Week1题解
A.队列
思路
STL-queue
AC代码
void solve(){
int n;
queue<int> q;
cin >> n;
while(n -- ){
int op, x;
cin >> op;
if(op == 1){
cin >> x;
q.push(x);
}
else if(op == 2){
if(!q.empty()) q.pop();
else cout << "ERR_CANNOT_POP" << endl;
}
else if(op == 3){
if(!q.empty()) cout << q.front() << endl;
else cout << "ERR_CANNOT_QUERY" << endl;
}
else cout << q.size() << endl;
}
}
B.字符串哈希
思路
STL-vector + string
AC代码
void solve(){
int n;
cin >> n;
vector<string> v(n);
for(int i = 0; i < n ; i ++ ){
cin >> v[i];
}
sort(v.begin(), v.end());
n = unique(v.begin(), v.end()) - v.begin();
cout << n << endl;
return ;
}
C.第40次CSP认证第二题:数字变换 (transform)(简单版)
思路
位运算+模拟
AC代码
int f(int x, int k){
return ((x * x + k * k) % 8 ) ^ k;
}
int g(int x, int k){
int a = (x >> 6) & 7;
int b = (x >> 3) & 7;
int c = x & 7;
return ((b << 6) + ((c ^ f(b, k)) << 3) + (a ^ f(c, k)));
}
void solve(){
cin >> a;
for(int i = 0; i < 512; i ++ ){
int e = i;
for(int j = 1; j <= m ; j ++ ){
e = g(e, k[j]);
}
if(e == a){
cout << i << " ";
return ;
}
}
}
D.笨小猴
思路
STL-string,vector + 数学
AC代码
bool f(int x){
if(x <= 1)return false;
if(x == 2)return true;
if(x % 2 == 0)return false;
for(int i = 3; i * i <= x; i += 2){
if(x % i == 0)return false;
}
return true;
}
void solve(){
string s;
cin >> s;
vector<int> v(26, 0);
for(auto i : s){
v[i - 'a'] ++;
}
int a = -1;
int b = MAX;
for(auto i : v){
if(i != 0){
a = max(a, i);
b = min(b, i);
}
}
if(f(a - b)){
cout << "Lucky Word" << endl;
cout << a - b << endl;
}
else{
cout << "No Answer" << endl;
cout << 0 << endl;
}
}
E.编号
思路
数学
AC代码
void solve(){
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; i ++ ){
cin >>v[i];
}
sort(v.begin(), v.end());
int ans = 1;
for(int i = 0; i < n; i ++ ){
ans = (ans * max((v[i] - i), 0ll)) % MOD;
}
cout << ans << endl;
}
F.生活大爆炸版石头剪刀布
思路
模拟
AC代码
int n, a, b, p[205],q[205], x, y;
int k[5][5] = {{0, 0, 1, 1, 0},
{1, 0, 0, 1, 0},
{0, 1, 0, 0, 1},
{0, 0, 1, 0, 1},
{1, 1, 0, 0, 0}};
void solve(){
cin >> n >> a >> b;
for (int i = 0; i < a; i++)
cin >> p[i];
for (int i = 0; i < b; i++)
cin >> q[i];
for (int i = 0; i < n; i++) {
x += k[p[i % a]][q[i % b]];
y += k[q[i % b]][p[i % a]];
}
cout << x << " " << y;
}
G.小Z的情书
思路
模拟
AC代码
void write(){
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
if(g[i][j] == 'O')ans += e[i][j];
}
}
}
void f(){
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
t[j][n - i + 1] = g[i][j];
}
}
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
g[i][j] = t[i][j];
}
}
}
void solve(){
cin >> n;
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
cin >> g[i][j];
}
}
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
cin >> e[i][j];
}
}
for(int i = 1; i <= 4; i ++ ){
write();
f();
}
cout << ans << endl;
}
AC代码(优化版)
void write(){
for(auto i : v){
ans += e[i.first][i.second];
}
}
void f(){
for(auto &i : v){
int x = i.first;
int y = i.second;
i.first = y;
i.second = n - x + 1;
}
sort(v.begin(), v.end());
}
void solve(){
cin >> n;
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
char c;
cin >> c;
if(c == 'O')v.push_back({i, j});
}
}
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
cin >> e[i][j];
}
}
for(int i = 1; i <= 4; i ++ ){
write();
f();
}
cout << ans << endl;
}
H.第39次CSP认证第二题—水印检查
思路
模拟
AC代码
void init() {
csp[1][1] = csp[1][2] = csp[1][4] = csp[1][5] = csp[1][7] = 1;
csp[2][1] = csp[2][2] = csp[2][8] = 1;
csp[3][1] = csp[3][2] = csp[3][3] = csp[3][4] = csp[3][7] = csp[3][8] = 1;
csp[4][7] = csp[4][8] = 1;
}
void solve(){
cin >> n >> l;
for(int i = 1; i <= n ; i ++ ){
for(int j = 1 ; j <= n ; j ++ ){
cin >> g[i][j];
}
}
init();
for(int k = 0; k <= l - 1; k ++ ){
bool key = false;
for(int i = 1 ; i <= n - 4; i ++ ){
for(int j = 1; j <= n - 8 ;j ++ ){
int num = 0;
for(int x = 0; x <= 4; x ++ ){
for(int y = 0; y <= 8; y ++ ){
if(csp[x][y] == 0 && g[i + x][j + y] >= k)num ++ ;
else if(csp[x][y] == 1 && g[i + x][j + y] < k)num ++;
}
}
if(num == 5 * 9)key = true;
}
}
if(key)ans[k]++;
}
for(auto & i: ans)cout << i << endl;
return ;
}
代码模板
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define pb push_back
#define bs bitset
#define val(a) (a<'a' ? (a-'A'+'a') : a)
#define fast() ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
typedef pair<char,int> PCI;
typedef pair<int,int> PII;
typedef pair<long long, long long> PLL;
typedef priority_queue<int> PQ;
typedef priority_queue<int, vector<int>, greater<int>> Q;
const int N = 2e5+10, MAX = 1e9, INF = -1e9;
void solve(){
}
signed main()
{
fast();
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}

浙公网安备 33010602011771号