Educational Codeforces Round 12 B C题、

B. Shopping

题意:n个顾客,每个顾客要买m个物品,商场总共有k个物品,看hint就只知道pos(x)怎么算了,对于每一个Aij在k个物品中找到Aij的位置、然后加上这个位置对于的数值,然后再将这个Aij放在物品首端去、

思路:直接暴力

PS:开始写二分找写残了、半小时都在调,说实话我也够傻,想想也知道这题暴力肯定可以过,还硬要去调试二分

 1 #include<cmath>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<cstdio>
 5 using namespace std;
 6 int num[105];
 7 int main()
 8 {
 9     int n,m,k;
10     scanf("%d%d%d",&n,&m,&k);
11     for(int i=1;i<=k;++i)
12         scanf("%d",&num[i]);
13     int sum=0;
14     for(int i=1;i<=n;++i){
15         int ans;
16         for(int j=1;j<=m;++j){
17             scanf("%d",&ans);
18             for(int c=1;c<=k;++c){
19                 if(num[c]==ans){
20                     sum+=c;    
21                     for(int l=c;l>1;--l)
22                         num[l]=num[l-1];
23                     num[1]=ans;
24                     break;
25                 }
26             }
27             //printf("%d\n",cor);
28         //    for(int c=1;c<=k;++c)
29         //        printf("%d ",num[c]);
30         //        printf("\n");
31         }
32     }    
33     printf("%d\n",sum);
34     return 0;
35 }

C. Simple Strings

题意:就是要找一个简单串,简单串中相邻的字符都不相等,现在给你一个串,要你在最少的操作次数上修改这个串然后输出

思路:也就是要找所给串中连续相等的字符,进行最小次操作满足简单串的定义,对于连续两个字符aa我们只需要改其中一个就可以了,对于aaa我们只需要改第二个字符就可以了,aaaa呢?就需要改2个字符了,位置改1,3或者2,4都行,aaaaa呢?同样两次但改的位置只能是2,4,那么就可以断定,每两个连续且相等的字符,我们只需要对其后一个进行修改,使其相对于自己两边都不相等就可以了。

PS:CF的测试数据都过了,hack时间也过了,如果有错的话希望指出

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 const int qq=300000;
 5 char s[qq],s2[qq];
 6 int main()
 7 {
 8     scanf("%s",s);
 9     int len=strlen(s);
10     for(int i=0;i<len-1;++i){
11         if(s[i]==s[i+1]){
12             for(char j='a';j<='z';++j)
13                 if(j!=s[i]&&j!=s[i+2]){
14                     s[i+1]=j;
15                     break;
16                 }        
17         }
18     }
19     printf("%s",s);
20     return 0;
21 }

 

posted @ 2016-04-21 14:49  我不萌、我要高冷  阅读(172)  评论(0编辑  收藏  举报