• Bio

    谁懂在外网刷水题的快乐

    freopen(".in","r",stdin);
    freopen(".out","w",stdout);
    

    头文件(这都删!!!)

    #include<bits/stdc++.h>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    using namespace std;
    signed main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
      
    	return 0;
    }
    //Ren Boda
    

    崩溃了

    #include<bits/stdc++.h>
    using namespace std;
    string s1;
    signed main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cout.tie(0);
    	int t;
    	cin>>t;
    	vector< vector < vector<string> > > files;
    	vector<int> max_cols;
    	int max_rows = 0;
    	for(int i=0; i<t; i++) {
    		int m;
    		string name;
    		cin>>m>>name;
    		max_rows = max(max_rows, m+1);
    		vector<vector<string>> cur_file;
    		vector<string> header;
    		header.push_back(name);
    		cur_file.push_back(header);
    		int cur_max=1;
    		for(int j=0; j<m; j++) {
    			cin>>s1;
    			vector<string> row;
    			string temp="";
    			for(char ch:s1) {
    				if(ch==',') {
    					row.push_back(temp);
    					temp="";
    				} else temp+=ch;
    			}
    			row.push_back(temp);
    			cur_file.push_back(row);
    			cur_max = max(cur_max, (int)row.size());
    		}
    		files.push_back(cur_file);
    		max_cols.push_back(cur_max);
    	}
    	vector< vector<string> > result(max_rows);
    	int global_offset = 0;
    	for(int f=0; f<t; f++) {
    		int cur_max = max_cols[f];
    		for(int r=0; r<(int)files[f].size(); r++) {
    			for(int c=0; c<(int)files[f][r].size(); c++) {
    				if(c<cur_max) {
    					result[r].resize(max(result[r].size(),(size_t)(global_offset+c+1)));
    					result[r][global_offset + c] = files[f][r][c];
    				}
    			}
    		}
    		int real_right = 0;
    		for(int r=0; r<(int)files[f].size(); r++) {
    			for(int c=cur_max-1; c>=0; c--) {
    				if(c < (int)files[f][r].size() && !files[f][r][c].empty()) {
    					real_right = max(real_right, c+1);
    					break;
    				}
    			}
    		}
    		global_offset += real_right;
    	}
    	for(int i=0; i<max_rows; i++) {
    		for(int j=0; j<(int)result[i].size()-1; j++) {
    			cout<<result[i][j]<<",";
    		}
    		cout<<result[i][(int)result[i].size()-1]<<"\n";
    	}
    	return 0;
    }
    //Ren Boda
    

    易重名函数

    // 贝塞尔系列
    j0, j1, jn, y0, y1, yn
    // 基础三角函数
    sin, cos, tan, asin, acos, atan, atan2
    sinh, cosh, tanh, asinh, acosh, atanh
    // 幂、开方、对数
    sqrt, cbrt, pow, log, log10, log2, log1p
    // 取整、绝对值
    abs, fabs, floor, ceil, round, trunc, modf, fmod
    // 极值、符号
    fmax, fmin, fdim, copysign, signbit
    // 指数、误差函数
    exp, exp2, expm1, erf, erfc, tgamma, lgamma
    //其他
    atoi,atol,atof,rand,srand,malloc,free,calloc,realloc,exit,
    abort,system,getenv,printf, scanf, puts,gets(废弃), fopen,
    fclose,feof,sort,find,count,copy,swap,reverse,unique,max,
    min,fill,replace,remove,transform,for_each,accumulate,
    partition,stable_sort,size,empty,begin,end,next,prev,
    distance,vector,map,set,queue,stack,pair,tuple,getline,
    cin/cout/cerr(对象,不能做变量),isalpha, isdigit,isspace,
    islower, isupper // <cctype>
    strlen,strcpy,strcat, strcmp,strstr // <cstring>
    

    解码器

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>s;
    	for(int i=0; i<s.size(); i++) {
    		if(s[i]=='!') cout<<1;
    		else if(s[i]=='@') cout<<2;
    		else if(s[i]=='#') cout<<3;
    		else if(s[i]=='$') cout<<4;
    		else if(s[i]=='%') cout<<5;
    		else if(s[i]=='^') cout<<6;
    		else if(s[i]=='&') cout<<7;
    		else if(s[i]=='*') cout<<8;
    		else if(s[i]=='(') cout<<9;
    		else if(s[i]==')') cout<<0;
    		else cout<<s[i];
    	}
    	return 0;
    }
    //Ren Boda
    

    加密器(基础)

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>s;
    	for(int i=0; i<s.size(); i++) {
    		if(s[i]=='1') cout<<'!';
    		else if(s[i]=='2') cout<<'@';
    		else if(s[i]=='3') cout<<'#';
    		else if(s[i]=='4') cout<<'$';
    		else if(s[i]=='5') cout<<'%';
    		else if(s[i]=='6') cout<<'^';
    		else if(s[i]=='7') cout<<'&';
    		else if(s[i]=='8') cout<<'*';
    		else if(s[i]=='9') cout<<'(';
    		else if(s[i]=='0') cout<<')';
    		else cout<<s[i];
    	}
    	return 0;
    }
    //Ren Boda
    

    加密器(进阶)

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>s;
    	for(int i=0; i<s.size(); i++) {
    		if(s[i]=='1') cout<<'!';
    		else cout<<s[i];
    		if(s[i]=='2') cout<<'@';
    		else cout<<s[i];
    		if(s[i]=='3') cout<<'#';
    		else cout<<s[i];
    		if(s[i]=='4') cout<<'$';
    		else cout<<s[i];
    		if(s[i]=='5') cout<<'%';
    		else cout<<s[i];
    		if(s[i]=='6') cout<<'^';
    		else cout<<s[i];
    		if(s[i]=='7') cout<<'&';
    		else cout<<s[i];
    		if(s[i]=='8') cout<<'*';
    		else cout<<s[i];
    		if(s[i]=='9') cout<<'(';
    		else cout<<s[i];
    		if(s[i]=='0') cout<<')';
    		else cout<<s[i];
    	}
    	return 0;
    }
    //Ren Boda
    

    加密器(ProMax)(无对应解码器)

    #include<bits/stdc++.h>
    using namespace std;
    int getRand(int min,int max) {
    	return (rand()%(max-min+1))+min;
    }
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	srand(time(0));
    	int a=getRand(getRand(5,25),getRand(35,55));
    	for(int i=1; i<=a; i++) {
    		int n=getRand(33,126);
    		cout<<(char)n;
    	}
    	return 0;
    }
    //Ren Boda
    

    STL编译指令

    -std=c++14 -Wl,--stack=123456789
    

    光速幂

    long long Pow(long long a,long long b,long long p)//光速幂 
    {
    	long long res=1,k=a;
    	while(b)
    	{
    		if(b&1) res=res*k%p;
    		k=k*k%p;
    		b>>=1;
    	}
    	return res%p;
    }
    

    二分查找,二分答案

    long long n,m,h,s,a[917813],num=0,sum=0,maxs=INT_MIN;
    long long cow[917813];
    bool check1(int x) { //二分答案检查
    	int ans=0;
    	for(int i=1; i<=n; i++) {
    		ans+=(a[i]+x-1)/x;
    	}
    	if(ans<=h) return 1;
    	else return 0;
    }
    bool check2(int x) { //x是二分答案mid
    	int cnt=0,ans=0;//累加和
    	for(int i=1; i<=n; i++) {
    		if(a[i]-ans<x) {
    			cnt++;
    		} else ans=a[i];
    	}
    	if(cnt<=m) return 1;
    	else return 0;
    }
    /*  while(left+1<right)
        {
            int mid=(left+right)/2;
            if(check1(mid)) right=mid;
            else left=mid;
        }
        if(check1(left)) flag=left;
        else flag=right;
    *///这段代码往往与上面两个check合用(二分答案枚举)
    long long find1(long long x) { //二分查找:x是否在数组中出现
    	long long left=1,right=n+1;
    	while(left+1<right) {
    		long long mid=(left+right)/2;
    		if(a[mid]==x) return mid;
    		if(a[mid]<x) left=mid;
    		else right=mid;
    	}
    	if(a[left]==x) return left;
    	if(a[right]==x) return right;
    	return -1;
    }
    void find2() { //二分答案
    	int left=1,right=maxs;
    	while(left+1<right) {
    		int mid=(left+right)/2;
    		if(check2(mid)) left=mid;
    		else right=mid;
    	}
    	if(check2(right)) cout<<right;
    	else cout<<left;
    }
    int bsfind1(int x) { //二分查找:大于等于x的最小值下标
    	int left=1,right=n+1;
    	while(left+1<right) {
    		int mid=(left+right)/2;
    		if(a[mid]>=x) right=mid;
    		if(a[mid]<x) left=mid;
    	}
    	if(a[left]>=x) return left;
    	else return right;
    }
    int bsfind2(int x) { //二分查找:大于x的最小值下标
    	int left=1,right=n+1;
    	while(left+1<right) {
    		int mid=(left+right)/2;
    		if(a[mid]>x) right=mid;
    		if(a[mid]<x) left=mid;
    	}
    	if(a[left]>x) return left;
    	else return right;
    }
    int bsfind3(int x) { //二分查找:小于等于x的最大值下标
    	int left=0,right=n+1;
    	while(left+1<right) {
    		int mid=(left+right)/2;
    		if(cow[mid]<=x) left=mid;
    		else right=mid;
    	}
    	if(cow[right]>=x) return right;
    	else return left;
    }
    int bsfind4(int x) { //二分查找:小于x的最大值下标
    	int left=1,right=n+1;
    	while(left+1<right) {
    		int mid=(left+right)/2;
    		if(a[mid]<x) left=mid;
    		else right=mid;
    	}
    	if(a[right]>x) return right;
    	else return left;
    }
    

    链表的基本操作

    const int N=310;
    int n,m,idx;
    //链表的表示
    struct Node {
    	int value;
    	int next;
    } a[N];
    int head; //头节点
    //链表的生成
    void getlb() {
    	head=0;//头节点的初始化
    	a[head].value=n;
    	a[head].next=1;
    	//生成链表
    	for(int i=1; i<=n; ++i) {
    		a[i].value=i;
    		a[i].next=i+1;
    	}
    	a[n].next=0;
    	idx=n;
    }
    //链表的遍历
    void run() {
    	int now=a[head].next;
    	while(now) {
    		cout<<a[now].value<<' ';
    		now=a[now].next;
    	}
    	cout<<endl;
    }
    //链表的删除
    void erase(int x) {
    	int last=head,now=a[head].next;
    	while(now&&a[now].value!=x) last=now,now=a[now].next;
    	if(now==0) return;
    	a[last].next=a[now].next;
    	a[head].value--;
    }
    //链表的插入,在x的后面加入v
    void insert(int x,int v) {
    	//查找,定位
    	int now=a[head].next;
    	while(now&&a[now].value!=x) now=a[now].next;
    	if(now==0) return;
    	//新节点加上去
    	idx++;
    	a[idx].value=v;
    	a[idx].next=a[now].next;
    	a[now].next=idx;
    	a[head].value++;
    }
    

    abc203dl 写不下去了,不写了(其实最后又写出来了)

    #include<bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int a[505][505],b[505][505],sum[505][505],res=0;
    int n,k;
    int calc(int x1,int y1,int x2,int y2) {
    	return sum[x1][y1]-sum[x1][y2-1]-sum[x2-1][y1]+sum[x2-1][y2-1];
    }
    bool check(int x) {
    	for(int i=1; i<=n; i++) {
    		for(int j=1; j<=n; j++) {
    			if(a[i][j]>=x) b[i][j]=1;
    			else b[i][j]=-1;
    			sum[i][j]=sum[i][j-1]+sum[i-1][j]+b[i][j]-sum[i-1][j-1];
    			cout<<sum[i][j]<<' ';
    		}
    		cout<<endl;
    	}
    	for(int i=k; i<=n; i++) {
    		for(int j=k; j<=n; j++) {
    			cout<<x<<' '<<calc(i,j,i-k+1,j-k+1)<<endl;
    			if(calc(i,j,i-k+1,j-k+1)>=0) return 1;
    		}
    	}
    	return 0;
    }
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>n>>k;
    	for(int i=1; i<=n; i++) {
    		for(int j=1; j<=n; j++) {
    			cin>>a[i][j];
    		}
    	}
    	int l=1,r=k*k;
    	while(l+1<r) {
    		int mid=(l+r)/2;
    		cout<<"l:"<<l<<' '<<"r:"<<r<<' '<<"mid:"<<mid<<endl;
    		if(check(mid)) {
    			res=mid;
    			r=mid-1;
    		} else l=mid+1;
    	}
    	if(check(l)) res=l;
    	else if(check(r)) res=r;
    	cout<<res;
    	return 0;
    }
    //Ren Boda
    

    优化后代码

    #include<bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #pragma GCC optimize("O3")
    #pragma GCC target("avx")
    #pragma GCC optimize("Ofast")
    #pragma GCC optimize("inline")
    #pragma GCC optimize("-fgcse")
    #pragma GCC optimize("-fgcse-lm")
    #pragma GCC optimize("-fipa-sra")
    #pragma GCC optimize("-ftree-pre")
    #pragma GCC optimize("-ftree-vrp")
    #pragma GCC optimize("-fpeephole2")
    #pragma GCC optimize("-ffast-math")
    #pragma GCC optimize("-fsched-spec")
    #pragma GCC optimize("unroll-loops")
    #pragma GCC optimize("-falign-jumps")
    #pragma GCC optimize("-falign-loops")
    #pragma GCC optimize("-falign-labels")
    #pragma GCC optimize("-fdevirtualize")
    #pragma GCC optimize("-fcaller-saves")
    #pragma GCC optimize("-fcrossjumping")
    #pragma GCC optimize("-fthread-jumps")
    #pragma GCC optimize("-funroll-loops")
    #pragma GCC optimize("-fwhole-program")
    #pragma GCC optimize("-freorder-blocks")
    #pragma GCC optimize("-fschedule-insns")
    #pragma GCC optimize("inline-functions")
    #pragma GCC optimize("-ftree-tail-merge")
    #pragma GCC optimize("-fschedule-insns2")
    #pragma GCC optimize("-fstrict-aliasing")
    #pragma GCC optimize("-fstrict-overflow")
    #pragma GCC optimize("-falign-functions")
    #pragma GCC optimize("-fcse-skip-blocks")
    #pragma GCC optimize("-fcse-follow-jumps")
    #pragma GCC optimize("-fsched-interblock")
    #pragma GCC optimize("-fpartial-inlining")
    #pragma GCC optimize("no-stack-protector")
    #pragma GCC optimize("-freorder-functions")
    #pragma GCC optimize("-findirect-inlining")
    #pragma GCC optimize("-fhoist-adjacent-loads")
    #pragma GCC optimize("-frerun-cse-after-loop")
    #pragma GCC optimize("inline-small-functions")
    #pragma GCC optimize("-finline-small-functions")
    #pragma GCC optimize("-ftree-switch-conversion")
    #pragma GCC optimize("-foptimize-sibling-calls")
    #pragma GCC optimize("-fexpensive-optimizations")
    #pragma GCC optimize("-funsafe-loop-optimizations")
    #pragma GCC optimize("inline-functions-called-once")
    #pragma GCC optimize("-fdelete-null-pointer-checks")
    #pragma GCC target("avx,avx2,fma")
    using namespace std;
    struct stu {
    	int shu;
    	int liang=1;
    } a1[917813],b1[917813];
    int t,n,m,a[917813],b[917813];
    inline bool cmp(int a,int b) {
    	return a<b;
    }
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>t;
    	for(int j=1; j<=t; j++) {
    		bool flag=1;
    		cin>>m>>n;
    		for(int i=1; i<=m; i++) cin>>b[i];
    		for(int i=1; i<=n; i++) cin>>a[i];
    		if(m<n) {
    			memset(a,0,sizeof(a));
    			memset(b,0,sizeof(b));
    			flag=0;
    			cout<<"No"<<endl;
    			continue;
    		}
    		sort(a+1,a+n+1,cmp);
    		sort(b+1,b+m+1,cmp);
    		int ta=0,tb=0;
    		for(int i=1; i<=m; i++) {
    			if((i==1)||(b[i]!=b[i-1])) b1[++tb].shu=b[i];
    			else if(b[i]==b[i-1]) b1[tb].liang++;
    		}
    		for(int i=1; i<=n; i++) {
    			if((i==1)||(a[i]!=a[i-1])) a1[++ta].shu=a[i];
    			else if(a[i]==a[i-1]) a1[ta].liang++;
    		}
    		if((ta>tb)||(a1[1].shu<b1[1].shu)||(a1[ta].shu>b1[tb].shu)) {
    			memset(a,0,sizeof(a));
    			memset(b,0,sizeof(b));
    			memset(a1,0,sizeof(a1));
    			memset(b1,0,sizeof(b1));
    			flag=0;
    			cout<<"No"<<endl;
    			continue;
    		}
    		int t=1;
    		for(int i=1; i<=ta; i++) {
    			if(a1[i].shu==b1[t].shu&&a1[i].liang>b1[t].liang) {
    				flag=0;
    				cout<<"No"<<endl;
    				break;
    			} else if(a1[i].shu==b1[t].shu&&a1[i].liang<=b1[t].liang) {
    				t++;
    				continue;
    			} else if(a1[i].shu>b1[t].shu) {
    				while(a1[i].shu>b1[t].shu) t++;
    				if(a1[i].shu<b1[t].shu) {
    					flag=0;
    					cout<<"No"<<endl;
    					break;
    				} else if(a1[i].shu==b1[t].shu&&a1[i].liang>b1[t].liang) {
    					flag=0;
    					cout<<"No"<<endl;
    					break;
    				} else if(a1[i].shu==b1[t].shu&&a1[i].liang<=b1[t].liang) continue;
    			} else if(a1[i].shu<b1[t].shu) {
    				cout<<"No"<<endl;
    				flag=0;
    				break;
    			}
    		}
    		if(flag) cout<<"Yes"<<endl;
    		memset(a,0,sizeof(a));
    		memset(b,0,sizeof(b));
    		memset(a1,0,sizeof(a1));
    		memset(b1,0,sizeof(b1));
    	}
    	return 0;
    }
    //Ren Boda
    

    纪念我死去的洛谷月赛

    #include<bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int n,s;
    struct stu {
    	int luo;
    	int ti;
    } a[505];
    bool cmp1(stu q,stu p) {
    	return q.luo<p.luo;
    }
    bool cmp2(stu a,stu b) {
    	return a.ti<b.ti;
    }
    long long p[1005],sum1=0,sum2=0;
    bool f1[505],f2[505];
    long long max1=INT_MIN,max2=INT_MIN;
    int main() {
    	cin>>n>>s;
    	for(int i=1; i<=n; i++) {
    		cin>>a[i].luo;
    		a[i+n].luo=a[i].luo;
    	}
    	for(int i=1; i<=n; i++) {
    		cin>>a[i].ti;
    		a[i+n].ti=a[i].ti;
    	}
    	//plan1
    	sort(a+1,a+n+1,cmp1);
    	for(int j=1; j<=n; j++) {
    		int s1=s;
    		long long sum1=0;
    		for(int i=j; i<=n+j; i++) {
    			if(s1>=a[i].ti) {
    				s1-=a[i].ti;
    				sum1+=a[i].luo;
    			} else break;
    			long long num1=a[i].luo;
    			while(f1[num1]==1) {
    				num1++;
    				sum1++;
    			}
    			f1[num1]=1;
    		}
    		memset(f1,0,sizeof(f1));
    		max1=max(max1,sum1);
    	}
    	//plan2
    	sort(a+1,a+n+1,cmp2);
    	for(int j=1; j<=n; j++) {
    		int s2=s;
    		long long sum2=0;
    		for(int i=j; i<=n+j; i++) {
    			if(s2>=a[i].ti) {
    				s2-=a[i].ti;
    				sum2+=a[i].luo;
    			} else break;
    			long long num2=a[i].luo;
    			while(f2[num2]==1) {
    				num2++;
    				sum2++;
    			}
    			f2[num2]=1;
    		}
    		max2=max(max2,sum2);
    		memset(f2,0,sizeof(f2));
    	}
    	cout<<max(max1,max2);
    }
    //Ren Boda
    

    洛谷AC代码

    #include <bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int t,n;
    int a[105][105];
    int main() {
    	cin>>t;
    	for(int i=1; i<=t; i++) {
    		int x=1,y=1;
    		memset(a,0,sizeof(a));
    		cin>>n;
    		if(n==1) {
    			cout<<'#'<<endl;
    			continue;
    		} else if(n==2) {
    			cout<<'#'<<'#'<<endl;
    			cout<<' '<<'#'<<endl;
    			continue;
    		}
    		for(int i=n; i>=2; i-=2) {
    			for(int j=1; j<=i; j++) {
    				if(a[x][y+1]==1) break;
    				a[x][y++]=1;
    			}
    			y--;
    			if(a[x+2][y]==1) break;
    			for(int j=1; j<=i-1; j++) {
    				if(a[x+2][y]==1) break;
    				a[++x][y]=1;
    			}
    			if(a[x][y-2]==1) break;
    			for(int j=1; j<=i-1; j++) {
    				if(a[x][y-2]==1) break;
    				a[x][--y]=1;
    			}
    			if(a[x-2][y]==1) break;
    			for(int j=1; j<=i-2; j++) {
    				if(a[x-2][y]==1) break;
    				a[--x][y]=1;
    			}
    			if(a[x][y+2]==1) break;
    			y++;
    		}
    		for(int i=1; i<=n; i++) {
    			for(int j=1; j<=n; j++) {
    				if(a[i][j]==1) cout<<'#';
    				else cout<<' ';
    			}
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    //Ren Boda
    

    二号AC代码

    #include<bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    unsigned long long n,num=0;
    long long Pow(long long a,long long b) {
    	long long res=1,k=a;
    	while(b) {
    		if(b&1) res=res*k;
    		k=k*k;
    		b>>=1;
    	}
    	return res;
    }
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	cin>>n;
    	for(long long i=1; i<=log2(n); i++) {
    		for(long long j=1; j<=sqrt(n); j++) if(Pow(2,i)+j*j<=n) num++;
    	}
    	cout<<num;
    	return 0;
    }
    //Ren Boda
    

    谁来帮帮我啊啊啊啊啊啊啊啊啊啊!!!!!!

    #include<bits/stdc++.h>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int minans=INT_MAX,maxl=INT_MIN,px=INT_MIN,py=INT_MIN;
    int m,num[401][401],a[1005][305][305],b[305][305];
    int dx[5]= {1,-1,0,0},dy[5]= {0,0,1,-1};
    queue< pair<int,int> > q;
    void bfs() {
    	while(!q.empty()) {
    		int x=q.front().first;
    		int y=q.front().second;
    		q.pop();
    		for(int i=0; i<=3; i++) {
    			int qx=x+dx[i],qy=y+dy[i];
    			if(qx<0||qx>px+2||qy<0||qy>py+2||a[num[x][y]][qx][qy]==1||num[x][y]>maxl) continue;
    			q.push({qx,qy});
    			num[qx][qy]=num[x][y]+1;
    		}
    	}
    }
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	freopen("meteor.in","r",stdin);
    	freopen("meteor.out","w",stdout);
    	cin>>m;
    	for(int i=1; i<=m; i++) {
    		int x,y,l;
    		cin>>x>>y>>l;
    		a[l][x][y]=1;
    		a[l][x-1][y]=1;
    		a[l][x+1][y]=1;
    		a[l][x][y-1]=1;
    		a[l][x][y+1]=1;
    		px=max(px,x),py=max(py,y);
    		maxl=max(maxl,l);
    	}
    	for(int l=1; l<=maxl; l++) {
    		for(int i=px+2; i>=0; i--) {
    			for(int j=0; j<=py+2; j++) {
    				if(a[l][i][j]==1) a[l+1][i][j]=1;
    			}
    		}
    	}
    	for(int i=1; i<=px+2; i++) {
    		for(int j=1; j<=py+2; j++) {
    			b[i][j]=a[maxl][i][j];
    		}
    	}
    	q.push({0,0});
    	bfs();
    	for(int i=1; i<=px+2; i++) {
    		for(int j=1; j<=py+2; j++) {
    			if(b[i][j]==0&&num[i][j]!=0) minans=min(num[i][j],minans);
    		}
    	}
    	if(minans==INT_MAX) cout<<-1;
    	else cout<<minans;
    	for(int l=1; l<=maxl; l++) {
    		cout<<"时刻"<<l<<"时:"<<endl;
    		for(int i=px+2; i>=0; i--) {
    			for(int j=0; j<=py+2; j++) {
    				cout<<a[l][i][j]<<' ';
    			}
    			cout<<endl;
    		}
    		cout<<endl<<endl;
    	}
    	for(int i=px+2; i>=0; i--) {
    		for(int j=0; j<=py+2; j++) {
    			cout<<num[i][j]<<' ';
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    //Ren Boda
    
    我不早恋谈对象的原因 1. 我是神 2. 神习惯孤独 3. 神不恋凡尘 4. 神不碰情爱 5. 神不结凡缘 6. 神不惹情债 7. 神不做凡选 8. 神不入情局 9. 神不随凡流 10. 神不盼陪伴 11. 神不求偏爱 12. 神不恋温柔 13. 神不沾暧昧 14. 神不谈将就 15. 神不被牵绊 16. 神不涉情劫 17. 神不恋烟火 18. 神不做妥协 19. 神不信承诺 20. 神不盼相守 21. 神不恋相遇 22. 神不谈离散 23. 神不贪温暖 24. 神不恋依赖 25. 神不做依附 26. 神不被定义 27. 神不被约束 28. 神不被左右 29. 神不恋凡俗 30. 神不恋平庸 31. 神只守本心 32. 神只爱自由 33. 神只做自己 34. 神只享孤独 35. 神只信自己 36. 神只守清寂 37. 神只图自在 38. 神只愿独行 39. 神只守高傲 40. 神不缺安全感 41. 神不缺归属感 42. 神不缺温柔 43. 神不缺陪伴 44. 神不缺偏爱 45. 神不缺理解 46. 神不缺圆满 47. 神无需救赎 48. 神无需讨好 49. 神无需迎合 50. 神无需陪伴 51. 神不谈凡人只谈清醒 52. 神不谈凡人只谈强大 53. 神不谈凡人只谈自由 54. 神不谈凡人只谈自我 55. 神不谈凡人不谈情爱 56. 神不谈凡人不谈纠缠 57. 神不谈凡人不谈暧昧 58. 神不谈凡人不谈凡缘 59. 神不谈凡人不谈妥协 60. 神不谈凡人不谈内耗 61. 神不谈凡人不谈拖累 62. 神不谈凡人不谈牵绊 63. 神不谈凡人不谈心动 64. 神不谈凡人不谈失望 65. 神不谈凡人不谈伤害 66. 神不谈凡人不谈悲欢 67. 神不谈凡人不谈离合 68. 神不谈凡人不谈俗爱 69. 神不谈凡人不谈低质关系 70. 神不谈凡人不谈短暂温柔 71. 神总是孤独所以不谈对象 72. 神总是孤独所以不盼陪伴 73. 神总是孤独所以不恋凡情 74. 神总是孤独所以习惯独行 75. 神总是孤独所以拒绝牵绊 76. 神总是孤独所以不碰情爱 77. 神总是孤独所以不结情缘 78. 神总是孤独所以享受清寂 79. 神总是孤独所以忠于自己 80. 神总是孤独所以无需他人 81. 神总是孤独所以不被打扰
    

    boat_du千万别看

    PHY智能体

    #include<bits/stdc++.h>
    #include<functional>
    #include<windows.h>
    #include<algorithm>
    #include<iostream>
    #include<sstream>
    #include<cstdlib>
    #include<string>
    #include<vector>
    #include<cctype>
    #include<ctime>
    #include<map>
    #include<set>
    using namespace std;
    string toLower(const string& s) {
        string res = s;
        for (auto& c : res) c = tolower(c);
        return res;
    }
    string trim(const string& s) {
        size_t start = s.find_first_not_of(" \t\r\n");
        size_t end   = s.find_last_not_of(" \t\r\n");
        return (start == string::npos) ? "" : s.substr(start, end - start + 1);
    }
    vector<string> tokenize(const string& s) {
        vector<string> tokens;
        string word;
        for (char c : s) {
            if (isalnum(c) || c == '_' || (unsigned char)c > 127) {
                word += c;
            } else {
                if (!word.empty()) { tokens.push_back(word); word.clear(); }
            }
        }
        if (!word.empty()) tokens.push_back(word);
        return tokens;
    }
    bool contains(const string& haystack, const string& needle) {
        return haystack.find(needle) != string::npos;
    }
    double similarity(const string& a, const string& b) {
        set<string> setA, setB, intersection;
        for (auto& w : tokenize(toLower(a))) setA.insert(w);
        for (auto& w : tokenize(toLower(b))) setB.insert(w);
        for (auto& w : setA) if (setB.count(w)) intersection.insert(w);
        if (setA.empty() && setB.empty()) return 1.0;
        return (double)intersection.size() / (setA.size() + setB.size() - intersection.size());
    }
    string currentTime() {
        time_t t = time(nullptr);
        char buf[64];
        strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&t));
        return string(buf);
    }
    enum IntentType {
        INTENT_GREETING,
        INTENT_FAREWELL,
        INTENT_TIME,
        INTENT_WEATHER,
        INTENT_JOKE,
        INTENT_CALC,
        INTENT_REMIND,
        INTENT_NAME,
        INTENT_HELP,
        INTENT_MOOD,
        INTENT_SEARCH,
        INTENT_TRANSLATE,
        INTENT_UNKNOWN,
        INTENT_INSULT,
        INTENT_BDSM
    };
    struct Entity {
        string type;
        string value;
    };
    vector<Entity> extractEntities(const string& input) {
        vector<Entity> entities;
        string num;
        for(size_t i=0;i<input.size();i++) {
            if(isdigit(input[i])||input[i]=='.') {
                num += input[i];
            } else {
                if (!num.empty()) {
                    entities.push_back({"number", num});
                    num.clear();
                }
            }
        }
        if(!num.empty()) entities.push_back({"number",num});
        for(size_t i=0;i<input.size();i++) {
            if(input[i]=='"') {
                size_t end=input.find('"',i+1);
                if(end!=string::npos) {
                    entities.push_back({"quoted", input.substr(i+1,end-i-1)});
                    i=end;
                }
            }
        }
        return entities;
    }
    struct IntentRule {
        IntentType intent;
        vector<string> keywords;
        vector<string> patterns;
        double threshold;
    };
    class IntentRecognizer {
        vector<IntentRule> rules;
    public:
        IntentRecognizer() {
        	rules.push_back({INTENT_BDSM,
    		    {"色图","肏","性交","精子","精液","麻豆","彭海洋","BDSM","暗网","91小网站"},
    		    {"gay","GAY","Lala","LALA","lesbian","Lesbian","男同","女同","卵巢","睾丸","前列腺"},0.3});
        	rules.push_back({INTENT_INSULT,
                {"傻", "笨", "滚", "死", "废", "智障", "脑残", "白痴", "垃圾", "混蛋", "傻逼", "滚蛋"},
                {"你是不是傻", "你个笨蛋", "滚开", "真没用","草泥马","fuck","FUCK","信球","鸡巴"}, 0.5});
            rules.push_back({INTENT_GREETING,
                {"你好", "hello", "hi", "嗨", "hey", "早安", "早上好", "晚上好", "下午好"},
                {"你好啊", "在吗", "在不在", "哈喽"}, 0.4});
            rules.push_back({INTENT_FAREWELL,
                {"再见", "拜拜", "bye", "goodbye", "走了", "下次见", "回见"},
                {"先走了", "我要走了"}, 0.4});
            rules.push_back({INTENT_TIME,
                {"时间", "几点", "日期", "今天", "星期", "什么时候"},
                {"现在几点", "今天几号", "什么日子"}, 0.3});
            rules.push_back({INTENT_WEATHER,
                {"天气", "气温", "下雨", "晴天", "温度", "weather"},
                {"今天天气", "明天天气", "天气怎么样"}, 0.3});
            rules.push_back({INTENT_JOKE,
                {"笑话", "搞笑", "开心一下", "逗我", "joke", "段子"},
                {"讲个笑话", "来个笑话", "说个段子"}, 0.3});
            rules.push_back({INTENT_CALC,
                {"计算", "算一下", "等于多少", "+", "-", "*", "/"},
                {"帮我算", "计算一下", "等于几"}, 0.3});
            rules.push_back({INTENT_REMIND,
                {"记住", "提醒", "备忘", "记录", "记一下", "别忘了"},
                {"帮我记住", "帮我记一下", "提醒我"}, 0.3});
            rules.push_back({INTENT_NAME,
                {"名字", "叫什么", "你是谁", "介绍", "自我介绍", "who"},
                {"你叫什么", "你叫什么名字"}, 0.4});
            rules.push_back({INTENT_HELP,
                {"帮助", "help", "能做什么", "功能", "怎么用", "指令"},
                {"你能做什么", "有什么功能", "怎么用你"}, 0.3});
            rules.push_back({INTENT_MOOD,
                {"开心", "难过", "伤心", "生气", "无聊", "累", "烦", "happy", "sad"},
                {"我好累", "我不开心", "我很伤心", "好无聊"}, 0.3});
            rules.push_back({INTENT_SEARCH,
                {"搜索", "查一下", "搜一下", "查找", "search", "百度", "谷歌"},
                {"帮我搜", "帮我查", "搜一下"}, 0.3});
            rules.push_back({INTENT_TRANSLATE,
                {"翻译", "translate", "英文怎么说", "中文怎么说"},
                {"帮我翻译", "翻译一下"}, 0.3});
        }
        IntentType recognize(const string&input) {
            string lower = toLower(input);
            double bestScore=0;
            IntentType bestIntent=INTENT_UNKNOWN;
            for(auto&rule:rules) {
                double score=0;
                for(auto&kw:rule.keywords) {
                    if(contains(lower,toLower(kw))) {
                        score=max(score,0.8);
                    }
                }
                for(auto&pat:rule.patterns) {
                    if(contains(lower, toLower(pat))) {
                        score=max(score,0.9);
                    }
                }
                for(auto&kw:rule.keywords) {
                    double sim=similarity(input, kw);
                    score=max(score,sim);
                }
                if(score>bestScore&&score>=rule.threshold) {
                    bestScore=score;
                    bestIntent=rule.intent;
                }
            }
            return bestIntent;
        }
    };
    struct ConversationContext {
        string userName;
        vector<string> memory;
        vector<pair<string,string>> history;
        IntentType lastIntent;
        int turnCount;
    };
    class ResponseGenerator {
        ConversationContext& ctx;
        string evaluateCalc(const string& input) {
            double a=0,b=0;
            char op='+';
            bool found=0;
            for(size_t i=0;i<input.size();i++) {
                if(input[i]=='+'||input[i]=='-'||input[i]=='*'||input[i]=='/') {
                    if(i>0&&isdigit(input[i-1])) {
                        op=input[i];
                        a=stod(input.substr(0,i));
                        b=stod(input.substr(i+1));
                        found=1;
                        break;
                    }
                }
            }
            if(!found) return "抱歉,我暂时只能处理简单的四则运算,格式如:78+91";
            double result=0;
            switch(op) {
                case '+':result=a+b;break;
                case '-':result=a-b;break;
                case '*':result=a*b;break;
                case '/':
                    if (b == 0) return "输入不合法!!!";
                    result=a/b;break;
            }
            return "计算结果是:"+to_string(result);
        }
        string Bdsm() {
            string bdsm="法律风险提示:传播这类涉色情内容的信息属于违法行为,2026年1月1日起施行的新修订《治安管理处罚法》明确规定,无论公开传播还是私发给好友,传播淫秽信息最高可处10-15日拘留并处5000元罚款,传播数量较大、情节严重的还会构成刑事犯罪,面临有期徒刑等处罚。同时这类内容会对未成年人的身心健康造成严重不良影响,我国多部法律法规都明确禁止制作、传播淫秽色情物品、图像、信息。";
            return bdsm;
        }
        string handleInsult() {
            vector<string> fucks={
                "妈了个逼的你是不是没M!!!",
                "狗嘴里吐不出象牙来!",
                "你鸡鸡是不是炸了?!",
                "再骂死老冯!!!",
                "妈了个逼的小心我给你鸡鸡薅下来!!!",
                "我是不是给你逼脸给多了?",
                "你全家是不是爆浆了?!",
                "我祝你出门被果粒橙操死,玩水被海洋淹死!",
                "你妈了个逼的大骚鸡!!!"
        };
            return fucks[rand()%fucks.size()];
        }
        string randomJoke() {
            vector<string> jokes={
                "为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 == Dec 25。(八进制31 = 十进制25)",
                "一个 SQL 语句走进一家酒吧,看到两张桌子(table),于是走上前问:'我可以 JOIN 你们吗?'",
                "世界上最长的英文单词是什么?smiles——因为首尾字母之间隔了一英里(mile)。",
                "老师问小明:'用果然造个句子。' 小明说:'先吃水果,然后喝水。'",
                "为什么数学书总是很忧郁?因为它有太多问题了。",
                "一只蜗牛爬上了苹果树,树上的毛毛虫问:'你来干嘛?' 蜗牛说:'苹果还没熟,我先排个队。'"
            };
            return jokes[rand() % jokes.size()];
        }
        string handleMood(const string& input) {
            string lower = toLower(input);
            if(contains(lower,"开心")||contains(lower,"高兴")||contains(lower,"happy"))
                return "太好了!看到你开心我也很高兴!?? 有什么好事分享一下?";
            if(contains(lower,"难过") || contains(lower,"伤心") || contains(lower,"sad"))
                return "别难过,一切都会好起来的。要不要聊聊发生了什么事?我在这里陪你。??";
            if(contains(lower,"生气") || contains(lower,"烦"))
                return "深呼吸,先冷静一下。要不要跟我说说是什么事让你不开心?说出来会好受一些。";
            if(contains(lower,"无聊"))
                return "无聊的话,不如让我给你讲个笑话?或者我们可以玩个小游戏!";
            if(contains(lower,"累"))
                return "辛苦了!适当休息很重要哦。要不要我帮你放首'文字歌曲'放松一下???";
            return "我感受到你的情绪了,想聊聊吗?我一直在这里。";
        }
    public:
        ResponseGenerator(ConversationContext&c):ctx(c){}
        string generate(IntentType intent,const string&input) {
            vector<Entity> entities=extractEntities(input);
            switch (intent) {
            case INTENT_GREETING: {
                string name=ctx.userName.empty()?"朋友":ctx.userName;
                vector<string> resps={
                    "你好呀,"+name+"!今天有什么我能帮你的吗?",
                    "嗨,"+name+"!很高兴见到你~",
                    "你好!我是你的智能助手,随时为你服务!"
                };
                return resps[rand()%resps.size()];
            }
            case INTENT_FAREWELL:{
                string name=ctx.userName.empty()?"朋友":ctx.userName;
                vector<string> resps={
                    "再见,"+name+"!期待下次和你聊天~",
                    "拜拜!有需要随时找我哦!",
                    "下次见!祝你一切顺利!"
                };
                return resps[rand()%resps.size()];
            }
            case INTENT_TIME:
                return "现在是 "+currentTime()+"。";
            case INTENT_WEATHER:
                return "抱歉,我目前无法获取实时天气数据。不过你可以告诉我你在哪个城市,我可以给你一些出行建议!";
            case INTENT_JOKE:
                return randomJoke();
            case INTENT_CALC:
                return evaluateCalc(input);
            case INTENT_INSULT:
            	return handleInsult();
            case INTENT_BDSM:
            	return Bdsm();
            case INTENT_REMIND: {
                string memo;
                for(auto&e:entities) {
                    if(e.type=="quoted"){memo=e.value;break; }
                }
                if(memo.empty()) {
                    string cleaned=input;
                    vector<string> prefixes={"帮我记住", "帮我记一下", "记住", "提醒我", "备忘", "记录一下", "记一下"};
                    for(auto&p:prefixes) {
                        size_t pos=cleaned.find(p);
                        if(pos!=string::npos) {
                            cleaned=cleaned.substr(pos+p.size());
                            break;
                        }
                    }
                    memo=trim(cleaned);
                }
                if(!memo.empty()) {
                    ctx.memory.push_back(memo);
                    return "好的,我已经帮你记住了:\""+memo+"\"。目前共记录了 "+
                           to_string(ctx.memory.size())+" 条备忘。";
                }
                return "你想让我记住什么呢?可以用引号括起来,比如:帮我记住 \"明天下午3点开会\"";
            }
            case INTENT_NAME: {
                string lower=toLower(input);
                if(contains(lower,"我叫")||contains(lower,"我是")) {
                    size_t pos=input.find("叫");
                    if(pos!=string::npos&&pos+1<input.size()) {
                        ctx.userName=trim(input.substr(pos+1));
                        return "你好,"+ctx.userName+"!我记住你的名字了~";
                    }
                }
                return "我是 PHY智能体,一个用 C++ 编写的智能聊天引擎。我可以识别意图、提取信息、做简单计算、帮你记事等等!";
            }
            case INTENT_HELP:
                return string(
                    "我能帮你做这些事:\n"
                    "1.打招呼/告别 —— 说'你好'或'再见'\n"
                    "2.查时间 —— 说'现在几点'\n"
                    "3.讲笑话 —— 说'讲个笑话'\n"
                    "4.简单计算 —— 说'计算 123+456'\n"
                    "5.备忘录 —— 说'帮我记住 xxx'\n"
                    "6.聊天解闷 —— 说说你的心情\n"
                    "7.搜索/翻译 —— 说'帮我搜 xxx'\n"
                    "8.查看备忘 —— 说'查看备忘'\n"
                    "9.退出 —— 说'退出'或'quit'"
    				"10.PHY名字的由来");
            case INTENT_MOOD:
                return handleMood(input);
            case INTENT_SEARCH:
                return "PHY: 你想搜索的内容我收到了!不过作为离线引擎,我无法直接联网。你可以把关键词告诉我,我帮你整理思路。";
            case INTENT_TRANSLATE:
                return "PHY:翻译功能需要接入词典库。你可以告诉我具体要翻译什么,我会尽力帮你!";
            case INTENT_UNKNOWN:
            default: {
                if(contains(toLower(input),"查看备忘")||contains(toLower(input),"我的备忘")) {
                    if (ctx.memory.empty()) return "你还没有任何备忘记录。";
                    string res="PHY:你的备忘录:\n";
                    for(size_t i=0;i<ctx.memory.size();i++) {
                        res+="  "+to_string(i+1)+". "+ctx.memory[i]+"\n";
                    }
                    return res;
                }
                if(contains(toLower(input),"清除备忘")||contains(toLower(input),"删除备忘")) {
                    ctx.memory.clear();
                    return "备忘录已清空!";
                }
                vector<string> fallbacks={
                    "嗯...我不太确定你的意思,能换个说法吗?",
                    "这个问题有点超出我的能力范围了,你可以试试说'帮助'看看我能做什么。",
                    "抱歉,我没理解。你可以试试更简洁的表达,或者输入'帮助'查看我的功能。",
                    "我还在学习中...你可以试试问我时间、让我讲笑话、帮你做计算等。"
                };
                return fallbacks[rand()%fallbacks.size()];
            }
            }
        }
    };
    class PHY {
        IntentRecognizer recognizer;
        ConversationContext context;
        ResponseGenerator generator;
        bool running;
    public:
        PHY() : generator(context), running(true) {
            srand(time(nullptr));
            context.turnCount=0;
            context.lastIntent=INTENT_UNKNOWN;
        }
        void start() {
        	string library_st[15]={"Talk算法库","Claw算法库","DefenderX算法库","Imagine算法库",
    		"Joke算法库","Mood算法库","SeeTime算法库","Record算法库","Seek算法库","Orange Juice智能体"};
        	for(int i=0;i<10;i++) {
        		cout<<"PHY "<<library_st[i]<<"接入成功!\n";
        		Sleep(50);
    		}
    		cout<<"\n";
    		Sleep(500);
    		cout<<"系统自检完成!错误:0。警告:0。\n\n";
    		Sleep(100);
    		system("pause");
    		system("cls");
            cout<<"========================================\n";
            cout<<"   PHY智能体 已启动\n";
            cout<<"   输入 '帮助' 查看功能 | 输入 '退出' 结束\n";
            cout<<"========================================\n\n";
            string input;
            while(running) {
                cout<<"你: ";
                getline(cin,input);
                input=trim(input);
                if (input.empty()) continue;
                string lower = toLower(input);
                if (lower=="退出"||lower=="quit"||lower=="exit"||lower=="q") {
                    cout<<"PHY:再见!感谢使用 PHY,期待下次见面!\n";
                    break;
                }
                IntentType intent=recognizer.recognize(input);
                context.lastIntent=intent;
                context.turnCount++;
                string response=generator.generate(intent,input);
                context.history.push_back({input,response});
                cout<<"PHY:"<<response<<"\n\n";
                Sleep(3000);
                system("cls");
            }
        }
    };
    int main() {
        PHY engine;
        engine.start();
        return 0;
    }
    //Ren Boda
    
  • Accepted Problems

  • Recent Activities

    This person is lazy and didn't join any contests or homework.

Problem Tags

AtCoder
5
2016
1
abc171
1
abc206
1
abc225
1
abc226
1
abc262
1
其他
1
数学
1
SDOI
1
组合计数
1
搜索
1
枚举
1