• 个人简介

    https://games.imc.re/ngs/mcjs/play/eaglercraft/1.8

    作为我的同桌何嘉豪你别嚣张。

    班长说:走,我们去炸外星人副班长说:这个主意不错
    
    化学课代表负责提取氢气
    
    英语课代表到外国购买进口爆炸材料
    
    物理课代表负责拼装氢弹
    
    数学课代表负责计算爆破面积
    
    地理课代表负责策划爆破地点
    
    信息课代表负责打倒计时爆炸代码
    
    美术课代表负责绘画爆炸蘑菇云
    
    历史课代表负责记录光辉场面并将其载入史册体育课代表负责屠杀懵逼的外星人
    
    生物课代表负责事后生态环境
    
    音乐课代表负责奏乐安抚众人
    
    政治课代表负责使用法律打官司
    
    语文课代表负责乱写文章推卸责任
    

    手写快排,效率:不定,在n----n*n之间;

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    long long n,a[10000];
    void dfs(ll a[],ll l,ll r){
    	if(l>=r) return ;
    	ll i=l-1,j=r+1,x=a[l];
    	while(i<j){
    		do i++;
    		while(a[i]<x);
    		do j--;
    		while(a[j]>x);
    		if(i<j) swap(a[i],a[j]);
    		else break;
    	}
    	dfs(a,l,j),dfs(a,j+1,r);
    }
    int main(){
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>a[i];
    	dfs(a,0,n-1);
    	for(int i=0;i<n;i++) cout<<a[i]<<" ";
    	return 0;
    }
    

    归并排序,效率:log(n);

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n,q[200],tmp[200];
    void dfs(ll q[],ll l,ll r)
    {
    	if(l>=r) return;
    	int mid=l+r>>1;
    	dfs(q,l,mid);
    	dfs(q,mid+1,r);
    	int k=0,i=l,j=mid+1;
    	while(i<=mid&&j<=r)
    	  if(q[i]<q[j]) tmp[k++]=q[i++];
    	  else tmp[k++]=q[j++];
    	while(i<=mid) tmp[k++]=q[i++];
    	while(j<=r) tmp[k++]=q[j++];
    	for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
    }
    int main() {
    	cin>>n;
    	for(int i=0;i<n;i++) cin>>q[i];
    	dfs(q,0,n-1);
    	for(int i=0;i<n;i++) cout<<tmp[i]<<" ";
    }
    

    堆排序,效率:log(m);

    #include<bits/stdc++.h>
    using namespace std;
    int m;
    priority_queue<int,vector<int>,greater<int> >q;
    int main()
    {
    	cin>>m;
    	for(int i=1;i<=m;i++)
    	{
    		int x;
    		cin>>x;
    		q.push(x);
    	}
    	while(q.size()>0)
    	{
    		cout<<q.top()<<" ";
    		q.pop();
    	}
    }
    

    美其名曰:输入外挂,又名曰:快读。

    ios::sync_with_stdio(false);
    

    美其名曰:输出外挂,又名曰:快输。

    cin.tie(0),cout.tie(0);
    

    合起来,美其名曰:输入外挂,输出外挂,又名曰:快读快输。

    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    

    邪修版高精加

    #include <bits/stdc++.h>
    using namespace std;
    vector<int> a,b,c;
    string s1,s2;
    vector<int> add(vector<int> &A,vector<int> &B){
    	if(A.size()<B.size()) return add(B,A);
    	vector<int> C;
    	int t=0;
    	for(int i=0;i<A.size();i++){
    		t=t+A[i];
    		if(i<B.size()) t=t+B[i];
    		C.push_back(t%10);
    		t=t/10;
    	}
    	if(t) C.push_back(t);
    	return C;
    }
    int main(){
    	cin>>s1>>s2;
    	for(int i=s1.size()-1;i>=0;i--) a.push_back(s1[i]-'0');
    	for(int i=s2.size()-1;i>=0;i--) b.push_back(s2[i]-'0');
    	c=add(a,b);
    	for(int i=c.size()-1;i>=0;i--) cout<<c[i];
    }
    

    正版高精加

    #include<bits/stdc++.h>
    using namespace std;
    long long a[1700],b[1700],c[1700],k;
    string s1,s2;
    int main() {
    	cin>>s1>>s2;
    	for(int i=s1.size()-1;i>=0;i--) a[s1.size()-i]=s1[i]-'0';
    	for(int i=s2.size()-1;i>=0;i--) b[s2.size()-i]=s2[i]-'0';
    			for(int j=1;j<=1000;j++) 
    			{
    			c[j]=a[j]+b[j]+k;
    			k=c[j]/10;
    			c[j]%=10;
    			}
    	k=1000;
    	while(k>1&&c[k]==0) k--;
    	for(int i=k;i>=1;i--) cout<<c[i];
    }
    

    高精减正解

    #include<bits/stdc++.h>
    using namespace std;
    string a,b;
    long long na[10500],nb[10500],ans[10500]; 
    bool pd;
    int main(){
        cin>>a>>b;
    	if((a<b&&a.size()==b.size())||a.size()<b.size()){
    		swap(a,b);
    		pd=true;
    	}
        for(int i=a.size();i>0;i--) na[i]=a[a.size()-i]-'0';
        for(int i=b.size();i>0;i--) nb[i]=b[b.size()-i]-'0';
        int maxl=max(a.size(),b.size());
    	for(int i=1;i<=maxl;i++){
    		if(na[i]<nb[i]){
    			na[i+1]--;
    			na[i]+=10;
    		}
    		ans[i]=na[i]-nb[i];
    	}
    	while(ans[maxl]==0) maxl--;
    	if(pd==true) cout<<"-";
    	for(int i=maxl;i>0;i--) cout<<ans[i];
    	if(maxl<1) cout<<"0";
        return 0;
    }
    

    蒟蒻有一次模拟赛第四题的100分题解。

    #include<bits/stdc++.h>
    using namespace std;
    long long maxn=LONG_LONG_MIN,a[2000010],b[2000010],n,d,ai,bi;
    bool p=false;
    bool cmp(long long x,long long y){
    	return x>y;
    }
    int main(){
    	freopen("max.in","r",stdin);
    	freopen("max.out","w",stdout);	
    	ios::sync_with_stdio(false);
    	cin>>n>>d;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	for(int i=1;i<=n;i++) cin>>b[i];
    	sort(a+1,a+n+1,cmp);
    	sort(b+1,b+n+1,cmp);
    	ai=1;
    	bi=1;
    	while(ai!=n&&bi!=n){
    		if(abs(a[ai]-b[bi])<=d){
    			maxn=max(a[ai]+b[bi],maxn);
    			p=true;
    			break;
    		} 
    		else{
    			if(bi==n) ai++,bi=1;
    			else bi++;
    		}
    	}
    	if(p==false) cout<<"None";
    		else cout<<maxn;
    }
    

    01背包的模板

    #include<bits/stdc++.h>
    using namespace std;
    long long n,V,v[200],w[200],f[200][1100];
    int main() {
    	cin>>n>>V;
    	for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=V;j++){
    			f[i][j]=f[i-1][j];
    			if(j>=v[i]) f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
    		}
    	}
    	cout<<f[n][V];
    }
    
    #include <iostream>
    #include <queue>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 105;
    // 上下左右四个方向
    int dx[] = {-1, 1, 0, 0};
    int dy[] = {0, 0, -1, 1};
    
    int n;
    int h[MAXN][MAXN];  // 存储海拔高度
    bool vis[MAXN][MAXN]; // 访问标记
    
    // BFS:检查在 [low, high] 高度区间内,能否从(0,0)走到(n-1,n-1)
    bool bfs(int low, int high) {
        // 起点不在区间内,直接不行
        if (h[0][0] < low || h[0][0] > high) return false;
        
        memset(vis, false, sizeof(vis));
        queue<pair<int, int>> q;
        q.push({0, 0});
        vis[0][0] = true;
    
        while (!q.empty()) {
            auto [x, y] = q.front();
            q.pop();
    
            // 到达终点
            if (x == n-1 && y == n-1) return true;
    
            // 遍历四个方向
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];
                // 判断边界、未访问、高度在区间内
                if (nx >= 0 && nx < n && ny >=0 && ny < n 
                    && !vis[nx][ny] 
                    && h[nx][ny] >= low && h[nx][ny] <= high) {
                    
                    vis[nx][ny] = true;
                    q.push({nx, ny});
                }
            }
        }
        // 走不到终点
        return false;
    }
    
    // 检查高度差为d时,是否存在合法路径
    bool check(int d) {
        // 枚举所有可能的最低点 low,最高点就是 low+d
        for (int low = 0; low + d <= 110; low++) {
            if (bfs(low, low + d)) {
                return true;
            }
        }
        return false;
    }
    
    int main() {
        cin >> n;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cin >> h[i][j];
            }
        }
        int l = 0, r = 110;
        int ans = 110;
        while (l <= r) {
            int mid = (l + r) / 2;
            if (check(mid)) {
                ans = mid;
                r = mid - 1;
            } else {
                l = mid + 1;
            }
        }
        cout << ans << endl;
        return 0;
    }
    
  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

题目标签

聪明人游戏
4
贪心
1
深搜 广搜
1
广搜
1
大沥2021
1
算法笔记
1