游游画U
模拟就行
#include <iostream>
using namespace std;
int main(){
int n;cin>>n;
int c=1;
for(int i=1;i<=n*4;i++){
if(i<=n*3){
for(int j=1;j<=n*4;j++ ){
if(j<=n || j>3*n)cout<<'*';
else cout<<'.';
}
}
else {
for(int j=1;j<=4*n;j++){
if(j<=c || j>4*n-c)cout<<'.';
else if(j>n+c&& j<=4*n-c-n)cout<<'.';
else cout<<'*';
}
c++;
}
cout<<endl;
}
}
游游的数组染色
利用两个map 可以分别找出 不同颜色的个数 然后遍历其中一个就行
#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
#define int long long
using namespace std;
signed main(){
int n;cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
string s;cin>>s;
map<int,int> a,b;
for(int i=0;i<n;i++){
if(s[i]=='B'){
b[v[i]]++;
}
else a[v[i]]++;
}
int ans=0;
for(auto t:a){
auto [x,y]=t;
if(!b.count(x))continue;
ans=ans+b[x]*y;
}
cout<<ans<<endl;
}
游游的交换字符
根据题意 是一定有解 说明 1的个数和0的个数一定是相差<2;说明 最后出现的情况 只会是010101 或者10101010 所以 找到其中为0的个数 如果0的个数大 说明是从下标0 开始 否则是从下标1开始, 如果相等 那么就分别从 下标0 和下标1 开始 取最小的值
#include <iostream>
#include <string>
#include <queue>
#define int long long
using namespace std;
signed main(){
string s;cin>>s;
int ans=1e15;
int a=0;
int n=s.size();
for(int i=1;i<n;i++){
if(s[i]=='0')a++;
}
if(n-a!=a){
int res=0;
int pre=a>n-a?0:1;
for(int i=0;i<n;i++){
if(s[i]=='0'){
res+=abs(i-pre);
pre+=2;
}
}
ans=min(ans,res);
}
else {
int pre=0;
int res=0;
for(int i=0;i<n;i++){
if(s[i]=='0'){
res+=abs(i-pre);
pre+=2;
}
}
ans=min(ans,res);
pre=1;res=0;
for(int i=0;i<n;i++){
if(s[i]=='0'){
res+=abs(i-pre);
pre+=2;
}
}
ans=min(res,ans);
}
cout<<ans<<endl;
}
游游的9的倍数
一般这种题多半是dp ,首先考虑dp的集合 当%9 只会有0~8的可能 所以 可以写成前i个数 %9==j的方案数 考虑dp方程,dp[i][j] 对于第i个可以取可以不取 所以dp[i][j]+=dp[i-1][j]; 当取的时候,那么 dp[i][(j10+s[i]-‘0’)%9]+=dp[i-1][j]; 因为j10+s[i]-'0’就是取了当前数 之后%9 ==j 的方案数 所以最后 答案就是 dp[n][0]-1
#include <iostream>
#include <cstring>
#define int long long
using namespace std;
const int N=2e5+10,mod=1e9+7;
char s[N];
int dp[N][9];
signed main(){
cin>>s+1;
int n=strlen(s+1);
dp[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<9;j++){
dp[i][j]+=dp[i-1][j];
dp[i][(j*10+s[i]-'0')%9]+=dp[i-1][j];
dp[i][j]%=mod;
dp[i][(j*10+s[i]-'0')%9]%=mod;
}
}
cout<<(dp[n][0]-1+mod)%mod<<endl;
}