社区讨论

ZJ迷惑行为

灌水区参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo186274
此快照首次捕获于
2023/10/22 16:46
2 年前
此快照最后确认于
2023/11/04 10:26
2 年前
查看原帖
我自己的整理出来如下:
  1. Skywave
CPP
#include<bits/stdc++.h>
#define int long long
int c[114514],v[114514],qz[114514],n,t;
std::stack<int>S;
signed main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	scanf("%lld%lld",&n,&t);
	for(int i=1;i<n;i++)scanf("%lld",&v[i]);
	for(int i=1;i<=n;i++)scanf("%lld",&c[i]);
	v[n]=0;
	for(int i=2;i<=n;i++)qz[i]=qz[i-1]+v[i-1];
	int p=n-1;
	S.push(n);
	while(1){
		int mn=p;
		for(int i=p-1;i>0;i--)if(c[i]<c[mn])mn=i;
		S.push(mn);
		p=mn-1;
		if(!p)break;
	}
	int nlc=0,Skywave=1,Ans=0;
	while(!S.empty()){
		int u=S.top();
		S.pop();
		int Len=qz[u]-qz[Skywave];
		int l=0,r=Len,ans=Len;
		while(l<=r){
			int mid=(l+r)>>1;
			if(nlc+mid*t>=Len)ans=mid,r=mid-1;
			else l=mid+1;
		}
		Ans+=(ans*c[Skywave]);
		nlc=nlc+ans*t-Len;
		Skywave=u;
	}
	printf("%lld",Ans);
	return 0;//forget
}
  1. 抽象代码
CPP
#include<bits/stdc++.h>
int n;
int main(){
	freopen("apple.in","r",stdin);
	freopen("apple.out","w",stdout);
	scanf("%d",&n);
	int ans1=0,ans2=-1;
	while(n>0){
		ans1++;
		if(!((n%3)^1)&&!(ans2^(~0)))ans2=ans1;
		n-=((n-1)/3+1);
	}
	printf("%d %d",ans1,ans2);
	return 0;
}
  1. 114514
