HolidayPlan

前言

寒假也不要颓废哦,跟着 LightDirection 一起学习吧!

Day1

复习高精度。

luogu p1601

#include<iostream>
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
void zero(){
	if(a.size()>b.size()){
		int temp=a.size()-b.size();
		for(int i=1;i<=temp;i++){
			b.insert(0,"0");
		} 
	}else if(a.size()<b.size()){
		int temp=b.size()-a.size();
		for(int i=1;i<=temp;i++){
			a.insert(0,"0");
		} 
	}
}
void calc(){
	std::string res;
	int last=0;
	for(int i=a.size()-1;i>=0;i--){
		int temp=toNum(a[i])+toNum(b[i]);
		temp+=last;
		int tar=temp-temp%10;
		res.insert(0,std::to_string(temp%10));
		tar/=10;
		last=tar;
	}
	if(last!=0){
		res.insert(0,std::to_string(last));
	}
	std::cout<<res;
}
int main(){
	std::cin>>a>>b;
	zero();
	calc();
}

luogu p2142

#include<iostream>
#include<cmath> 
bool hasSigned=false;
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
void zero(){
	if(a.size()>b.size()){
		int temp=a.size()-b.size();
		for(int i=1;i<=temp;i++){
			b.insert(0,"0");
		}
	}else if(a.size()<b.size()){
		int temp=b.size()-a.size();
		for(int i=1;i<=temp;i++){
			a.insert(0,"0");
		}
	}
	if(a<b){
		hasSigned=true;
		//交换两个字符串 
		std::string copy=a;
		std::string copy2=b;
		a=copy2,b=copy;
	}
}
void calc(){
	std::string res;
	int last=0;
	for(int i=a.size()-1;i>=0;i--){
		int NumA=toNum(a[i]);
		int NumB=toNum(b[i]);
		if(NumA<NumB){//a本身就小于b 
			int temp=NumA+10-NumB-last;
			if(last==0){
				last++;
			}
			res.insert(0,std::to_string(temp));
		}else if(NumA==NumB){
			if(!last){
				res.insert(0,"0");
				continue;
			}else{
				res.insert(0,"9");
				continue;
			}
		}else if(NumA>NumB){
			int temp=NumA-NumB-last;
			last=0;
			res.insert(0,std::to_string(temp));
		}
	}
	while(res[0]=='0' and res.size()>1){
		res.erase(0,1);
	}
	if(hasSigned){
		res.insert(0,"-");
	} 
	std::cout<<res; 
} 
int main(){
	std::cin>>a>>b;
	zero();
	calc();
} 

luogu p1303

#include<iostream>
#include<vector>
std::string a,b;
int toNum(char ch){
	return int(ch-48);
}
int zerocnt;
void zero(){
	for(int i=a.size()-1;i>=0;i--){
		if(a[i]!='0'){
			break;
		}else{
			zerocnt++;
		}
	}
	for(int i=1;i<=zerocnt;i++){
		a.erase(a.end()-1);
	}
	int temp=zerocnt;
	for(int i=b.size()-1;i>=0;i--){
		if(b[i]!='0'){
			break;
		}else{
			zerocnt++;
		}
	}
	for(int i=1;i<=zerocnt-temp;i++){
		b.erase(b.end()-1);
	}
}
void calc(){
	std::vector<int>resTemp(a.size()+b.size(),0);
	for(int i=a.size()-1;i>=0;i--){
		for(int j=b.size()-1;j>=0;j--){
			int NumA=toNum(a[i]);
			int NumB=toNum(b[j]);
			int temp=NumA*NumB;
			int distA=i+j;
			int distB=i+j+1;
			int ans=temp+resTemp[distB];
			resTemp[distA]+=(ans/10);
			resTemp[distB]=(ans%10);
		}
	}
	std::string res;
	for(auto i:resTemp){
		//去除前导0 
		if(!res.size() and i==0){
			continue;
		}
		res+=std::to_string(i);
	}
	if(res.size()==0){
		std::cout<<"0";
	}else{
		for(int i=0;i<zerocnt;i++){
			res+="0";
		}
		std::cout<<res;
	}
}
int main(){
	std::cin>>a>>b;
	zero();
	calc();
}

