又一次测试题
程序员文章站
2022-04-27 08:52:48
...
循环移动
给出一个字符串 S 与 N 个操作。每个操作用三元组(L, R, K)进行描述:操作将字 符串第 L 个到第 R 个位置构成的子串循环移动 K 次。一次循环移动就是将字符 串最后的这个字符移动到第一位,其余的字符顺次后移。
例如,对于字符串 abacaba,操作(L=3, R=6, K=1)后得到的字符串即为 abbacaa。 求出在 N 个操作后得到的字符串。
这个题模拟就行,第一次交的时候,调试的没保存
太尴尬了,机房的编译器有问题。。
总是保存不下来。。。
#include<cstdio>
#include<cstring>
using namespace std;
char a[31000],b[31000];
int n;
int main(){
freopen("cyclic.in","r",stdin);
freopen("cyclic.out","w",stdout);
gets(a+1);
scanf("%d",&n);
while(n--){
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
k%=(y-x+1);
for(int i=x;i<=y;i++)
b[i]=a[i];
for(int i=x;i<=y;i++)
a[(i+k)<=y?(i+k):x+i+k-y-1]=b[i];
}
puts(a+1);
阅读计划
阅暑假到了,Rick 制定了一个长达 M 天的阅读计划。他一共有 N 本书,从 1 至 N 进行标号;Rick 将它们从上至下摞成一堆。他每天都会读一本书,假设他要读 编号为 X 的书,他会按照以下步骤:
1.将这本书上方的所有书搬起来
2.将这本书拿出来
3.将搬起来的书摞回去
4.看完后把这本书放
每本书都会有各自的重量,Rick 不希望搬起太过重的书。于是他希望能重新安 排这 N 本书的顺序,使得读完 M 本书之后,搬书的重量之和最小。
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,w[510],t[1100],a[510],ans,f[510],tot;
int main(){
freopen("book.in","r",stdin);
freopen("book.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&w[i]);
for(int i=1;i<=m;i++) {
scanf("%d",&t[i]);
if(!f[t[i]]) a[++tot]=t[i],f[t[i]]=1;
}
for(int i=1;i<=m;i++)
{
int s=0,j=1;
for(;j<=n;j++)
if(a[j]!=t[i])
s+=w[a[j]];
else break;
ans+=s;
int tmp=a[j];
for(int k=j-1;k>=1;k--)a[k+1]=a[k];
a[1]=tmp;
}
printf("%d",ans);
}
Gob 和 Michael 常在一起打乒乓球。他们是这样决定比赛的输赢的:比赛由若干 大局组成;谁最先赢下 s 大局谁就获得比赛的胜利;在每一大局中,谁先得 t 分 就获得本大局的胜利。
在一次比赛中,他们只记录了比赛中的每一分是谁得的,但忘记了记录 s 和 t。 现在给出比赛的每一分的得分情况,求出所有可能的 s 和 t。Gob 保证,得分表 是完整的,也就是在比赛恰好在最后一人,得到最后一分后结束。
枚举一个t,然后胡乱搞就行了。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
struct st{
int s,t;
}a[110000];
bool cmp(const st&a,const st&b){
return a.s<b.s||a.s==b.s&&a.t<b.t;
}
int s[3][110000],t1,t2,tot1,tot2,tot,q;
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
scanf("%d",&n);
for(int x,i=1;i<=n;i++) {
scanf("%d",&x);
s[1][i]=s[1][i-1];
s[2][i]=s[2][i-1];
s[x][i]++;
}
for(int t=1;t<=n;t++){
q=0;
tot1=0,tot2=0;
while(1){
t1=lower_bound(s[1],s[1]+n+1,s[1][q]+t)-s[1];
t2=lower_bound(s[2],s[2]+n+1,s[2][q]+t)-s[2];
if(t1>n&&t2>n) break;
if(t1<t2) tot1++;
else tot2++;
q=min(t1,t2);
if(q==n&&(tot1>tot2&&t1==n||tot1<tot2&&t2==n)) {
a[++tot].s=max(tot1,tot2),a[tot].t=t;break;
}
}
}
sort(a+1,a+tot+1,cmp);
printf("%d\n",tot);
for(int i=1;i<=tot;i++) printf("%d %d\n",a[i].s,a[i].t);
}
上一篇: 又一次线上OOM排查经过
下一篇: Django之时钟插件的使用