CPP
#include<bits/stdc++.h>
using namespace std;
struct node{
	public:
		int zd,val;
};
int n,m,k;
int dis[114514];
vector<int>dis2[114514];
int inq[114514]={};
vector<node>G[114514];
queue<int>q;
bool p=0;
void spfa(){
	memset(dis,-1,sizeof(dis));
	q.push(1);
	dis[1]=k;
	inq[1]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(node &v:G[u]){
			if(dis[v.zd]==-1||dis[u]+1<dis[v.zd]){
				dis[v.zd]=dis[u]+1;
				if(dis[v.zd]<v.val)dis[v.zd]=v.val;
				if(inq[v.zd]==0){
					q.push(v.zd);
					inq[v.zd]=1;
				}
			}
		}
		inq[u]=0;
	}
	if(dis[n]%k==0)printf("%d",dis[n]);
	else{cout<<-1;}
}
void spfa2(){
	q.push(1);
	dis2[1].push_back(k);
	inq[1]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(node &v:G[u]){
			for(int &du:dis2[u]){
				dis2[v.zd].push_back(du+1);
				if(inq[v.zd]==0){
					q.push(v.zd);
					inq[v.zd]=1;
				}
			}
		}
		inq[u]=0;
	}
	int mn=INT_MAX;
	for(auto &uu:dis2[n])if(uu%k==0){mn=min(mn,uu);}
	if(mn!=INT_MAX)cout<<mn;
	else cout<<-1;
}
int main(){
	freopen("bus.in","r",stdin);
	freopen("bus.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;i++){
		int u,v,c;
		scanf("%d%d%d",&u,&v,&c);
		if(u>v)p=1;
		node p;
		p.zd=v;
		p.val=c;
		G[u].push_back(p);
	}
	if(n>10||p==0)spfa();
	else spfa2();
	return 0;
}
  1. SqrtSecond
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
bool SqrtSecond(int k){
	if(k==0)return 1;
	int l=1,r=k;
	while(l<=r){
		int mid=(l+r)>>1;
		if(mid*mid==k)return 1;
		else if(mid*mid<k)l=mid+1;
		else r=mid-1;
	}
	return 0;
}
int Sqrtsecond(int k){
	if(k==0)return 0;
	int l=1,r=k;
	while(l<=r){
		int mid=(l+r)>>1;
		if(mid*mid==k)return mid;
		else if(mid*mid<k)l=mid+1;
		else r=mid-1;
	}
	return -1;
}
int Mygcd(int a,int b){
	if(a<0)a=-a;
	if(b<0)b=-b;
	while(b^=a^=b^=a%=b);
	return a;
}
void Solveqwq(int a,int b,int c){
	int pp=b*b-((a*c)*4);
	int qq=(a*2);
	if(pp<0){
		printf("NO\n");
		return;
	}else if(pp==0){
		int Js1=-b;
		if(Js1==0){
			printf("0\n");
			return;
		}
		int tmpg=Mygcd(Js1,qq);
		Js1/=tmpg;
		qq/=tmpg;
		if(qq==1)printf("%d\n",Js1);
		else if(qq>0)printf("%d/%d\n",Js1,qq);
		else if(qq!=-1)printf("%d/%d\n",-Js1,-qq);
		else printf("%d\n",-Js1);
		return;
	}else{
		bool isSqint=SqrtSecond(pp);
		if(isSqint==1){
			int Js1;
			if(qq>0)Js1=-b+Sqrtsecond(pp);
			else Js1=-b-Sqrtsecond(pp);
			if(Js1==0){
				printf("0\n");
				return;
			}
			int tmpg=Mygcd(Js1,qq);
			Js1/=tmpg;
			qq/=tmpg;
			if(qq==1)printf("%d\n",Js1);
			else if(qq>0)printf("%d/%d\n",Js1,qq);
			else if(qq!=-1)printf("%d/%d\n",-Js1,-qq);
			else printf("%d\n",-Js1);
			return;
		}
		int Js1=-b;
		if(Js1!=0){
			int tmpg=Mygcd(Js1,qq);
			Js1/=tmpg;
			qq/=tmpg;
			if(qq==1)printf("%d+",Js1);
			else if(qq>0)printf("%d/%d+",Js1,qq);
			else if(qq!=-1)printf("%d/%d+",-Js1,-qq);
			else printf("%d+",-Js1);
			qq*=tmpg;
		}
		int mx=1;
		for(int i=2;i*i<=pp;i++)if(pp%(i*i)==0)mx=i;
		int OutSqrt=mx;
		int InSqrt=pp/OutSqrt/OutSqrt;
		int tmpg=Mygcd(OutSqrt,qq);
		OutSqrt/=tmpg;
		qq/=tmpg;
		if(InSqrt==1){
			if(qq==1||qq==-1){
				if(OutSqrt!=1)printf("%d\n",OutSqrt,InSqrt);
				else printf("1\n",InSqrt);
			}else{
				if(OutSqrt!=1)printf("%d/%d\n",OutSqrt,InSqrt,abs(qq));
				else printf("1/%d\n",InSqrt,abs(qq));
			}
			return;
		}
		if(qq==1||qq==-1){
			if(OutSqrt!=1)printf("%d*sqrt(%d)\n",OutSqrt,InSqrt);
			else printf("sqrt(%d)\n",InSqrt);
		}else{
			if(OutSqrt!=1)printf("%d*sqrt(%d)/%d\n",OutSqrt,InSqrt,abs(qq));
			else printf("sqrt(%d)/%d\n",InSqrt,abs(qq));
		}
		return;
	}
}
int main(){
	freopen("uqe.in","r",stdin);
	freopen("uqe.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		Solveqwq(a,b,c);
	}
	return 0;
}//100+ /fn
S 组我没有迷惑行为/kk
大家可以跟帖发下,供别人整合()

回复

4 条回复,欢迎继续交流。

正在加载回复...