luogu p1480

#include<iostream>
#define int long long
int toNum(char ch){return signed(ch-48);}
char toChar(int x){return char(x+48);}
std::string a;
int b[10005],c,x,idx;
signed main(){
	std::cin>>a>>c;
	if(a=="0"){
		std::cout<<"0";
		return 0;
	}else{
		for(int i=0;i<a.size();i++){
			x=x*10+toNum(a[i]);
			b[i]=x/c;
			x%=c;
		}
		for(int i=0;i<a.size();i++){
			if(b[i]){
				idx=i;
				break;
			}
		}
		if(idx==a.size()){
			std::cout<<0;
		}else{
			for(int i=idx;i<a.size();i++){
				std::cout<<b[i]; 
			}
		}
	}
}

luogu p1009

#include<iostream>
#include<vector>
namespace Plus{
	int toNum(char ch){
		return int(ch-48);
	}
	void zero(std::string &a,std::string &b){
		if(a.size()>b.size()){
			int temp=a.size()-b.size();
			for(int i=1;i<=temp;i++){
				b.insert(0,"0");
			} 
		}else if(a.size()<b.size()){
			int temp=b.size()-a.size();
			for(int i=1;i<=temp;i++){
				a.insert(0,"0");
			} 
		}
	}
	std::string calc(std::string a,std::string b){
		std::string res;
		int last=0;
		for(int i=a.size()-1;i>=0;i--){
			int temp=toNum(a[i])+toNum(b[i]);
			temp+=last;
			int tar=temp-temp%10;
			res.insert(0,std::to_string(temp%10));
			tar/=10;
			last=tar;
		}
		if(last!=0){
			res.insert(0,std::to_string(last));
		}
		return res;
	}
}
namespace Mul{
	int toNum(char ch){
		return int(ch-48);
	}
	int zero(std::string &a,std::string &b){
		int zerocnt=0;
		for(int i=a.size()-1;i>=0;i--){
			if(a[i]!='0'){
				break;
			}else{
				zerocnt++;
			}
		}
		for(int i=1;i<=zerocnt;i++){
			a.erase(a.end()-1);
		}
		int temp=zerocnt;
		for(int i=b.size()-1;i>=0;i--){
			if(b[i]!='0'){
				break;
			}else{
				zerocnt++;
			}
		}
		for(int i=1;i<=zerocnt-temp;i++){
			b.erase(b.end()-1);
		}
		return zerocnt;
	}
	std::string calc(std::string a,std::string b,int zerocnt){
		std::vector<int>resTemp(a.size()+b.size(),0);
		for(int i=a.size()-1;i>=0;i--){
			for(int j=b.size()-1;j>=0;j--){
				int NumA=toNum(a[i]);
				int NumB=toNum(b[j]);
				int temp=NumA*NumB;
				int distA=i+j;
				int distB=i+j+1;
				int ans=temp+resTemp[distB];
				resTemp[distA]+=(ans/10);
				resTemp[distB]=(ans%10);
			}
		}
		std::string res;
		for(auto i:resTemp){ 
			if(!res.size() and i==0){
				continue;
			}
			res+=std::to_string(i);
		}
		if(res.size()==0){
			return "0";
		}else{
			for(int i=0;i<zerocnt;i++){
				res+="0";
			}
			return res;
		}
	}
}
int main(){
	int n;
	std::cin>>n;
	std::string last="1",res="1";
	if(n==1){
		std::cout<<last;
	}else{
		for(int i=2;i<=n;i++){
			std::string temp=std::to_string(i);
			int zerocnt=Mul::zero(temp,last);
			std::string x=Mul::calc(temp,last,zerocnt);
			Plus::zero(x,res);
			res=Plus::calc(x,res);
			last=x;
		}
		std::cout<<res;
	}
}

