A - chmod
思路:按题意模拟,字符串拆数字,数字转二进制,然后按需求输出即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int t;
cin >> t;
while(t--) {
char nn;
for (int j = 1; j <= 3; j++) {
cin >> nn;
string s;
int n = nn-'0';
while (n) {
if (n & 1) s = '1' + s;
else s = '0' + s;
n >>= 1;
}
while (s.length() < 3) s = '0' + s;
if (s[0] == '1') cout << 'r';
else cout << '-';
if (s[1] == '1') cout << 'w';
else cout << '-';
if (s[2] == '1') cout << 'x';
else cout << '-';
}cout << endl;
}
return 0;
}
B - Expression Matrix
思路:(总共就36种情况,大不了手敲) 太累了不能选择手敲,而且伤眼睛。
贪心思路:数字只能有11和1,11*1 比 11+1 要优,但不能出现11*11的情况
在此基础之上,分出三种情况:
1、长宽都是偶数:四周都是1,中间横纵 * 和 1 交错输出即可
2、长宽一奇一偶:以长奇宽偶的情况举例,四周都是1,中间先全部都是 1 和 * 交替,这时可以发现出现了 11*11 的情况,这时在出现这一情况的行将一个 * 换成 + 就可以了
3、长宽都是奇数:在上一种情况下更进一步,行和列都会出现 11*11 的情况,这时以对角线的路径将 * 换成 + 效率最高,如果 长宽不相等 则继续在最后继续换 * 为 + 即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int main(){
cin>>n>>m;
if(n%2 && m%2){ //俩鸡
char crr[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==1 || i==n) crr[i][j]='1';
else if(i!=1 && i!=n && (j==1 || j==m)) crr[i][j]='1';
else if(i!=1 && i!=n && !(j==1 || j==m)){
if(i%2){
if(j%2) crr[i][j]='*';
else crr[i][j]='1';
}
else{
if(j%2) crr[i][j]='1';
else crr[i][j]='*';
}
}
}
}
if(n==m){
for(int i=3;i<=n-2;i+=2){
crr[i][i]='+';
}
}
else if(n<m){
for(int i=3;i<=n-2;i+=2){
crr[i][i]='+';
}
for(int i=n-2;i<m;i++){
if(crr[n-2][i]=='*') crr[n-2][i]='+';
}
}
else if(n>m){
for(int i=3;i<=m-2;i+=2){
crr[i][i]='+';
}
for(int i=m-2;i<n;i++){
if(crr[i][m-2]=='*') crr[i][m-2]='+';
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<crr[i][j];
}cout<<'\n';
}
}
else if(n%2==0 && m%2==0){ //俩藕
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==1 || i==n) cout<<'1';
else if(i!=1 && i!=n && (j==1 || j==m)) cout<<'1';
else if(i!=1 && i!=n && !(j==1 || j==m)){
if(i%2){
if(j%2) cout<<'1';
else cout<<'*';
}
else{
if(j%2) cout<<'*';
else cout<<'1';
}
}
}cout<<'\n';
}
}
else if(n%2==0 && m%2){ //藕鸡
for(int i=1;i<=n;i++){
bool flag = 1;
for(int j=1;j<=m;j++){
if(i==1 || i==n) cout<<'1';
else if(i!=1 && i!=n && (j==1 || j==m)) cout<<'1';
else if(i!=1 && i!=n && !(j==1 || j==m)){
if(i%2){
if(j%2 && flag) flag=0,cout<<'+';
else if(j%2 && !flag) cout<<'*';
else cout<<'1';
}
else{
if(j%2) cout<<'1';
else cout<<'*';
}
}
}cout<<'\n';
}
}
else if(n%2 && m%2==0){ //鸡藕
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==1 || i==n) cout<<'1';
else if(i!=1 && i!=n && (j==1 || j==m)) cout<<'1';
else if(i!=1 && i!=n && !(j==1 || j==m)){
if(i%2){
if(i==3 && j%2) cout<<'+';
else if(i!=3 && j%2) cout<<'*';
else cout<<'1';
}
else{
if(j%2) cout<<'1';
else cout<<'*';
}
}
}cout<<'\n';
}
}
return 0;
}
F - Try a try, AC is OK
思路: 按位与 操作只能将数变小,题目又允许重复使用数字,所以输出最大数即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
int ma = 0;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
if(x > ma)ma = x;
}
cout << ma << endl;
}
return 0;
}
G - Disappearing Number
思路:以消失的数为9为例,此时我们可以发现就是9进制转10进制的问题,推广到其他情况,将数字的每一位数与 消失的数x 比较,若比x大则该为数减一,随后进行9进制转10进制的操作,注意0也算在自然数中,ans初始值要设成1,最后输出即可
AC代码:
#include <iostream>
#include <set>
#include<algorithm>
#include<cmath>
#include<math.h>
#include<vector>
using namespace std;
#define int long long
int qpow(int power,int base) {
int res = 1;
while(base) {
if(base & 1) {
res *= power;
}
power*= power;
base >>=1;
}
return res;
}
signed main() {
int t;
cin >> t;
while(t--) {
string s;
int n;
cin>>s>>n;
int ans=0;
for(int i=0;i<s.size();i++){
if(s[i]-'0'>=n){
ans+=(s[i]-'0'-1)*qpow(9,s.size()-i-1);
}
else{
ans+=(s[i]-'0')*qpow(9,s.size()-i-1);
}
}
cout<<ans+1<<endl;
}
return 0;
}
L - Chess
思路:从奇数看起,奇数一定取二进制就行了,因为二进制下所有的LNC数都是奇数,而后手永远只能拿到偶数,所以先手必胜
再来看偶数,通过几次手推可以发现,从1开始枚举i, 第一个该偶数不能整除的i 即为答案,可以发现在i进制下,该偶数本身就是自己的LNC数,先手直接取走即可
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n;
cin >> n;
while(n--) {
int x;
cin >> x;
int i;
for (i = 2; i<= x; i++) {
if(x % i != 0) break;
}cout << i << endl;
}
return 0;
}
M - Window Decoration
思路:初始ans=点数*2,随后判断各点之间距离,重合的面积-2,相距为1的面积-0.5
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
vector<PII>b;
signed main() {
int n;
cin >> n;
set<PII>a;
for (int i = 1; i <= n; i++) {
int x,y;
cin >> x >> y;
a.insert({x,y});
}double sum = 2*a.size();
for (auto x : a) {
b.push_back(x);
}
for (int i = 0; i < b.size(); i++) {
for (int j = 0; j < i; j++) {
if(b[i].first == b[j].first && abs(b[i].second-b[j].second) == 1) {
sum-=0.5;
}
else if(b[i].second == b[j].second && abs(b[i].first - b[j].first) == 1) sum-=0.5;
}
}
cout << sum;
return 0;
}