NOIP2009解题报告(C/C++)(潜伏者)(Hankson的趣味题)(最优贸易)(靶形数独)

2017.3.4的校内赛

这一次我们进行了NOIP2009的真题测试,算是我这几次以来最好的一次,这归功于第三题的思路较为简单和第二题的暴力能够过1/2的点。但是这不意味着这一套题很简单,与之想法,这套题稍有不慎就会有过失性失分,比如第一题容易看漏条件。下面我们来看看:

1.潜伏者

解题报告:

这道题利用筒的思路,搞一个“字典”,将一个字母的序号(ASCII码减去’a’)作为下标,将与之相对应的字母的序号存储到数组中就可以了,需要注意的是,除了不能A数组中的对应关系必须是一对一的以外,B数组也是这样。
下面来看看代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=100;
const int M=26;
char s1[N+5],s2[N+5],s3[N+5];
int len1,len2,len3;
int map[M+1];
int main()
{
    freopen("spy.in","r",stdin);
    freopen("spy.out","w",stdout);
    memset(map,-1,sizeof(map));
    scanf("%s",s1);
    scanf("%s",s2);
    scanf("%s",s3);
    len1=strlen(s1),len2=strlen(s2),len3=strlen(s3);
    for(int i=0;i<=len1-1;i++)
    {
        if(map[s1[i]-'A']!=-1&&map[s1[i]-'A']!=s2[i]-'A')//没有一个下标对应两个字母的情况 
        {
            printf("Failed");
            return 0;
        }
        map[s1[i]-'A']=s2[i]-'A';
    }
    for(int i=0;i<=24;i++)
    for(int j=i+1;j<=25;j++)
    if(map[i]==map[j])//没有两个字母对应一个下标的情况 
    {
        printf("Failed");
        return 0;
    }
    for(int i=0;i<=25;i++)//26个字母要集齐 
    if(map[i]==-1)
    {
        printf("Failed");
        return 0;
    }
    for(int i=0;i<=len3-1;i++)
    printf("%c",map[s3[i]-'A']+
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值