Day2

贪心。

luogu p4995

#include<algorithm>
#include<iostream> 
#include<vector>
#include<cmath>
#define int long long
#define debugV(x) std::cout<<x<<'\n';
#define debug std::cout<<"**********\n";
#define debugAr(vec) for(auto i:vec)std::cout<<i<<' ';std::cout<<std::endl;
signed main(){
	int n;
	std::cin>>n;
	std::vector<int>h;
	if(n==1){
		int x;
		std::cin>>x;
		std::cout<<x*x;
		return 0;
	}
	for(int i=0;i<n;i++){
		int x;
		std::cin>>x;
		h.push_back(x); 
	}
	std::sort(h.begin(),h.end(),std::greater<int>());
	int ans=0,last=h[0];
	ans+=(h[0]*h[0]);
	h.erase(h.begin());
	bool high=1;
	for(int i=0;i<h.size()+(n-2);i++,high=!high){
		if(!high){
			ans+=(abs(last-h[0])*abs(last-h[0]));
			last=h[0];
			h.erase(h.begin());
		}else{
			ans+=(abs(last-h[h.size()-1])*abs(last-h[h.size()-1]));
			last=h[h.size()-1];
			h.erase(h.end()-1);
		}
	}
	std::cout<<ans;
}

luogu p3817

#include<iostream>
#define ll long long 
ll ans,a[100005];
int main(){
	int n,x;
	std::cin>>n>>x;
	std::cin>>a[0];
	if(a[0]>x){
		ans+=(a[0]-x);
		a[0]=x;
	}
	for(int i=1;i<n;i++){
		std::cin>>a[i];
		if(a[i]+a[i-1]>x){
			ans+=(a[i]+a[i-1]-x);
			a[i]=x-a[i-1];
		}
	}
	std::cout<<ans;
}

luogu p1230

#include<algorithm>
#include<iostream>
#include<vector>
#define N 505
struct Node{
	int t;
	int w;
}game[N];
bool cmp(Node a,Node b){
	return a.w>b.w;
}
int n,m;
bool GameUse[N];
int main(){
	std::cin>>m>>n;
	for(int i=0;i<n;i++){
		std::cin>>game[i].t;
	}
	for(int i=0;i<n;i++){
		std::cin>>game[i].w;
	}
	std::sort(game,game+n,cmp);
	for(int i=0;i<n;i++){
		for(int j=game[i].t;j>=1;j--){
			if(!GameUse[j]){
				GameUse[j]=1;
				game[i].w=0;
				break;
			}
		} 
	}
	int fakuan=0;
	for(int i=0;i<n;i++){
		fakuan+=game[i].w;
	}
	m-=fakuan;
	std::cout<<m;
}

Day3

字符串模拟

luogu p1125

#include<iostream>
#include<algorithm>
#include<map>
bool isprime(int x){
	if(x<=1)return 0;
	for(int i=2;i*i<=x;i++)
	if(x%i==0)return 0;
	return 1;
}
std::map<char,bool>isIn;
std::map<char,int>Number;
int t[255],mx=-9999,mn=9999,dif,idx;
int main(){
	std::string s;
	std::cin>>s;
	for(int i=0;i<s.size();i++){
		if(!isIn[s[i]]){
			Number[s[i]]=idx;
			t[idx]++;
			idx++;
			dif++;
			isIn[s[i]]=1;
		}else{
			t[Number[s[i]]]++;
		}
	}
	for(int i=0;i<dif;i++){
		mx=std::max(t[i],mx);
		mn=std::min(t[i],mn);
	}
	if(isprime(mx-mn)){
		std::cout<<"Lucky Word\n";
		std::cout<<mx-mn;
	}else{
		std::cout<<"No Answer\n";
		std::cout<<0;
	}
}

