首页 > 其他分享 >牛客周赛 Round 2 A~D

牛客周赛 Round 2 A~D

时间:2023-07-10 23:46:12浏览次数:33  
标签:周赛 int ll long else 牛客 include mos Round

A

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1e5+10;
string s;
string p;
void solve(){
	cin>>s>>p;
	int n=s.length();
	s+=s;
	int num=0;
	for(int i=0;i<n;i++){
		if(s.substr(i,p.length())==p)
		num++;
	}
	cout<<num;
    
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}

B:dp

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1e5+10;
char s[N];
int n;
int a[N];
ll f[N];
void solve(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>s+1;
	for(int i=2;i<=n;i++){
		if(s[i]==s[i-1]){
			f[i]=f[i-1];
			continue;
		}
		f[i]=max(f[i-1],f[i-2]+a[i-1]+a[i]);
	} 
	cout<<f[n];
    
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}

C:模拟

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=18;
int a[N];
void solve(){
    int n;
    cin>>n;
    memset(a,0,sizeof a);
    while(n--){
    	int o,b;
    	cin>>o>>b;
    	if(o==0){
    		int x=max(a[b],a[b+1]);
    		a[b]=x+3;
    		a[b+1]=x+1;
		}
		else if(o==90){
			int x=max(a[b+1],a[b+2]);
			if(x>=a[b]+1){
				a[b]=x+1;
				a[b+1]=x+1;
				a[b+2]=x+1;
			}
			else{
				x=a[b];
				a[b]=x+2;
				a[b+1]=x+2;
				a[b+2]=x+2;
			}
		}
		else if(o==180){
			if(a[b]>=a[b+1]+3){
				int x=a[b];
				a[b]=x+1;
				a[b+1]=x+1;
			}
			else{
				int x=a[b+1];
				a[b]=x+3;
				a[b+1]=x+3;
			}
		}
		else{
			int x=max(a[b],a[b+1]);
			x=max(x,a[b+2]);
			a[b]=x+1;
			a[b+1]=x+1;
			a[b+2]=x+2;
		}
	}
	for(int i=1;i<=8;i++) cout<<a[i]<<" ";
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}

D:前缀和+二分(注意这里会爆int全部换成long long,d题没过就是因为这个,一开始就把前缀和设为long long一直是58%qwq)

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <utility>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll n,h,k,q;
typedef struct{
	ll h,v,sum;
}node;
node mos[N];
ll s[N];
bool cmp(node a,node b){
	return a.sum<b.sum;
}
ll get_sum(ll x,ll y){
	if(x%4==0){
		return (x/4*3-1)*y;
	}
	else if(x%4==3){
		return (x/4*3+1)*y;
	}
	else{
		return x/4*3*y;
	}
}
void solve(){
	cin>>n>>h>>k;
	for(int i=1;i<=n;i++){
		cin>>mos[i].h>>mos[i].v;
		mos[i].sum=get_sum(mos[i].h,mos[i].v);
	}
	sort(mos+1,mos+1+n,cmp);
	for(int i=1;i<=n;i++) s[i]=s[i-1]+mos[i].sum;
	cin>>q;
	while(q--){
		ll x;
		cin>>x;
		x=h+x*k;
		int l=0,r=n;
		while(l<r){
			int mid=l+r+1>>1;
			if(s[mid]>=x)  r=mid-1;
			else l=mid; 
		}
		cout<<l<<" ";
	}
}
int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
}

 

标签:周赛,int,ll,long,else,牛客,include,mos,Round
From: https://www.cnblogs.com/liyiyang/p/17542683.html

相关文章

  • LeetCode -- 352场周赛
     思路:动态规划首先计算原数组的条件数组,及所有的元素都%2f[i]表示从零到i中选,且以第i项为结尾的最长奇偶子数组。classSolution{public:intlongestAlternatingSubarray(vector<int>&nums,intthreshold){intn=nums.size();vector<int>d(n......
  • round 函数
    round函数要求四舍五入的情况,用round函数就很方便。一、用法1.基本用法对于小数而言,round()函数仅仅保留到整数位,仅对小数点后一位进行四舍五入。比如:round(1.5)=2.000000,round(1.57)=2.0000002.保留小数用法如果想要保留小数位数可以先乘后除以达到效果举个栗子:#......
  • 内置函数round
    1'''2内置函数round对参数进行四舍五入/3语法:round(number,ndigits)4其中,number是要进行四舍五入的数字,而ndigits是可选参数,表示保留小数的位数,默认为0。5number:要进行四舍五入的数字。6ndigits:保留小数的位数。如果省略该参数,则默认为0,即对整数......
  • 牛客练习赛113 D 小红的数组操作(hard version)
    题目要求求出最小的总代价使得平均数为整数,转换式子可得实际就是求出a,b使得(a*x-b*y+sum)%n==0且a*p+b*q要最小,平均值的为sum/n,因此对sum进行操作使其成为n的倍数即可(a*x-b*y+sum)%n==0=>((a*x+sum)%n-b*y%n)%n==0因为(a*x+sum)%n<n,b*y%n<n,因此要想二者差求余数为0一定为(......
  • Codeforces Round 883 (Div. 3)
    CodeforcesRound883(Div.3)A.RudolphandCuttheRope:题意:有一个糖果由n个绳子悬挂,告诉每一个绳子位于的高度和宽度,问至少间断几根才可以让candy回到groud。思路:统计有几个宽度小于高度的绳子即可voidsolve(){intn;intnum=0;cin>>n;for(inti=1;i......
  • Codeforces Round 875 (Div. 2)(D)
    CodeforcesRound875(Div.2)(D)D(思维)这个题意是给你两个数组,\(a\)和\(b\),我们需要找到这样的二元组\((i,j)\)满足\(a_i\timesa_j=b_i+b_j\),问一共有多少组满足以上条件的二元组题目还告诉我们数组里面的数字都是不大于\(n\)的,那么因为两个数相乘的范围一定是\(1-n\)的,那......
  • CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!) A-E
    比赛链接A代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;boolsolve(){intn,m;cin>>n>>m;llsuma=0,sumb=0;for(inti=1,x;i<=n;i++)cin>>x,suma+=x;for(inti=1,......
  • Codeforces Round 882 (Div. 2)
    Preface这场现场打的,顶着第二天一早起来军训硬打到一点这场题目都是JOJO确实好评,但刚开始的评测姬爆让人很难顶啊,因为这个B题挂了一发没法第一时间改导致这场罚时裂开了这场写完D还有快50min,然后看一眼榜E出的人很少但是F好多人过然后就去想F,由于军训生物钟的缘故当时好困好困......
  • Codeforces Round 882 (Div. 2) C. Vampiric Powers, anyone?
    由题目观察可得,a[m+1]=a[i]^...a[m],,结合异或的性质a^b^a=b,可得如果在末尾添加一个a[m+1],a[m+1]会和末尾几个抵消掉,求得i~k这一段的异或和,k<m,因此通过该操作实际上我就可以求得所有长度连续区间的异或和,求其最大值,n=1e5+10,如果暴力求解肯定会超时,我们观察发现a[i]的范围为0~2^8......
  • Codeforces Round 882 (Div. 2) A-D
    ATheManwhobecameaGod 假设sum为omigaabs(a[i]-a[i-1])1<=i<=n 只有设置断点的时候,假设设置在t和t-1之间thevalue才会减少abs(a[t]-a[t-1]) 所以把差距最大的几个地方分段就行了#include<bits/stdc++.h>usingnamespacestd;#definemaxn400100#defi......