B - Das Blinkenlights
签到题,求一下最小公倍数即可;
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,m,t;
cin>>n>>m>>t;
int u=n*m/__gcd(n,m);
if(u>t)cout<<"no"<<endl;
else cout<<"yes"<<endl;
return 0;
}
G - Left and Right
思维题,给定一个序列,代表向左向右,求字典序最小的解
给序列开头加个R,然后给每个r都扫一下r后面连着的L的个数,然后用公式输出以下就行
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+8;
int dp[N];
int main(){
int n,m,t,xt;
int key;
string s;
cin>>key>>s;
s='R'+s;
xt=0;
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='R'){
dp[i]=xt;
xt=0;
}
else xt++;
}
int cnt=0;
for(int i=0;i<s.size();i++){
if(s[i]=='R'){
cout<<dp[i]+cnt+1<<endl;
for(int j=1;j<=dp[i];j++){
cout<<cnt+1+dp[i]-j<<endl;
}
cnt=dp[i]+cnt+1;
}
}
return 0;
}
模拟:K - Run-Length Encoding, Run!
模拟
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n,m,t;
char key;
string s;
cin>>key>>s;
int cnt=0;
char st;int xt=0;
if(key=='E'){
for(int i=0;i<s.size();i++){
if(i==0){
cnt=1;
}
else {
if(s[i]==s[i-1]){
cnt++;
}
else {
cout<<s[i-1]<<cnt;
cnt=1;
}
}
}
cout<<s[s.size()-1]<<cnt<<endl;
}
else if(key=='D'){
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
xt=xt*10+s[i]-'0';
}
else if(i==0)
{
st=s[i];
}
else {
while(xt--){
cout<<st;
}
xt=0;
st=s[i];
}
}
while(xt--)cout<<st;
cout<<endl;
}
return 0;
}