牛客练习赛88

牛客练习赛88

A活着的证据

题目

思路

恶心的细节题.

保证位数最大贪心即可,居然罚了三次时

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int read() {
	int re = 0;
	char c = getchar();
	bool negt = false;
	while(c < '0' || c > '9')
		negt |= (c == '-') , c = getchar();
	while(c >= '0' && c <= '9')
		re = (re << 1) + (re << 3) + c - '0' ,c = getchar();
	return negt ? -re : re;
}

char ans[5000010];
int main() {
	int T = read();
	while(T--) {
		int v = read() , I = read() , len = read();
		int maxlen = min(len , v + I);
		int j = -1;
		while((v > 0 || I > 0) && j < maxlen - 1) {
			++j;
			if(v >= 1 && I >= 3 && j + v + I - 4 + 1 >= maxlen) {
				--v , I -= 3;
				ans[j] = '8';
				continue;
			}
			if(v >= 1 && I >= 2 && j + v + I - 3 + 1 >= maxlen) {
				--v , I -= 2;
				ans[j] = '7';
				continue;
			}
			if(v >= 1 && I >= 1 && j + v + I - 2 + 1 >= maxlen) {
				--v , I -= 1;
				ans[j] = '6';
				continue;
			}
			if(v >= 1) {
				--v;
				ans[j] = '5';
				continue;
			}
			if(I >= 3 && j + I - 3 + 1 >= maxlen) {
				I -= 3;
				ans[j] = '3';
				continue;
			}
			if(I >= 2 && j + I - 2 + 1 >= maxlen) {
				I -= 2;
				ans[j] = '2';
				continue;
			}
			I -= 1;
			ans[j] = '1';
			continue;
		}
		ans[j + 1] = 0;
		puts(ans);
	}
	return 0;
}
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int read() {
	int re = 0;
	char c = getchar();
	bool negt = false;
	while(c < '0' || c > '9')
		negt |= (c == '-') , c = getchar();
	while(c >= '0' && c <= '9')
		re = (re << 1) + (re << 3) + c - '0' ,c = getchar();
	return negt ? -re : re;
}

char ans[5000010];
int main() {
	int T = read();
	while(T--) {
		int v = read() , I = read() , len = read();
		for(int i = 0 ; i <= len ; i++)	ans[i] = 0;
		
		for(int j = 0 ; j < len ; j++) {
			if(v > 0)
				ans[j] = '5' , --v;
			else if(I > 0)
				ans[j] = '1' , --I;
		}
		for(int j = 0 ; j < len ; j++) {
			if(ans[j] == '5') {
				if(I >= 3)
					ans[j] += 3 , I -= 3;
				else if(I >= 2)
					ans[j] += 2 , I -= 2;
				else if(I >= 1)
					ans[j] += 1 , I -= 1;
				
			} else {
				if(I >= 2)
					ans[j] += 2 , I -= 2;
				else if(I >= 1)
					ans[j] += 1 , I -= 1;
			} 
		}
		puts(ans);
	}
	return 0;
}

B寻寻觅觅寻不到

题目

思路

字符串哈希模板

代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int N = 300010;
char m[N] , c[N];
int n;
int k;

typedef unsigned long long lint;
lint Pow(lint a , int p) {
	lint res = 1;
	while(p) {
		if(p & 1)
			res = res * a;
		a = a * a;
		p >>= 1;
	}
	return res;
}

lint val[N];

int main() {
	int T;
	scanf("%d" , &T);
	while(T--) {
		scanf("%s %s %d" , &m , &c , &k);
		int len1 = strlen(m) , len2 = strlen(c);
		if(len1 != len2) {
			puts("NO");
			continue;
		}
		
		lint ha_c = 0;
		for(int i = 0 ; i < len2 ; i++)
			ha_c = ha_c * 131 + (lint)c[i];
			
		val[0] = m[0];
		for(int i = 1 ; i < len1 ; i++)
			val[i] = val[i - 1] * 131 + (lint)m[i];
		
		bool flag = false;
		for(int i = 0 ; i + k - 1 < len1 ; i++) {
			if(ha_c == val[i - 1] * Pow(131 , len1 - i ) + (val[len1 - 1] - val[i + k - 1] * Pow(131 , len1 - i  -k)) * Pow(131 , k) + (val[i + k - 1] - val[i - 1] * Pow(131 , k))) {
				flag = true;
				break;
			}
		}
		puts(flag ? "YES" : "NO");
	}
	return 0;
}

C踩不出足迹

题目

思路

大声说出来,同或是什么东西:

异或再取反

又因为 a ⊕ ¬ b = ¬ ( a ⊕ b ) a\oplus\lnot b=\lnot(a\oplus b) a¬b=¬(ab).

所以,当 m m m个数用的是同或运算时,相当于 a 1 ⊕ a 2 ⊕ ⋯ ⊕ a n a_1\oplus a_2\oplus \cdots \oplus a_n a1a2an m m m次反,又相当于取 m   m o d   2 m\bmod 2 mmod2次反,然后做完了.

代码

#include <iostream>
#include <cstdio>
using namespace std;

#define BruteForce 0
#define int ull
typedef unsigned long long ull;
ull read() {
	ull re = 0;
	char c = getchar();
	bool negt = false;
	while(c < '0' || c > '9')
		negt |= (c == '-') , c = getchar();
	while(c >= '0' && c <= '9')
		re = (re << 1) + (re << 3) + c - '0' ,c = getchar();
	return negt ? -re : re;
}

const int N = 1000010;
int n , k;
ull a[N];


#if BruteForce
ull ans;
void dfs(int x , ull now) {
	if(x == n + 1) {
		now = now & (1ull << k) - 1;
		if(now > ans)
			ans = now;
		return;
	}
	dfs(x + 1 , now ^ a[x]);
	dfs(x + 1 , now ^ a[x] ^ (1ull << k) - 1);
}

void print2(ull x) {
	char s[110];
	for(int i = k ; i >= 0 ; i--)
		s[i] = '0' + (x & 1) , x >>= 1;
	puts(s);
}
#endif

signed main() {
	n = read() , k = read();
	for(int i = 1 ; i <= n ; i++)
		a[i] = read();

#if BruteForce
	dfs(2 , a[1]);
	cout << ans;
#else
	ull sum = a[1];
	for(int i = 2 ; i <= n ; i++)
		sum ^= a[i];
	if(k < 64)
		cout << max(sum , sum ^ ((1ull << k) - 1) );
	else 
		printf("%llu" , max(sum , sum ^ (ull)-1 ));
#endif

	return 0;
}

D~F

到这里就没有再做了,听说D是什么克鲁斯卡尔重构树,没学,感觉也没必要,然后就结束了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值