CodeForces
来源:互联网 发布:盐枪 淘宝 编辑:程序博客网 时间:2024/06/18 15:41
题目大意:
首先,给你两个字符串s,t,然后s里面有’?’,t里面没有,现在就是问你给s里的这些’?’赋什么值,才能让s里这些字母有一种排序可以让t尽量多的出现在s里面。
分析:
如果我没理解错题意的话,应该就是给t里面各个字母出现的次数记个数,然后把’?’按比例赋值,使得能组合出来的t尽可能多就好了。
代码:
#include<bits/stdc++.h>#define maxn 1000500#define inf 0x3f3f3f3fusing namespace std;char s[maxn],t[maxn];int num=0;int num_s[30]={0},num_t[30]={0},appear[30]={0};struct point{ int time; int pow;}a[30];int main(){ scanf("%s%s",s,t); int temp=strlen(s); for(int i=0;i<temp;i++) { if(s[i]=='?')num++; else num_s[s[i]-'a']++; } temp=strlen(t); for(int i=0;i<temp;i++) { num_t[t[i]-'a']++; } for(int i=0;i<30;i++) { if(num_t[i]==0) { a[i].pow=inf; continue; } a[i].pow=num_s[i]/num_t[i]; a[i].time=num_s[i]%num_t[i]; } //for(int i=0;i<26;i++)printf("%d ",a[i].time); while(num--) { int m=0; for(int i=0;i<26;i++) { if(a[i].pow<a[m].pow||a[i].pow==a[m].pow&&a[i].time<a[m].time)m=i; } a[m].time++; appear[m]++; if(a[m].time==num_t[m]) { a[m].pow++;a[m].time=0; } } temp=strlen(s); int now=0; //for(int i=0;i<26;i++)printf("%d ",appear[i]); for(int i=0;i<temp;i++) { if(s[i]=='?') { while(appear[now]==0)now++; s[i]=(char)now+'a'; appear[now]--; } printf("%c",s[i]); }}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- radio或者checkbox
- 防止SQL注入的若干笔记
- 访问修饰符
- submit自动提交按钮
- hyperledger fabric 1.0环境搭建出错记录
- CodeForces
- hdu 1873
- 通过URL下载图片并压缩
- .windbg-k*实例分析(查看调用栈分析)
- HDOJ HDU 1141 Factstone Benchmark
- 信号及信号处理
- 练习1:打印华氏温度与摄氏温度对照表
- 2.面向对象
- [AS尝龟]Recyclerview的OnCreatViewHolder报错:java.lang.IllegalStateException