AtCoder Grand Contest 031 A--C

A - Colorful Subsequence

/**
题意:给定目标串S(由小写字母构成),统计取出S的字符组成的不同串的个数;
define :不同串:
              1 :不同位置的相同字符
              2 :一个串不存在相同的字符
思路:统计每个小写字母的数量,考虑每个字母存在 取1个与不取 的情况,累乘即可
最后去除空的情况
*/

#include<bits/stdc++.h>
#define ll long long 
using namespace std;

const ll mod = 1e9+7;
const int maxn = 1e5+7;
ll sum[27];

int main (){
    int n;cin>>n;
    string s;cin>>s;
    memset(sum,0,sizeof(sum));
    for(int i=0;i<n;i++) sum[s[i]-'a']++;
    ll ans=1;
    for(int i=0;i<=26;i++) ans=ans*(sum[i]+1)%mod;
    ans=(ans-1+mod)%mod;
    cout<<ans<<endl;
    return 0;
}


B - Reversi

/**
题意:从给定数组中,选择两个相同的数字,可将相同数字之间的数字变为和该相同数字一样,该操作可以进行不定次数;
思路:考虑存在交叉的情况,记录相邻相等数的位置,利用鸽巢定理直接进行dp即可;
*/

#include<bits/stdc++.h>
#define ll long long 
using namespace std;

const ll mod = 1e9+7;
const int maxn = 5e5+7;

int pre[maxn],pos[maxn],a[maxn];;
ll dp[maxn];

int main (){
    int n;cin>>n;
    for(int i=0;i<n*2;i++) pre[i]=0;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) pre[i]=pos[a[i]],pos[a[i]]=i;
    dp[0]=1;
    for(int i=1;i<=n;i++){
        dp[i]=dp[i-1];
        if(pre[i]!=0&&pre[i]!=i-1) dp[i]=(dp[i]+dp[pre[i]])%mod;
    }
    cout<<dp[n]<<endl;
    return 0;
}


C - Differ by 1 Bit

/**
题意:构造首尾已知,中间相邻二进制1的个数相差等于1的数组;
思路:构造,先考虑不满足的情况,分析后直接对a,b进行拆分即可
*/

#include<bits/stdc++.h>
#define ll long long
using namespace std;

std::vector<int> dfs(int n,int a,int b){
    if(n==1) return {a,b};
    b^=a;
    int step=-1;
    for(int i=0;i<n;i++) if(b&(1<<i)) {step=i;break;}
    std::vector<int> p=dfs(n-1,0,1);
    std::vector<int> q=dfs(n-1,1,(b^(1<<step))>>1);
    std::vector<int> vec;
    for(int i=0;i<(int)p.size();i++) {
        int a=p[i]>>step,b=p[i]&((1<<step)-1);
        vec.push_back((a<<(step+1))+b);
    }
    for(int i=0;i<(int)q.size();i++) {
        int a=q[i]>>step,b=q[i]&((1<<step)-1);
        vec.push_back((a<<(step+1))+(1<<step)+b);
    }
    return vec;

}
int main (){
    int n,a,b;cin>>n>>a>>b;
    if(__builtin_parity(a^b)==0) {
        puts("NO");
        return 0;
    }
    std::vector<int> vec = dfs(n,a,b);
    puts("YES");
    for(auto x:vec) cout<<x<<endl;
    return 0;
}


 

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值