真個人生都是灰色了,大早上的讓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。