组合数zxy

$ C_n^m zxy $

 ​​​​​​UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283)

Event Time Announcer


 

快速幂,写挂了。

看到这个题的第一眼,我就知道我输了。zxy拥有一套强大的代码模板。他只需要输出power(a,b)即可。 他有这么nb,怎么不把线段树平衡树红黑树手写队列栈双端队列大小根堆树状数组可持久化并查集可持久化线段树梅滕斯函树全部写到他的模板里呢?。

最终去qoj上找了我快速幂的代码,发现没写if(b&1)。

4分54秒。A。

#include<bits/stdc++.h>
#include<iostream>
#include<ctime>
#include<cstdlib> 
using namespace std;
int getrand(int min,int max){
    return (rand()%(max-min+1))+min;
}
long long power(long long a,long long b){
	if(a==0)return 0;
	long long ans=1;
	while(b){
		if(b&1)ans=ans*a;
		a=a*a;
		b>>=1;
	}
	return ans;
} 
int main(){
	srand(time(0));
	int a,b;
	cin>>a>>b;
	long long ans=power(a,b);
	cout<<ans<<endl; 
	return 0; 
}

不会TLE的。

#include<bits/stdc++.h>
using namespace std;
int a[100005],n,q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	cin>>q;
	int node,k,x;
	while(q--){
		cin>>node;
		if(node==1){
			cin>>k>>x;
			a[k]=x;
		}else{
			cin>>k;
			cout<<a[k]<<endl; 
		}
	}
	return 0; 
}

 

要用string。数成对出现的0的个数,再用总位数减去。

#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
	cin>>s;
	long long ans=s.size();
	bool flag=0;
	for(int i=0;i<s.size();i++){
		if(flag){
			if(s[i]=='0')ans--;
			flag=0;
		}else{
			if(s[i]=='0')flag=1;
		}
	}
	cout<<ans<<endl;
	return 0; 
}

顺便提一句,这场的C和D用了翻译。金山词霸。我不建议去挂梯子用更好的翻译,很麻烦,没必要。一般英语有初二水平的OIer都可以借助国内大众的翻译平台看懂题目(除非qq邮箱自带翻译的那种太垃圾的)。要多练习自己的英语读题能力。如果用词霸这种翻译出来都不能看懂,就应该反思自己了。 最好要做到整场都不用翻译。

本来呢,放的是图片,应当给出翻译。但我实在懒得了。不太想再复述题面了。上面有比赛链接,您可以自行找到题目进行翻译。我就不把词霸翻译放出来恶心您了。(金山词霸的翻译怎么了?您可以试试)

好吧,这一看就是括号序列。

这时候,肥不拉几的zxy拖着他的脸皮过来了。

 

我自闭了。

 

 

 

然后我又开始仔细思考。许久,又遇到了一些问题。

 

是的,我懂了。

我们并不需要把字母和括号弄成一个东西。也许,我最开始想要把他们弄在一起,是觉得删除操作不方便。但我想通了。

我们准备好一个栈,和一个用于记录字母现在是否存在的数组,我们叫他dp数组。dp我这里直接开了两百,我并不记得ascii的编号了。 当然,您想用map也可以。

我们对这个表达式进行扫描。如果s[i]=='(',压入栈中;如果s[i]是字母,且目前这个字母不存在,则压入栈中,并对他进行标记;若存在,无疑高桥先生会晕倒。如果s[i]==')',我们便进行消除操作。在栈中不断弹出字母,直到碰上一个'(',最后把他也弹出。弹出字母时,要记得清除标记。最后遍历完没有问题,直接输出yes。

#include<bits/stdc++.h>
#include<stack>
using namespace std;
stack<char>s;
string fckzxy;
int dp[200];
int main(){
	cin>>fckzxy;
	for(int i=0;i<fckzxy.size();i++){
		if(fckzxy[i]=='(') s.push('(');
		else{
			if(fckzxy[i]==')'){
				while(s.top()!='('){
					dp[(int)s.top()]--;
					s.pop();
				}
				s.pop();
			}else{
				if(!dp[(int)fckzxy[i]]){
					s.push(fckzxy[i]);
					dp[(int)fckzxy[i]]++;
				}else{
					cout<<"No"<<endl;
					return 0;
				}
			}
		}
	}
	cout<<"Yes"<<endl;
	return 0; 
}

这道模拟,无论怎么说,作为D,还是很水的。以前D都考些什么?都是要用上算法的。

zex听说我切D了,高兴极了。他之前骂着我usaco铜组爆零太离谱了,但我觉得那题很难的。反正我不会。这个D,要是没过,才是真离谱。

 

