暑假刷题第23天--8/6

3748. 递增子串 - AcWing题库

cpp 复制代码
#include<iostream>
#include<string>
const int N=200005;
int a[N];
using namespace std;
int main(){
	int t;
	cin>>t;
	for(int q=1;q<=t;q++){
		int n;
		cin>>n;
		string s;
		cin>>s;
		int cnt=1;
		a[1]=1;
		for(int i=2;i<=n;i++){
			if(s[i-1]>s[i-2])cnt++,a[i]=cnt;
			else {cnt=1;
				a[i]=cnt;
				
			}
		}
		printf("Case #%d: ",q);
		for(int i=1;i<=n;i++){
			cout<<a[i]<<' ';
		}
		cout<<endl;
	}
	return 0;
} 

3325. Kick_Start - AcWing题库

cpp 复制代码
#include<iostream>
#include<string>
const int N=200005;
int a[N];
using namespace std;
int main(){
	int t;
	cin>>t;
	for(int q=1;q<=t;q++){
		string s;
		cin>>s;
		int cnt=0;
		a[s.size()]=0;
		for(int i=s.size()-1;i>=0;i--){
			if(i>=4&&s[i]=='T'&&s[i-1]=='R'&&s[i-2]=='A'&&s[i-3]=='T'&&s[i-4]=='S'){
				cnt++;
				a[i]=cnt;
			}
			else {
				a[i]=a[i+1];
			}
		}
		int ans=0;
		for(int i=0;i<s.size()-3;i++){
			if(s[i]=='K'&&s[i+1]=='I'&&s[i+2]=='C'&&s[i+3]=='K'){
				ans+=a[i];
			}
		}
		printf("Case #%d: ",q);
		cout<<ans<<endl;
	}
	return 0;
} 

Problem - 1817A - Codeforces(需要学习)

cpp 复制代码
#include<iostream>
#include<string>
const int N=200005;
int a[N];
int p[N];
using namespace std;
void solve(){
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=2;i<=n-1;i++){
		int cnt=0;
		if(a[i]>=a[i+1]&&a[i-1]>=a[i])cnt=1;
		p[i]=p[i-1]+cnt;
	}
	while(q--){
		int l,r;
		cin>>l>>r;
		if(l==r){
			cout<<1<<endl;
		}
		else {
			cout<<(r-l+1)-(p[r-1]-p[l])<<"\n";
		}
	}
}
int main(){
	int t=1;
	while(t--){
		solve();
	}
} 