luogu p1098

/*
	Name: test2.cpp
	Author: nightwatch_ryan
	Date: 01/02/24 12:30
	Problem: https://www.luogu.com.cn/problem/P1098
*/
#define debug(x) std::cout<<"debugger!"<<x<<'\n';
#include<iostream>
#include<algorithm>
bool isSame(char a,char b){
	if(isdigit(a) and isdigit(b))return 1;
	if(isalpha(a) and isalpha(b))return 1;
	return 0;
}
std::string s;
int p1,p2,p3,linecnt;
int main(){
	std::cin>>p1>>p2>>p3>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='-' and !(int(s[i+1])<=int(s[i-1])) and isSame(s[i-1],s[i+1])){
			linecnt++;
		}
	}
	//std::cout<<linecnt<<'\n';
	while(linecnt--){
		//std::cout<<s.size()<<'\n';
		for(int i=0;i<s.size();i++){
			if(s[i]=='-' and !(int(s[i+1])<=int(s[i-1])) and isSame(s[i-1],s[i+1])){
				std::string repstring;
				//1-2
				if(int(s[i-1])+1==int(s[i+1])){
					s.erase(i,1);
					continue;
				}
				//5-4
				if(int(s[i+1])<=int(s[i-1])){
					continue;
				}
				if(p1==1){
					//std::cout<<"((((((((((((((((\n";
					for(char ch=s[i-1]+1;ch<s[i+1];ch++){
						repstring+=ch;
					}
					//debug(repstring);
				}
				if(p1==2){
					for(char ch=s[i-1]+1;ch<s[i+1];ch++){
						repstring+=toupper(ch);
					}
				}
				if(p1==3){
					for(char ch=s[i-1]+1;ch<s[i+1];ch++){
						repstring+="*";
					}
				}
				//debug(repstring);
				std::string temp;
				for(int j=0;j<repstring.size();j++){
					char ch=repstring[j];
					for(int k=0;k<p2;k++){
						temp+=ch;
					}
				}
				repstring=temp;
				//debug(repstring);
				if(p3==2){
					std::reverse(repstring.begin(),repstring.end());
					s.replace(i,1,repstring);
				}
				if(p3==1){
					s.replace(i,1,repstring);
				}
				//debug(repstring);
				break;
			}
		}
	}
	std::cout<<s;
} 

luogu p3880

#include<iostream>
#include<cmath>
#include<cctype>
std::string t1,t2,t3;
std::string sub="aeiouAEIOU";
int letcnt;
int main(){
	std::string s;
	getline(std::cin,s);
    //Hint 1
	for(int i=0;i<s.size();i++){
		if(isalpha(s[i]))t1+=".",letcnt++;
		else t1+=s[i];
	} 
    int tmp=round(1.0*letcnt/3);
	int cnt=0,indexoflastLet=0;
	bool f=1;
	for(int i=0;i<s.size();i++){
		if(cnt==tmp and f){
			indexoflastLet=i;
            t2[i]=s[i];
            cnt++;
			f=false;
		}
		if(cnt<tmp and isalpha(s[i])){
			t2+=s[i];
			cnt++;
		} 
		else if(cnt>tmp and isalpha(s[i])){
			t2+=".";
		}
		else if(isblank(s[i])){
			t2+=" ";
		}
		else {
			t2+=s[i];
		}
	}
	bool hasYuanyin=0;//是否有元音
	for(int i=indexoflastLet;i<s.size();i++){
		if(sub.find(s[i])!=std::string::npos)hasYuanyin=1;//有元音字母
	}
	t3=t2;
	if(hasYuanyin){
		for(int i=indexoflastLet;i<s.size();i++){
			if(sub.find(s[i])!=std::string::npos){
				t3[i]=s[i];
			}
		}
	}else{
		t3=t2;
		int temper=round(letcnt/1.5);
		//std::cout<<temper<<'\n';
		int cnt=0;
		for(int i=0;i<s.size();i++){
			if(isalpha(s[i]) and cnt<temper){
				cnt++;
				t3[i]=s[i];
			}
		}
	}
	std::cout<<t1<<'\n'<<t2<<'\n'<<t3;;
}

