A - AtCoder Quiz 3A - AtCoder Quiz 3
题目大意
给定一个整数N,以AGCXXX的格式打印第N次AGC的名称,其中XXX是以零填充的3位数字。
思路分析
根据题目要求,当N≥42时,输出AGC加上N+1,并补齐为3位数字的格式;否则,输出AGC加上N,并补齐为3位数字的格式。
时间复杂度
O(1)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
  int x;
  cin>>x;
  if(x>=42) cout<<"AGC"<<setw(3)<<setfill('0')<<x+1<<'\n';
  else cout<<"AGC"<<setw(3)<<setfill('0')<<x<<'\n';
  return 0;
}
 
B - Triple MetreB - Triple Metre
题目大意
给定一个字符串S,判断S是否为字符串T的子串。当存在一对整数i和j(1≤i≤j≤∣T∣)满足条件:从T中提取第i到第j个字符而不改变顺序后,得到的字符串与S相等时,称S为T的子串。令TT为oxx的105个拼接而成的字符串。给定一个字符串S,如果S是T的子串,则输出Yes,否则输出No。
思路分析
可以构造一个字符串TT,将’oxx’重复拼接105次。然后使用字符串的find函数来判断S是否是T的子串。如果find函数返回的值不等于string::npos,就说明S是T的子串。
时间复杂度
O(k * 105)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
  string t;
  cin >> t;
  
  string s = "oxx";
  string TT = "";
  
  for(int i=0; i<100000; i++) {
    TT += s;
  }
  
  if(TT.find(t) != string::npos) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
  
  return 0;
}
 
C - X drawingC - X drawing
题目大意
要求在一个N×N的网格上进行操作,初始状态所有方格都是白色。每次操作有两个步骤:根据给定的参数A和B,将一些方格涂成黑色。
- 第一次操作:对于满足max(1−A,1−B)≤k≤min(N−A,N−B)的整数k,将方格(A+k,B+k)涂成黑色。
 - 第二次操作:对于满足max(1−A,B−N)≤k≤min(N−A,B−1)的整数k,将方格(A+k,B−k)涂成黑色。
 
思路分析
可以通过模拟操作来确定每个方格的颜色。
 首先,可以使用一个二维数组来表示网格,数组的元素可以是字符类型,用’.‘表示白色,用’#'表示黑色。
 然后,根据操作规则,我们可以用两个循环分别处理两种操作:
- 对于第一种操作,遍历满足条件的k,将网格中的对应方格(A+k,B+k)设为黑色。
 - 对于第二种操作,遍历满足条件的k,将网格中的对应方格(A+k,B-k)设为黑色。
最后,根据给定的范围P、Q、R、S,输出网格中对应范围内的方格颜色。 
时间复杂度
O(N + (Q-P+1)×(S-R+1))
AC代码
#include <bits/stdc++.h>
using namespace std;
int main(void) {
    long long n, a, b;
    long long p, q, r, s;
    long long x, y;
    string str = "";
    vector<string> ans;
    cin >> n >> a >> b;
    cin >> p >> q >> r >> s;
    for (long long i = 0; i < (s - r + 1); i++) {
        str += '.';
    }
    for (long long i = 0; i < (q - p + 1); i++) {
        ans.push_back(str);
    }
    x = max(p - a, r - b);
    y = min(q - a, s - b);
    for (long long i = x; i <= y; i++) {
        ans[a + i - p][b + i - r] = '#';
    }
    x = max(p - a, b - s);
    y = min(q - a, b - r);
    for (long long i = x; i <= y; i++) {
        ans[a + i - p][b - i - r] = '#';
    }
    for (long long i = 0; i < (q - p + 1); i++) {
        cout << ans[i] << endl;
    }
    return 0;
}
                
























