B - Balala Power!

 字符串的字典序可以看作为26进制数字的大小

坑点:大数比较大小需要注意

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef int lint;
    const lint maxn = 1000020;
    const LL mod = 1e9+7;
    char str[maxn];
    lint ch[26][maxn];
    lint mmlen;
    void add( lint n,lint p ){
        while(1){
            ch[n][p]++;
            mmlen = max(mmlen,p);
            if(ch[n][p] >= 26){
                ch[n][p] -= 26;p++;
                continue;
            }
            else break;
        }
    }
    vector<lint> ve;
    LL mypow[maxn];
    void prework(){
        for(lint i = 0; i< 26;i++) ve.push_back(i);
        mypow[0] = 1;
        for(lint i = 1;i <maxn;i++) mypow[i] = mypow[i-1]*26%mod;
    }
    bool cmp(const lint a,const lint b){
        for( lint i = mmlen;i >= 0;i-- ){
            if( ch[a][i] < ch[b][i] ) return true;
            else if( ch[a][i] > ch[b][i] ) return false;
        }
        return false;
    }
    lint used[30],flag[30],res[30];
    void init(){
        memset(flag,0,sizeof(flag));
        memset(ch,0,sizeof(ch));
        memset(used,0,sizeof(used));
        memset(res,0,sizeof(res));
    }
    LL cal(){
        LL ans =  0;
        for( lint i = 0;i < 26;i++ ){
            for( lint j = 0;j <= mmlen;j++ ){
                ans = (ans + (LL)res[i]*mypow[j]%mod*ch[i][j]%mod)%mod;
            }
        }
        return ans;
    }
    int main(){
        prework();
        lint n,ccnt;
        lint ca = 0;
        while( 1 == scanf("%d",&n) ){
            printf("Case #%d: ",++ca);
            init();
            mmlen = 0;ccnt = 0;
            for( lint i = 0 ;i < n;i++ ){
                scanf("%s",str);
                lint len = strlen(str);
                if(len!= 1){
                    flag[str[0]-'a'] = 1;
                }
                for( lint j = 0;j < len;j++ ){
                    add( str[j]-'a',len-j-1 );
                    if(!used[str[j]-'a'])ccnt++;
                    used[str[j]-'a'] = 1;
                }
                mmlen = max(mmlen,len);
            }
            mmlen++;
            sort(ve.begin(),ve.end(),cmp);
            lint flag2;
            if(ccnt == 26){
                for( lint i = 0;i < 26;i++ ){
                    if(flag[ve[i]]) continue;
                    flag2 = ve[i];
                    break;
                }
            }
            lint cur = 25;
            for( lint i = ve.size()-1;i >= 0;i-- ){
                if(ccnt == 26 && flag2 == ve[i]) continue;
                res[ ve[i] ] = cur--;
            }
            LL ans = cal();
            printf("%I64d\n",ans);
        }
        return 0;
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 el-table 和 el-pagination 的组合使用,你可以 el-pagination 放置在 el-table 的外部,并通过监听 el-pagination 的页码变化事件来更新 el-table 的数据。下面是一个示例的代码: ```html <template> <div> <el-table :data="tableData" :row-key="row => row.id" :default-sort="{ prop: 'name', order: 'ascending' }" > <!-- 表格列配置 --> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> <el-pagination @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" :total="total" layout="total, sizes, prev, pager, next" ></el-pagination> </div> </template> <script> export default { data() { return { tableData: [], // 表格数据 currentPage: 1, // 当前页码 pageSize: 10, // 每页显示的条数 total: 0 // 总条数 }; }, methods: { handleCurrentChange(page) { this.currentPage = page; this.getData(); // 根据当前页码请求数据或者更新表格数据 }, getData() { // 根据当前页码和每页显示条数请求数据,并更新表格数据 // ... } }, mounted() { this.getData(); // 初始化时获取数据 } }; </script> ``` 在上述代码中,el-table 和 el-pagination 是分开放置的,通过监听 el-pagination 的 `current-change` 事件,在回调函数 `handleCurrentChange` 中更新当前页码,并调用 `getData` 方法来请求数据或者更新表格数据。 el-pagination 的属性 `current-page` 绑定到了 currentPage,`page-size` 绑定到了 pageSize,`total` 绑定到了 total,这些属性用于控制分页组件的显示和页码的切换。 通过设置 `layout` 属性,你可以自定义 el-pagination 的布局,这里使用了 "total, sizes, prev, pager, next" 布局,即显示总条数、每页显示条数选择、上一页、页码、下一页。 当执行 `handleCurrentChange` 方法时,你可以在其中根据当前页码和每页显示条数来请求数据,并更新表格数据。在初始化时,也可以调用 `getData` 方法来获取初始数据。 请根据你实际的数据请求和更新逻辑进行相应的修改和补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值