Day4

二分

leetcode 704

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int l=0,r=nums.size();
        while(l<r){
            int mid=(l+r)>>1;
            if(nums[mid]==target){
                return mid;
            }else if(nums[mid]<target){
                l=mid+1;
            }else{
                r=mid;
            }
        }
        return -1;
    }
};

leetcode 374

/** 
 * Forward declaration of guess API.
 * @param  num   your guess
 * @return       -1 if num is higher than the picked number
 *         1 if num is lower than the picked number
 *               otherwise return 0
 * int guess(int num);
 */
int guess(int num);
class Solution {
public:
    int guessNumber(int n) {
        long long l=1,r=n;
        while(l<=r){
            int mid=(l+r)>>1;
            if(guess(mid)==0){
                return mid;
            }else if(guess(mid)==-1){
                r=mid-1;
            }else if(guess(mid)==1){
                l=mid+1;
            }
        }
        return {};
    }
};

leetcode 278

// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
bool isBadVersion(int version);
class Solution {
public:
    int firstBadVersion(int n) {
        long long l=1,r=n;
        while(l<=r){
            int mid=(l+r)>>1;
            if(isBadVersion(mid)){
                r=mid-1;
            }else{
                l=mid+1;
            }
        }
        return l;
    }
};

leetcode 162

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int l=0,r=nums.size()-1;
        while(l<r){
            int mid=(l+r)>>1;
            if(nums[mid]>nums[mid+1]){
                r=mid;
            }else{
                l=mid+1;
            }
        }
        return l;
    }
};

leetcode 153

class Solution {
public:
    int findMin(vector<int>& nums) {
        int l=0,r=nums.size()-1;
        while(l<r){
            int mid=(l+r)>>1;
            if(nums[mid]>=nums[r]){
                l=mid+1;
            }else{
                r=mid;
            }
        }
        return nums[l];
    }
};
class Solution {
public:
    int findMin(vector<int>& nums) {
        std::sort(nums.begin(),nums.end());
		return nums[0];
	}
};

leetcode 34

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if(nums.empty()){
            return {-1,-1};
        }
        int l=0,r=nums.size()-1;
        int res1=-1,res2=-1;
        while(l<=r){
            int mid=(l+r)>>1;
            if(nums[mid]<target){
                l=mid+1;
            }else if(nums[mid]==target){
                res1=mid;
                r=mid-1;
            }else{r=mid-1;}
        }
        l=0,r=nums.size()-1;
        while(l<=r){
            int mid=(l+r)>>1;
            if(nums[mid]==target){
                res2=mid;
                l=mid+1;
            }else if(nums[mid]<target){
                l=mid+1;
            }else{
                r=mid-1;
            }
        }
        return {res1,res2};
    }
};

luogu p2249

