1 条题解

  • 0
    @ 2025-8-24 22:32:53

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Liweiang
    OIer:2020.11.30-2022.10.29|PhOer:2023.7-?

    搬运于2025-08-24 22:32:53,当前版本为作者最后更新于2021-08-01 19:01:06,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    原题:P7765 [COCI 2011/2012 #5] KRIŽALJKA


    思路:

    1.输入

    定义两个 char 类型字符串,用 scanf 读入 (注:scanf 遇到空格、回车和 Tab 键都会认为输入结束)。

    char a[100001],b[100001];
    scanf("%s",a);
    scanf("%s",b);
    

    2.记录

    可以用两层 for 循环。如果找到第一个相同字母出现的位置以及字母,记录下,然后跳出第二层循环。

    for(int i=la-1;i>=0;i--){
    		for(int j=0;j<lb;j++){
    			if(a[i]==b[j]){
    				num_a=i;
    				num_b=j;//记录相同字母的位置
    				ta=a[i];
    				tb=b[j];//记录相同字母 
    				break;
    			}
    		}
    	}
    

    这里需要注意:外层循环对  A\ {A} 数组的循环需要从后往前找,因为如果找到  ai\ {a_i} 等于  bj\ {b_j} ,只跳出了第二层 for 循环,此时的  ai\ {a_i} 不是第一个出现的。

    3.输出

    外层循环  b\ {b} 数组的每一位,如果  j\ {j} 等于  numb\ {num_b} ,则输出单词  A\ {A} ,反之则循环  a\ {a} 数组。如果  i\ {i} 等于  numa\ {num_a} ,则输出  b\ {b} 数组的元素,反之则输出 . . 字符。

    for(int j=0;j<lb;j++){
    		if(j==num_b){
    			for(int k=0;k<=la;k++){
    				cout<<a[k];
    			}
    		}
    		else for(int i=0;i<la;i++){
    			if(i!=num_a){
    				cout<<".";
    			}
    			else if(i==num_a){
    				cout<<b[j];
    			}
    		}
    		cout<<endl;
    	}
    

    最后附上完整  O(n2)\ {O(n^2)} 代码:

    #include<bits/stdc++.h>
    using namespace std;
    char a[100001],b[100001];
    int main() 
    {
    	scanf("%s",a);
    	scanf("%s",b);
    	int la=strlen(a),lb=strlen(b),num_a,num_b;
    	char ta,tb;
    	for(int i=la-1;i>=0;i--){
    		for(int j=0;j<lb;j++){
    			if(a[i]==b[j]){
    				num_a=i;
    				num_b=j;//记录相同字母的位置
    				ta=a[i];
    				tb=b[j];//记录相同字母 
    				break;
    			}
    		}
    	}
    	for(int j=0;j<lb;j++){
    		if(j==num_b){
    			for(int k=0;k<=la;k++){
    				cout<<a[k];
    			}
    		}
    		else for(int i=0;i<la;i++){
    			if(i!=num_a){
    				cout<<".";
    			}
    			else if(i==num_a){
    				cout<<b[j];
    			}
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    这是本蒟蒻的第二篇题解,如有不当之处请指出。只会用n方的代码做了。/kk

    • 1

    信息

    ID
    7049
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者