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 ",cor); 28 // for(int c=1;c<=k;++c) 29 // printf("%d ",num[c]); 30 // printf(" "); 31 } 32 } 33 printf("%d ",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 }