#include<iostream>
#define N 1000005
int n,m,a[N];
int main(){
	std::ios::sync_with_stdio(0);
	std::cin>>n>>m;
	for(int i=1;i<=n;i++){
		std::cin>>a[i];
	}
	while(m--){
		int x;
		std::cin>>x;
		int l=1,r=n;
		while(l<r){
			int mid=(l+r)/2;
			if(a[mid]==x){
				r=mid;
			}else if(a[mid]<x){
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		if(a[r]==x)std::cout<<r<<' ';
		else std::cout<<-1<<' ';
	}
} 

luogu p1102

#include<iostream>
#include<algorithm>
const int MAXN=200000+5;
using namespace std;
typedef long long ll;
ll a[MAXN];
int n,c;
int main(){
	cin>>n>>c;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	ll cnt=0;
	for(int i=1;i<=n;i++){
		cnt+=upper_bound(a+1,a+n+1,a[i]+c)-lower_bound(a+1,a+n+1,a[i]+c);
	} 
	cout<<cnt;
	return 0;
}

luogu p1024

#include<iostream>
#include<iomanip>
#include<cmath>
#define db double
db a,b,c,d;
db f(db x){return a*x*x*x+b*x*x+c*x+d;}
int main(){
	std::cin>>a>>b>>c>>d;
	for(db i=-100;i<100;i+=0.001){
		if(fabs(f(i))<0.0001){
			std::cout<<std::fixed<<std::setprecision(2)<<i<<' ';
		}
	}
}
#include<iostream>
#include<iomanip>
#define db double
db l,r,mid,a,b,c,d;
db f(db x){return a*x*x*x+b*x*x+c*x+d;}
int main(){
	std::cin>>a>>b>>c>>d;
	for(int i=-100;i<100;i++){
		l=i,r=i+1,mid=0;
		if(f(l)==0){
			std::cout<<i<<".00 ";
			continue;
		}
		if(f(l)*f(r)<0){
			for(int j=1;j<=60;j++){
				mid=(l+r)/2;
				if(f(l)*f(mid)<=0){
					r=mid;
				}else{
					l=mid;
				}
			}
			std::cout<<std::fixed<<std::setprecision(2)<<l<<' ';
		}
	}
}

luogu p1678

#include<iostream>
#include<climits>
#include<algorithm>
#include<cmath>
#define int long long
#define N 100005
int n,m,a[N],res;
signed main(){
	std::cin>>m>>n;
	for(int i=1;i<=m;i++){
		std::cin>>a[i];
	}
	std::sort(a+1,a+1+m);
	for(int i=1;i<=n;i++){
		int x;
		std::cin>>x;
		int temp=INT_MAX;
		int l=1,r=m;
		while(l<=r){
			int mid=(l+r)>>1;
			if(a[mid]<x){
				l=mid+1;
				temp=std::min(temp,x-a[mid]);
			}else if(a[mid]>x){
				r=mid-1;
				temp=std::min(temp,a[mid]-x);
			}else{
				temp=0;
				break; 
			}
		}
		res+=temp;
	}
	std::cout<<res;
}

luogu p1873

#include<iostream>
#include<algorithm>
#include <climits>
#define int long long
#define N 1000005
int n,m,a[N],maxhigh=INT_MIN;
signed main(){
	std::cin>>n>>m;
	for(int i=1;i<=n;i++){
		std::cin>>a[i];
		maxhigh=std::max(maxhigh,a[i]);
	}
	int l=0,r=maxhigh;
	while(l<=r){//
		int mid=(l+r)>>1,cnt=0;//
		for(int i=1;i<=n;i++){//
			if(a[i]>mid){//
				cnt+=(a[i]-mid);//
			}//
		}//
		if(cnt==m){
			std::cout<<mid;
			return 0;
		}else if(cnt<m){
			r=mid-1;
		}else{
			l=mid+1;
		}
	}
	std::cout<<l-1;
}

luogu p2440

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,k;
	cin>>n>>k;
	vector<int>vt;
	int tmp;
	int L=0,R=0;
	for(int i=0;i<n;i++){
		cin>>tmp;
		vt.push_back(tmp);
		R=max(R,tmp);
		L=min(L,tmp);
	}
	int mid=0;
	while(L<=R){
		mid=(L+R)/2;
		if(mid==0){
			break;
		}
		int currentK=0;
		for(int i=0;i<n;i++){
			currentK+=vt[i]/mid;
		}
		if(currentK>=k){
			L=mid+1; 
		}else{
			R=mid-1;
		}
	}
	cout<<R;
	return 0;
}
posted @ 2024-01-31 21:18  一个追寻光的人  阅读(25)  评论(0)    收藏  举报