先点赞后观看,禁止白嫖
A+B porblem的多种做法!!!
1.正常做法:
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b;
c=a+b;
cout<<c;
return 0;
}
速度和复杂度较慢不建议使用
2.最短:
a,b=map(int,input().split())
print(a+b)
使用了Python3来实现
3.最快:
#include<stdio.h>
int read() {
int x=0;
char c=getchar();
while(c>='0'&&c<='9') {
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x;
}
void write(int x) {
if(x>9)write(x/10);
putchar(x%10+'0');
}
main() {
printf("%d",read()+read());
}
4.高精度:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int a[MAXN],b[MAXN],c[MAXN],ans[MAXN],Len_a,Len_b,Len_ans;
void Read(int *a,int&len)
{
string cur;
cin>>cur;
len=cur.length();
for(int i=0;i<len;i++)a[i]=cur[i]-48;
reverse(a,a+len);
}
int main(){
Read(a,Len_a);
Read(b,Len_b);
Len_ans=max(Len_a,Len_b);
for(int i=0;i<=Len_ans;i++)
{
ans[i]=a[i]+b[i]+c[i];
if(ans[i]>9)c[i+1]=ans[i]/10,ans[i]-=10;
}
while(ans[Len_ans]>0)Len_ans++;
for(int i=Len_ans-1;i>=0;i--)
cout<<ans[i];
return 0;
}
5.随机数:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
srand(time(0));
a=rand();
cout<<a;
}
6.二分答案:
#include<bits/stdc++.h>
using namespace std;
int a,b,mid,l=INT_MIN,r=INT_MAX;
int main(){
cin>>a>>b;
while(l<r){
mid=(l+r)/2;
if(mid<a+b)
l=mid;
else if(mid>a+b)
r=mid;
else{
cout<<mid;
return 0;
}
}
}
7.递归:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
inline void fun(int k){
if(k==a*b*10){
cout<<a+b;
return;
}
fun(k+1);
}
signed main(){
cin>>a>>b;
fun(1);
}
8. 二进制:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans,a[1002];
int main(){
cin>>n>>m;
for(int i=30;i>=0;i--){
if((n>>i)&1){
ans+=(1<<i);
}
if((m>>i)&1){
ans+=(1<<i);
}
}
cout<<ans;
}
9.位运算:
#include<iostream>
using namespace std;
int a,b,x,y,s,t;
int main(){
cin>>a>>b;
x=a&b;
y=a^b;
while(x){
s=y;
t=x<<1;
x=s&t;
y=s^t;
}
cout<<y;
}
10.spfa:
#include<iostream>
#include<queue>
using namespace std;
queue<int> q;
struct node{
int v;
int w;
int nex;
}e[4];
int a,b,cnt,first[4],inq[4],dis[4];
void add(int U,int V,int W){
e[++cnt].v=V;
e[cnt].w=W;
e[cnt].nex=first[U];
first[U]=cnt;
}
int main(){
cin>>a>>b;
add(1,2,a);
add(2,3,b);
for(int i=1;i<=3;i++)
dis[i]=999999999;
dis[1]=0;
inq[1]=1;
q.push(1);
while(!q.empty()){
int v=q.front();
q.pop();
inq[v]=0;
for(int i=first[v];i;i=e[i].nex){
int k=e[i].v;
if(dis[k]>dis[v]+e[i].w){
dis[k]=dis[v]+e[i].w;
if(!inq[k]){
q.push(k);
inq[k]=1;
}
}
}
}
cout<<dis[3];
}
11.floyd:
#include<bits/stdc++.h>
using namespace std;
int a,b,dis[4][4];
int main(){
cin>>a>>b;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
dis[i][j]=INT_MAX;
dis[1][2]=a;
dis[2][3]=b;
for(int k=1;k<=3;k++)
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
cout<<dis[1][3];
}
12.dijkstra:
#include<iostream>
using namespace std;
int a,b,v,Min,w[4][4],vis[4],dis[4];
int main(){
cin>>a>>b;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
w[i][j]=999999999;
w[1][2]=a;
w[2][3]=b;
for(int i=1;i<=3;i++){
dis[i]=w[1][i];
vis[i]=0;
}
vis[1]=1;
dis[1]=0;
for(int i=2;i<=3;i++){
Min=999999999;
for(int j=1;j<=3;j++)
if(!vis[j]&&dis[j]<Min){
Min=dis[j];
v=j;
}
vis[v]=1;
for(int j=1;j<=3;j++)
if(dis[j]>dis[v]+w[v][j]&&!vis[j])
dis[j]=dis[v]+w[v][j];
}
cout<<dis[3];
return 0;
}
13.字典树:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct node{
int str[26];
int sum;
}s[1000];
char str1[100];
int t=0,tot=0,ss=0;
bool f1;
void built()
{
t=0;
for(int i=0;i<strlen(str1);i++)
{
if(str1[i]=='-'){
f1=true;continue;
}
if(!s[t].str[str1[i]-'0'])
s[t].str[str1[i]-'0']=++tot;
t=s[t].str[str1[i]-'0'];
s[t].sum=str1[i]-'0';
}
}
int query()
{
int t=0;int s1=0;
for(int i=0;i<strlen(str1);i++)
{
if(str1[i]=='-') continue;
if(!s[t].str[str1[i]-'0']) return s1;
t=s[t].str[str1[i]-'0'];
s1=s1*10+s[t].sum;
}
return s1;
}
int main()
{
for(int i=1;i<=2;i++)
{
f1=false;
scanf("%s",str1);
built();
if(f1)
ss-=query();
else ss+=query();
}
printf("%d",ss);
return 0;
}
14.树状数组:
#include<bits/stdc++.h>
using namespace std;
int a,b,s[3];
int lowbit(int x){
return x&(-x);
}
int getsum(int x){
int sum=0;
for(int i=x;i>0;i-=lowbit(i))
sum+=s[i];
return sum;
}
void update(int x,int y){
for(int i=x;i<=2;i+=lowbit(i))
s[i]+=y;
}
int main(){
cin>>a;
update(1,a);
cin>>b;
update(2,b);
cout<<getsum(2);
}
15.树形结构:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int size_=1000;
typedef struct node;
typedef node*tree;
struct node{
int data;
tree lchild,rchild;
};
tree bt;
int i=0,a[size_],ans=0;
void build(tree&bt){
if(a[++i]!=0){
bt=new node;
bt->data=a[i];
build(bt->lchild);
build(bt->rchild);
}else{
bt=NULL;
}
}
void search(tree&bt){
if(bt&&200>=bt->data>0){
ans=ans+bt->data;
search(bt->lchild);
search(bt->rchild);
}
}
signed main(){
cin>>a[1]>>a[2];
build(bt);
search(bt);
cout<<ans;
}
16.极限1(斜率逼近):
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int limit(int x){
double k2=1.0*x;
for(int i=1;i<=x*20000;i++){
double k=1.0*i/10000;
if(k>k2){
return 1.0*(i-1)/10000;
}
}
return INT_MAX;
}
signed main(){
cin>>a>>b;
cout<<limit(a)+limit(b);
}
17.极限2(求导法+洛必达法则):
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,n=1,k=3,k2=2;
int f(int x,int k,int k2){
int a1=1,a2=1;
for(int i=1;i<=k;i++){
a1*=x;
}
for(int i=1;i<=k2;i++){
a2*=x;
}
return a1/a2;
}
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1) ans=ans*a;
a=a*a;
b>>=1;
}
return ans;
}
int derivative(int x,int n){
return n*qpow(x,n-1);
}//f(x)=x^n,f'(x)?
int lobida_s_Law(int a,int b){
if(a!=0&&b!=0){
return a+b;
}
return lobida_s_Law(derivative(a,k-k2),derivative(b,k-k2));
}
signed main(){
cin>>a>>b;
cout<<lobida_s_Law(f(a,k,k2),f(b,k,k2));
}
18.并查集:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[102],father[102];
int sum(int x){
if(father[x]!=0) return sum(father[x])+a[x];
else return a[x];
}
void add(int x,int y){
father[y]=x;
}
signed main(){
cin>>a[1]>>a[2];
add(1,2);
cout<<sum(2);
}
19.慢速读:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y;
int sr(){
int k;
cin>>k;
int i=k;
while(++i!=(int)(1e8*6));
return k;
}
void sp(int x){
int i=0;
while(++i!=(int)(1e8*6));
cout<<x;
}
signed main(){
x=sr();
y=sr();
sp(x+y);
}