社区讨论
ZJ迷惑行为
灌水区参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo186274
- 此快照首次捕获于
- 2023/10/22 16:46 2 年前
- 此快照最后确认于
- 2023/11/04 10:26 2 年前
我自己的整理出来如下:
- Skywave
#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
}
- 抽象代码
#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;
}
- 114514
#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;
}
- SqrtSecond
#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 条回复,欢迎继续交流。
正在加载回复...