关闭

2017 计蒜之道 初赛 第一场 A题B题

标签: 2017 计蒜之道 初赛 第一场暴力kmp
608人阅读 评论(4) 收藏 举报
分类:

 A. 阿里的新游戏 
通过率: 81.04 %通过人数: 1090分值: 500
 B. 阿里天池的新任务(简单)
通过率: 61.89 %通过人数: 588分值: 1000
 C. 阿里天池的新任务(中等)
通过率: 3.24 %通过人数: 9分值: 1500
 D. 阿里天池的新任务(困难)
通过率: 4.6 %通过人数: 4


A:直接暴力所有情况

#include<stdio.h>
#include<string.h>
int a[200][200];
int d=100;
int main()
{
	int n,m;
	while(~scanf("%d%d",&n,&m))
	{
		memset(a,0,sizeof(a));
		for(int i=0;i<n;i++)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			a[d+x][d+y]=1;
		}
		for(int i=0;i<m;i++)
		{
			int x,y;
			scanf("%d%d",&x,&y);
		}
		int ans=0;
		//内圈 
		int t=1;
		if(a[d+t][d-t]==1&&a[d+t][d]==1&&a[d+t][d+t]==1) //有 
			ans++;
		if(a[d-t][d-t]==1&&a[d-t][d]==1&&a[d-t][d+t]==1) //左 
			ans++;
		if(a[d+t][d+t]==1&&a[d][d+t]==1&&a[d-t][d+t]==1) //shang 
			ans++;
		if(a[d+t][d-t]==1&&a[d][d-t]==1&&a[d-t][d-t]==1) 
			ans++;
			
		//中 
		t=2;
		if(a[d+t][d-t]==1&&a[d+t][d]==1&&a[d+t][d+t]==1) 
			ans++;
		if(a[d-t][d-t]==1&&a[d-t][d]==1&&a[d-t][d+t]==1) //左 
			ans++;
		if(a[d+t][d+t]==1&&a[d][d+t]==1&&a[d-t][d+t]==1) //shang 
			ans++;
		if(a[d+t][d-t]==1&&a[d][d-t]==1&&a[d-t][d-t]==1) 
			ans++;
			
		//外圈 
		 t=3;
		if(a[d+t][d-t]==1&&a[d+t][d]==1&&a[d+t][d+t]==1) 
			ans++;
		if(a[d-t][d-t]==1&&a[d-t][d]==1&&a[d-t][d+t]==1) //左 
			ans++;
		if(a[d+t][d+t]==1&&a[d][d+t]==1&&a[d-t][d+t]==1) //shang 
			ans++;
		if(a[d+t][d-t]==1&&a[d][d-t]==1&&a[d-t][d-t]==1) 
			ans++;
		
		
		//轴
		if(a[d+1][d]==1&&a[d+2][d]==1&&a[d+3][d]==1) 
			ans++;
		if(a[d-1][d]==1&&a[d-2][d]==1&&a[d-3][d]==1)  //左 
			ans++;
		if(a[d][d+1]==1&&a[d][d+2]==1&&a[d][d+3]==1) //shang 
			ans++;
		if(a[d][d-1]==1&&a[d][d-2]==1&&a[d][d-3]==1) 
			ans++;
		printf("%d\n",ans);
	}
	return 0;
}


B:kmp算法字符串匹配

#include<stdio.h>
#include<string.h>
typedef long long ll;
ll n,a,b,L,R,ans;
char ts[1010101];
int f[1001000];
char make(int wi)
{
	if(L<=wi&&wi<=R)
	{
		if(wi%2==0)
			return 'A';
		else
			return 'T';
	}
	else
	{
		if(wi%2==0)
			return 'G';
		else
			return 'C';
	}
}
void getfail(char p[],int f[]) //字符串p自我匹配   
{  
    int len=strlen(p);
    f[0]=f[1]=0;
    for(int i=1;i<len;i++)
    {
        int j=f[i];
        while(j&&p[i]!=p[j])  
            j=f[j];
        if(p[i]==p[j])  
            f[i+1]=j+1;//多匹配到了一个字符  
        else   
            f[i+1]=0;//该字符配不上
    }   
}  
int find(char*P, int*f)//p去匹配字符串T   
{    
    int m = strlen(P);    
    getfail(P, f);  //得出部分匹配表 
    int j = 0;  //短串的下标 
    for(int i = 0; i < n; i++) //长串下标
    {
        while(j && P[j] != make((b+i*a)%n))//突然失配了
        {
            j = f[j];  //j往回退,直到0或者上一个字符相等的位置
        }
        if(P[j] == make((b+i*a)%n))
        {
            j++;  //匹配了一个字符,j++   
        }    
        if(j == m)  //短串匹配到头了
        {
        	ans++;
            //return i - m + 1;//返回成功匹配的起点字符位置
        }
    }
    return -1;    
}   


