codeforces 1296 题解(更新中)
Posted asurudo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces 1296 题解(更新中)相关的知识,希望对你有一定的参考价值。
codeforces 1296 题解
A. Array with Odd Sum
想要数组加和为奇数,可以从数组长度是奇数还是偶数着手
- 若数组长度为偶数,则数组全奇或全偶必定不能构造满足题目要求的数列
- 若数组长度为奇数,则数组全偶必定不能构造满足题目要求的数列
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define _for(i,a,b) for(int i = (a);i < b;i ++)
#define _rep(i,a,b) for(int i = (a);i > b;i --)
#define INF 0x3f3f3f3f
#define ZHUO 11100000007
#define MOD 1000000007
#define MIKUNUM 39
#define pb push_back
#define debug() printf("Miku Check OK!
")
#define maxn 3503
#define X first
#define Y second
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
//全て odd と even
int subedeodd = 1,subedeeven = 1;
_for(i,0,n)
{
int tmp;
cin >> tmp;
if(tmp&0x1)
subedeeven = 0;
else
subedeodd = 0;
}
if( ((!(n&0x1))&&(subedeeven||subedeodd))
|| ((n&0x1) && subedeeven))
printf("NO
");
else
printf("YES
");
}
return 0;
}
B. Food Buying
原谅我不懂 (cashback) 的含义...但从题目理解去模拟即可,每次得到的钱再加上去然后再滚一遍
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define _for(i,a,b) for(int i = (a);i < b;i ++)
#define _rep(i,a,b) for(int i = (a);i > b;i --)
#define INF 0x3f3f3f3f
#define ZHUO 11100000007
#define MOD 1000000007
#define MIKUNUM 39
#define pb push_back
#define debug() printf("Miku Check OK!
")
#define maxn 3503
#define X first
#define Y second
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)
{
int x;
cin >> x;
int rnt = 0;
while(x>=10)
{
int tmp = x-x%10;
rnt += tmp;
x -= tmp;
x += tmp/10;
}
printf("%d
",rnt+x);
}
return 0;
}
C. Yet Another Walking Robot
题目说的挺花哨,翻译翻译,把问题转化一下,就是在字符串中找一最小子串使得能够恰好抵消。什么叫恰好抵消?(L) 能和 (R) 抵消,(U) 能和 (D) 抵消,也就是字符串里 (L) 和 (R) 的数量相等, (U) 和 (D) 数量相等即可。
光从字符串角度想不好想,我们考虑一下这个机器人怎么算是能恰好抵消——很显然,如果这个机器人走到了之前走到的位置,也就是它绕了个圈,那就是能够恰好抵消,这个圈就是我们应该删掉的部分。
记录当前位置,存到 (map) 里,(first) 记录到过的坐标,(second) 记录在哪儿到过的,每次到达的位置就去 (map) 里找找,能找到说明有个圈,看看能不能更新答案,然后把这个圈的碰撞点的 (second) 更新为当前位置。
时间复杂度 (O(nlogn))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define _for(i,a,b) for(int i = (a);i < b;i ++)
#define _rep(i,a,b) for(int i = (a);i > b;i --)
#define INF 0x3f3f3f3f
#define ZHUO 11100000007
#define MOD 1000000007
#define MIKUNUM 39
#define pb push_back
#define debug() printf("Miku Check OK!
")
#define maxn 3503
#define X first
#define Y second
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--)
{
int n;
string s;
cin >> n >> s;
map<pair<int,int>,int> mp;
int ans = INF;
int anst,aned;
int x = 0, y = 0;
mp[{0,0}] = -1;
_for(i,0,s.size())
{
if(s[i]=='L')
x --;
else if(s[i]=='R')
x ++;
else if(s[i]=='U')
y ++;
else
y --;
auto iter = mp.find({x,y});
if(iter!=mp.end() && ans > i-iter->second)
{
ans = i-iter->second;
anst = iter->second+2;
aned = i+1;
}
mp[{x,y}] = i;
}
if(ans==INF)
printf("-1
");
else
printf("%d %d
",anst,aned);
}
return 0;
}
以上是关于codeforces 1296 题解(更新中)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 1296E2. String Coloring (hard version)
[Codeforces Round #617 (Div. 3)] 题解 A,B,C,D,E1,E2,F