Codeforces round #658
程序员文章站
2022-07-08 09:51:36
C1给出一串01字符,每次操作选中前 i 个,0和1互换且整体倒过来,问经过几次并且选择前几个可以得到目标字符串#includeusing namespace std;int main() {ios::sync_with_stdio(false);int t;cin >> t;while (t--) {int n;cin >> n;string str1;string str2;cin...
B
n堆石子,按顺序取,每次取正整数个,取到最后一个的获胜,问先手还是后手获胜。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a[100010];
int main()
{
int t;
cin >> t;
while (t--)
{
int n,ans=0;
cin>>n;
bool f=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]!=1&&ans==0)
{
ans=i;
f=1;
}
}
if(f)
{
if(ans%2) cout<<"First"<<endl;
else cout<<"Second"<<endl;
}
else
{
if(n%2) cout<<"First"<<endl;
else cout<<"Second"<<endl;
}
}
return 0;
}
这题的关键是主动权掌握在谁手里,只剩一个的时候没得选,因此第一个可以从不是1的堆里选的人掌握主动权
C1
给出一串01字符,每次操作选中前 i 个,0和1互换且整体倒过来,问经过几次并且选择前几个可以得到目标字符串
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
string str1;
string str2;
cin >> str1 >> str2;
int i, j;
i = 0;
j = n - 1;
int flag = 1;
for (i = 0; i < n; i++) {
if (str1[i] != str2[i]) {
flag = 0;
}
}
vector<int> ans;
i = 0;
j = n - 1;
while (j >= 0) {
int k = 1;
if (str2[j] == str1[0]) {
ans.push_back(1);
k = 0;
}
for (k; k < str2.size() - i; k++) {
if (str1[k] == '0') {
str1[k] = '1';
}
else {
str1[k] = '0';
}
}
reverse(str1.begin(), str1.end() - i);
ans.push_back(str2.size() - i);
i++;
j--;
}
cout << ans.size() ;
for (i = 0; i < ans.size(); i++) {
cout << ' ' << ans[i];
}
cout << endl;
}
return 0;
}
reverse是把字符串倒置
C2
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
string str1;
string str2;
cin >> str1 >> str2;
int i, j;
i = 0;
j = n - 1;
int flag = 1;
for (i = 0; i < n; i++) {
if (str1[i] != str2[i]) {
flag = 0;
}
}
vector<int> idx;
i = 0;
j = n - 1;
while (i <= j) {
if (i != j) {
idx.push_back(i);
idx.push_back(j);
}
else {
idx.push_back(i);
}
i++; j--;
}
vector<int> ans;
j = n - 1;
int cnt = 0;
while (j >= 0) {
if (str2[j] != (str1[idx[cnt] ]^ (cnt % 2))) {
ans.push_back(j+1);
}
else {
ans.push_back(1);
ans.push_back(j+1);
}
cnt++;
j--;
}
cout << ans.size() ;
for (i = 0; i < ans.size(); i++) {
cout << ' ' << ans[i];
}
cout << endl;
}
return 0;
}
本文地址:https://blog.csdn.net/qq_45792208/article/details/107526021
上一篇: 脱离产品的运营推广是在耍流氓!
下一篇: Dubbo服务分组实现举例
推荐阅读
-
Codeforces Round #266 (Div. 2) B. Wonder Room_html/css_WEB-ITnose
-
Codeforces486 D. Valid Sets(树形dp,去重技巧)
-
PHP取整函数:ceil,floor,round,intval的区别详细解析_php技巧
-
Codeforces Round #258 (Div. 2)Devu and Flowers 容斥原理_html/css_WEB-ITnose
-
PHP四舍五入、取整、round函数使用示例
-
C#使用round函数四舍五入的方法
-
天猫国际618迅速带动海外品牌增长,首小时销售增长658%
-
C#使用round函数四舍五入的方法
-
Oracle round()函数与trunc()函数区别介绍
-
JavaScript中用于四舍五入的Math.round()方法讲解