int main()
{

	while(~scanf("%lld%lld%lld%lld%lld",&n,&a,&b,&L,&R))
	{
		scanf("%s",ts);
		ans=0;
		find( ts, f);
		
		printf("%lld\n",ans);
	}
	return 0;
}






1
0
查看评论

2017计蒜之道初赛第一场B

题目链接:https://nanti.jisuanke.com/t/15500 阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次。 首先,定义一个...
  • baidu_35643793
  • baidu_35643793
  • 2017-05-21 14:14
  • 141

[最大密度子图] 2017 计蒜之道 初赛 第三场. 腾讯狼人杀

边带权的最大密度子图带权的最大密度子图有两种做法。1. 二分答案 xx,然后判断 ∑wi,j−xk(2n−k)\sum w_{i,j} -xk(2n-k) 的最大值是否大于零 ∑wi,j−xk(2n−k)\sum w_{i,j} -xk(2n-k) 这东西可以拆成 ∑(wi,j+2x)−k(2n...
  • Coldef
  • Coldef
  • 2017-12-19 21:35
  • 149

2017 计蒜之道 初赛 第一场

比赛链接:https://www.jisuanke.com/contest/726 A.就是判断每个线段是否有小红的三个点,每个线段只有三个哦! 非常气,循环写成[0,6)了,改的时候没改完 #include #include #include #include using namespa...
  • huatian5
  • huatian5
  • 2017-05-20 21:49
  • 265

2017计蒜之道 初赛 第一场

2017计蒜之道 预赛 第一场A16种情况手动暴力即可#include <bits/stdc++.h> #define nmax 7 using namespace std;int mp[nmax][nmax]; int n,m; int cnt = 0; void ge() { ...
  • pengwill97
  • pengwill97
  • 2017-05-20 21:46
  • 242

2017计蒜之道初赛第一场

比赛链接 A、阿里的新游戏 傻逼题,枚举即可。 #include #include #include bool k[10][10]={0}; int ans=0; void d(int a,int b,int c,int d,int e,int f){ if(k[a][b]&&...
  • qq_21436421
  • qq_21436421
  • 2017-05-20 21:20
  • 250

计蒜之道2016 总决赛

虽然说我已经身败名裂了,但还是很感谢蒜头。   今年复赛打了rank60+(去年好像是爆零了,不过今年确实简单些),结果前面有的人不去把机会让给了我。   蒜头还特别土豪,帮买了机票,开了五星级酒店(里面各种高端设施,找拖鞋还找了很久),把选手都当成爷,伺候得很好,唯一办挫的事大概就是最后一天选...
  • squee_spoon
  • squee_spoon
  • 2016-08-07 15:53
  • 898

2017计蒜之道程序设计大赛初赛第一场题解

代码有空再附完全。。。 比赛链接 题目可以在比赛的题目列表中查看 阿里的新游戏 命题人:镇高红 这道题有很多种解法,其中一种是,枚举所有“成三”的可能,判断该线段上的三个点是否都是小红的。注意,“成三”的三个棋子必须在一条线段上,这个线段必须是原棋盘中存在的。 #include #i...
  • bat67
  • bat67
  • 2017-05-20 21:34
  • 429

2016 计蒜之道 初赛 第一场

青云的服务器密钥 题目链接: https://nanti.jisuanke.com/t/11162 解题思路: 我们分类讨论一下: 1、所有字母都没有出现过: 直接输出0即可。 2、只有一种字母: 这时,当字母数cnt>=2,对应的π值应该为cnt-1,比如 “aaaaa",π1=...
  • piaocoder
  • piaocoder
  • 2016-09-02 15:54
  • 276

2017 计蒜之道 初赛 第一场 B题(阿里天池的新任务)

阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次。 首先,定义一个序列 ww: \displaystyle w_{i} = \beg...
  • MM__1997
  • MM__1997
  • 2017-05-21 10:29
  • 442

2017 计蒜之道 初赛 第一场 A. 阿里的新游戏

一道枚举题目, 枚举所有的组合,然后根据这些组合判断棋子在不在同一条线上#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace ...
  • qq_37919136
  • qq_37919136
  • 2017-05-21 00:00
  • 81
    个人资料
    • 访问:103698次
    • 积分:3019
    • 等级:
    • 排名:第13770名
    • 原创:197篇
    • 转载:9篇
    • 译文:0篇
    • 评论:33条
    博客专栏
    最新评论