真个人生都是灰色了,大早上的让hack一道题…
A. Array with Odd Sum
水题,直接看代码吧。
#include<iostream>
using namespace std;
const int N = 2500;
int a[N];
int t,n;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
int num=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]&1)
num++;
}
if(num&1)
puts("YES");
else
{
if(num==0||num==n)
puts("NO");
else
puts("YES");
}
}
return 0;
}
B. Food Buying
水题,直接看代码。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 10000;
int main()
{
int T; cin>>T;
while(T--)
{
ll n; cin>>n;
ll sum=0;
while(n>=10)
{
int a=n/10;
sum=sum+a*10;
n=n%10+a;
}
cout<<sum+n<<endl;
}
return 0;
}
C. Yet Another Walking Robot
题意:寻找环,而且这个环的R-L+1最小。
思路:暴力map+pair即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1010;
typedef pair<int,int> pii;
int main()
{
int t;
cin>>t;
string s;
while(t--)
{
ll n;
cin>>n>>s;
map<pii,int> mp;
int l=0,r=n+10;
pii p={0,0};
for(int i=0;i<n;i++)
{
if(s[i]=='L') p.first--;
else if(s[i]=='R') p.first++;
else if (s[i]=='U') p.second++;
else p.second--;
if(((mp[p]!=0||(p.first==0&&p.second==0))&&(i-mp[p])<(r-l)))
{
l=mp[p];
r=i+1;
}
mp[p]=i+1;
}
if(r-l<=n) cout<<l+1<<' '<<r<<endl;
else cout<<-1<<endl;
}
return 0;
}
D. Fight with Monsters
题意:给n个怪兽,你和你的小伙伴攻击力分别是a,b,你有k次机会让你的小伙伴跳过该轮拔枪,你如果是最后一击就你杀人数+1,否则就不加1,问你最多杀多少人.
思路:贪心问题,给自己留最后一滴血。(有没有感觉和博弈论很像,给对手留最后一下…)
直接看代码吧,还是比较简单的.
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int s[N];
int main()
{
int n,a,b,k;
cin>>n>>a>>b>>k;
for(int i=0;i<n;i++)
{
cin>>s[i];
s[i]=((s[i]-1)%(a+b))/a;
}
sort(s,s+n);
int i;
for(i=0;i<n;i++)
{
k=k-s[i];
if(k<0)
break;
}
cout<<i<<endl;
return 0;
}
E1. String Coloring (easy version)
题意:
给出一个字符串,现在给每个位置进行染色,至多用两种颜色。
然后可以执行任意次操作:交换两个相邻的且颜色不相同的字符。
问执行任意次操作后,得到的字符串是否能有序,如果能,给出一种染色方案。
思路:直接看大佬博客吧!真的是太厉害了。附:大佬博客
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n,i;
string s,ans="";
cin>>n>>s;
char mx='a',pmx='a';
for(i=0;i<n;i++)
{
if(s[i]>=mx)
{
mx=max(mx,s[i]);
ans+="0";
}
else
{
if(pmx<=s[i])
{
ans+="1";
pmx=max(pmx,s[i]);
}
else
{
cout<<"NO\n";
return;
}
}
}
cout<<"YES\n"<<ans;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
solve();
return 0;
}
E2. String Coloring (hard version)
题意:同E1一样,不过求的是最少用几种颜色可以把这条串换成有序的.
思路:根据E1里面大佬的博客思路三,自己修改一下得出下面的代码,其实思路也很简单,就是求有几条非严格递增的序列.
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n,i,done=0,cur=0;
char mx;
string s;
cin>>n>>s;
vector<int> ans(n,0);
while(done<n)
{
mx='a';
cur++;
for(i=0;i<n;i++)
{
if(!ans[i]&&s[i]>=mx)
{
mx=s[i];
done++;
ans[i]=cur;
}
}
}
cout<<cur<<'\n'<<ans[0];
for(i=1;i<n;i++)
cout<<' '<<ans[i];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
solve();
return 0;
}
F题懒得补了,还是留点时间学DP。