e。我AT毕竟从来都是灰名,从来没有像cf那样注重名利。很多人说的,什么新号有加持,可以上大分,打垃了不好上分什么的,在我这个AT号上从来就是浮云一样的存在。现在如果有人问我我最喜欢的号,我会说,我的AT号。

而我以前是只切A的人,心情好切B。到现在D也可以了,可能确实比较令人惊喜吧。


$C_n^m,zxy$ 

15min。

在搞笑吗。

大家不要学zxy。要像我一样,一遍就做对。

 

however,abc四题快乐。

 

 

<think>嗯,用户想要在Python中生成包含字母和数字的随机字符串。让我先回忆一下相关知识。根据提供的引用,有几个方法可以实现。比如,引用2中提到使用random.choices()或random.choice()结合string模块的字符集。还有引用3和4提到可以组合不同的字符集,包括字母、数字和特殊符号,不过用户现在只需要字母和数字。 首先,我需要确认用户的需求是只要字母和数字,还是要包含其他字符。根据问题描述,用户明确说“包含字母和数字”,所以可以排除特殊符号。然后,我需要考虑Python版本的问题,因为不同的版本可能有不同的方法。比如,引用2提到random.choices()在Python 3.6及以上可用,而random.choice()可能更适合旧版本,但可能存在重复字符的问题。 接下来,用户可能需要一个简单且高效的方法。使用string.ascii_letters和string.digits的组合应该可以满足需求。然后,选择生成方式,比如用random.choices()指定k参数来生成指定长度的字符串,或者用循环+random.choice()。需要注意的是,random.choices()允许重复字符,而random.sample()(如引用3所示)则不会重复,但需要确保样本数量不超过字符集长度。例如,如果生成8位字符串,而字符集有62个字符(26大写+26小写+10数字),那么用random.sample()不会有问题,但如果生成更长的字符串就会报错。 另外,用户可能关心代码的简洁性和可读性。引用2中的方法比较简洁,直接拼接字符集,然后生成字符串。而引用3和4中的例子可能包含不必要的部分,比如引用4中的列表推导式可以简化为使用string模块中的现有常量。 还要考虑安全性问题,如果用户需要用于密码生成,可能需要使用secrets模块而不是random,因为secrets更安全。不过用户的问题中没有提到安全性,可能只是需要一个随机字符串,不一定需要高安全性。 总结下来,步骤应该是:导入必要的模块(random和string),定义字符集,使用合适的方法生成字符串。根据Python版本推荐不同的方法,并说明各自的优缺点。例如,在Python3.6+推荐random.choices(),而在旧版本中使用random.choice()循环。同时提到避免重复可以使用random.sample(),但要注意长度限制。 可能还需要提醒用户关于字符集的选择,比如是否区分大小写。string.ascii_letters已经包含大小写字母,所以生成的字符串会有大小写混合,而如果只需要小写或大写,可以调整字符集。此外,生成的长度可以根据用户需求调整k参数。 最后,确保代码示例正确,并解释每一部分的作用,帮助用户理解。比如,解释string.ascii_letters和string.digits的含义,以及join方法的作用。可能还需要比较不同方法的优缺点,比如choices允许重复,sample不允许,但样本长度受限。</think>在Python中生成包含字母和数字的随机字符串,主要有以下方法(支持Python 3.6+): ### 方法一:使用`random.choices()`(推荐) ```python import random import string characters = string.ascii_letters + string.digits # 合并大小写字母+数字 random_str = ''.join(random.choices(characters, k=8)) # 生成8位随机字符串 print(random_str) # 示例输出:A3b9ZxY7 ``` - **优点**:代码简洁,支持任意长度[^2] - **注意**:允许重复字符 ### 方法二:使用`random.sample()`(无重复字符) ```python random_str = ''.join(random.sample(characters, 8)) # 必须满足k<=len(characters) ``` - **要求**:字符串长度不得超过字符集总数(62个字符时最大长度62)[^3] ### 方法三:使用`secrets`模块(加密安全) ```python import secrets random_str = ''.join(secrets.choice(characters) for _ in range(8)) # 安全随机生成 ``` - **适用场景**:需要高安全性的密码生成 ### 关键步骤说明 1. **字符集构建**:通过`string.ascii_letters`(52字母)和`string.digits`(10数字)合并 2. **随机选择**:根据需求选择`random.choices`(允许重复)或`random.sample`(禁止重复) 3. **结果拼接**:使用`join()`将随机选出的字符列表转为字符串 ### 扩展建议 - 若需要包含特殊符号,可添加`string.punctuation`[^4] - 要控制大小写比例,可调整字符集中字母的占比[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值