A. ABC
题目大意:
给一个由1,0组成的字符串,问你这个字符串重新排列后能不能满足:
无长度大于1的substr是回文,若不可则输出NO,反之YES。
substr的定义是:
A string a is a substring of a string b if a can be obtained from b by deletion of several (possibly, zero or all) characters from the beginning and several (possibly, zero or all) characters from the end.
也即从一个字符串中截取出的一段连续字符序列。
题目做法:
如果长度大于等于3的话。
你可以想,10后无论接1还是接0都会使得条件不满足。
如果是11或00,那都不需要等到长度大于等于3就不可以了。
所以可以得出一个结论长度大于等于3一定会使得条件不满足。
AC代码:
#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
//#define int long long
using namespace std;
const int mode = 1e9 + 7;
const int maxn = 2e5 + 10;
void solve(){
int n;
string s;
cin >> n >> s;
if(s.length() >= 3){
cout << "NO" << '\n';
return ;
}
if(s.length() == 1){
cout << "YES" << '\n';
return ;
}
if(s.length() == 2 && s[0] != s[1]){
cout << "YES" << '\n';
return ;
}
cout << "NO" << '\n';
}
signed main(){
fast int casen = 1;
cin >> casen;
while(casen--) solve();
}
B. Rebellion
题目大意:
给你一个数组,该数组由0或1组成,你可以进行操作,每次操作选取两个点,吧其中一个点的值加到另外一个点上,然后把加完的点从数组中移除。
问你最小进行多少次操作后能让数组变得非递减。
题目做法:
把1都往后放,形成的数组最优,从后往前扫,0的位置放1。
AC代码:
#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//#define int long long
#define ll long long
//Cara's templet version 1.18
//2024/2/20 20:32 UTC+8
//Tell u what when the time I see someone
//Even that I can't see the clear of one's face
//I still can feel sth different
using namespace std;
const int maxn=2e5+10;
void solve()
{
int n;
cin>>n;
int ar[n];
int c1=0,op=0;
for(int i=0;i<n;i++)
{
cin>>ar[i];
if(ar[i]) c1++;
}
for(int i=n-1;i>=0&&c1;i--)
{
if(ar[i]==0) op++,c1--;
else c1--;
//cout<<i<<" "<<c1<<" "<<op<<'\n';
}
cout<<op<<'\n';
}
signed main()
{
fast int casen=1;
cin>>casen;
while(casen--) solve();
}
A. Stable Arrangement of Rooks
题目大意:
他定义了两种放置,棋子间互相攻击不到的是good,任意一棋子移动一格也互相攻击不到的称为stable,棋子攻击范围是同行同列。
给你k个棋子,n * n的棋盘,问你有无stable的放置,没有输出 -1,有的话输出棋盘放置。
题目做法:
对角线,贪心放,放的了就可以,放一个空隔一个。
AC代码:
#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
//#define int long long
using namespace std;
const int mode = 1e9 + 7;
const int maxn = 2e5 + 10;
void solve(){
int n, k, ppx = 0, ppy = 0;
cin >> n >> k;
// cout << ceil(double(n) / 2) <<'\n';
if(ceil(double(n) / 2) < k){
cout << "-1" << '\n';
return ;
}
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(i == ppx && j == ppy && k > 0){
cout << "R";
k--;
ppx += 2;
ppy += 2;
}
else cout << ".";
}
cout << '\n';
}
}
signed main(){
fast int casen = 1;
cin >> casen;
while(casen--) solve();
}