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;
}

浙公网安备 33010602011771号