Problem - 1811E - Codeforces(进制转换--需要学习)

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
const int N=200005;
int a[N];
int p[N];
using namespace std;
void solve(){
	long long n;
	cin>>n;
	vector<long long>ans;
	while(n>0){
		ans.push_back(n%9);
		n/=9;
	}
	for(int i=ans.size()-1;i>=0;i--){
		if(ans[i]<4)cout<<ans[i];
		else cout<<ans[i]+1;
	}
	cout<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

Problem - C - Codeforces(构造)

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
const int N=200005;
int a[N];
int b[N];
using namespace std;
void solve(){
	int n;
	cin>>n;
	for(int i=1;i<=n-1;i++){
		cin>>a[i];
		b[i]=-1;
	}
	
	for(int i=1;i<=n-1;i++){
		if(b[i]!=-1){
			if(a[i]<a[i+1]){
				b[i+1]=a[i];
			}
			else {
				b[i+1]=a[i+1];
			}
			continue;
		}
		if(a[i]<a[i+1]){
			b[i]=a[i];
			b[i+1]=a[i];
		}
		else {
			b[i]=a[i];
		}
	}
	b[n]=a[n-1];
	for(int i=1;i<=n;i++){
		cout<<b[i]<<' ';
	}
	cout<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

Problem - D - Codeforces(需要学习)

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
#define ll long long
const int N=200005;
int a[N];
int b[N];
long long f[46];
using namespace std;
void solve(){
	ll n,x,y;
	cin>>n>>x>>y;
	ll left =y-1,right =f[n+1]-y;
	ll up=x-1,down=f[n]-x;
	bool ok=true;
	ll now=0;
	for(ll i=n;i>=1;i--){
		if(~now){
			if(left>=f[i])left-=f[i];
			else if(right>=f[i])right-=f[i];
			else{
				ok=false;
				break;
			}
		}
		else{
			if(up>=f[i])up-=f[i];
			else if(down>=f[i])down-=f[i];
			else{
				ok = false;
				break;
			}
		}
		now=~now;
	}
	if(ok==false)cout<<"NO"<<endl;
	else cout<<"YES"<<endl;
}
int main(){
	f[0]=1,f[1]=1;
	for(int i=2;i<=45;i++){
		f[i]=f[i-1]+f[i-2];
	}
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

Problem - D - Codeforces

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
#include<cstring>
#include<queue>
#define ll long long
const int N=200005;
int a[N];
int b[N];
int d[27],x[27];
using namespace std;
void solve(){
	int n;
	cin>>n;
	string s;
	cin>>s;
	int ans=0;
	string cnt;
	int f=1;
	for(int i=0;i<n-1;i++){
		if(i>=1&&s[i-1]==s[i+1]){
			f=1;
			continue;
		}
		string p;
		p+=s[i];
		p+=s[i+1];
		if(i==0||cnt!=p||f==1){
			f=0;
			ans++;
			cnt=p;
		}
	}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

Problem - C2 - Codeforces

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
#include<cstring>
#include<queue>
#define ll long long
const int N=200005;
int a[N];
int b[N];
int d[27],x[27];
using namespace std;
void solve(){
	priority_queue<int,vector<int>,less<int> >q;
	int n;
	cin>>n;
	long long ans=0;
	for(int i=0;i<n;i++){
		int x;
		cin>>x;
		if(x==0){
			if(!q.empty()){
				ans+=q.top();
			q.pop();
			}
			
		}
		else {
			q.push(x);
		}
	}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

C-游游的数值距离_牛客周赛 Round 6 (nowcoder.com)

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
#include<cstring>
#include<queue>
#define ll long long
const int N=200005;
ll a[N];

using namespace std;
void solve(){
	ll n;
	cin>>n;
	ll ans1,ans2,p=1e16+6;
	a[1]=1;
	for(int i=2;i<=20;i++){
		a[i]=a[i-1]*i;
	}
	for(int x=1;x<=20;x++){
        if(a[x]==1&&x!=2){
            if(p>abs((-n))){
            ans1=x,ans2=3;
                p=n;
             }
            continue;
        }
        ll y=n/(a[x]-1);
        if(y==0)y++;
		if(p>abs((a[x]-1)*y-n)&&x!=2&&y!=2){
            ans1=x,ans2=y;
            p=abs((a[x]-1)*y-n);
        }
        y++;
        if(p>abs((a[x]-1)*y-n)&&x!=2&&y!=2){
            ans1=x,ans2=y;
            p=abs((a[x]-1)*y-n);
        }
	}
    cout<<ans1<<' '<<ans2<<endl;
}
int main(){
	int t=1;
	//cin>>t;
	while(t--){
		solve();
	}
} 
相关推荐
ShineWinsu1 小时前
对于C++:类和对象的解析—下(第二部分)
c++·面试·笔试·对象··工作·stati
2013092416271 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告
人工智能·算法
如何原谅奋力过但无声1 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串
算法·leetcode
BHXDML2 小时前
第七章:类与对象(c++)
开发语言·c++
玄冥剑尊2 小时前
贪心算法进阶
算法·贪心算法
玄冥剑尊2 小时前
贪心算法深化 I
算法·贪心算法
52Hz1182 小时前
力扣73.矩阵置零、54.螺旋矩阵、48.旋转图像
python·算法·leetcode·矩阵
BHXDML3 小时前
第一章:线性回归& 逻辑回归
算法·逻辑回归·线性回归
yyf198905253 小时前
C++ 跨平台开发的挑战与应对策略
c++
iAkuya3 小时前
(leetcode)力扣100 二叉搜索树种第K小的元素(中序遍历||记录子树的节点数)
算法·leetcode·职场和发展