2021牛客暑期多校训练营2,签到题CDFKI
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021牛客暑期多校训练营2,签到题CDFKI相关的知识,希望对你有一定的参考价值。
2021牛客暑期多校训练营2
题号 标题 已通过代码 通过率 团队的状态
A Arithmetic Progression 点击查看 6/72 未通过
B Cannon 点击查看 34/104 未通过
C Draw Grids 点击查看 1537/2307 通过(结论-奇偶性)
D Er Ba Game 点击查看 1588/3007 通过(模拟)
E Gas Station 点击查看 1/20 未通过
F Girlfriend 点击查看 620/3053 通过(计算几何)
G League of Legends 点击查看 27/372 未通过
H Olefin 点击查看 7/17 未通过
I Penguins 点击查看 590/1301 通过(四维BFS)
J Product of GCDs 点击查看 79/1721 未通过
K Stack 点击查看 824/6451 通过(单调栈)
L WeChat Walk 点击查看 23/177 未通过
//D
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int calc(int a, int b){
if(a>b)swap(a,b);
if(a==2 && b==8)return 1e9+10;
if(a==b)return 100000*a;
return 1000*((a+b)%10)+b;
}
int main(){
int T; cin>>T;
while(T--){
int a, b, c, d; cin>>a>>b>>c>>d;
int ans1 = calc(a,b), ans2 = calc(c,d);
if(ans1>ans2)cout<<"first\\n";
else if(ans1<ans2)cout<<"second\\n";
else cout<<"tie\\n";
}
return 0;
}
//I
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
string s[2][30];
struct node{int x1,y1,x2,y2,step,id;};
int dy[][4]={{-1,1,0,0},{1,-1,0,0}};
int dx[][4]={{0,0,-1,1},{0,0,-1,1}};
int vis[25][25][25][25];
int check(int x,int y,int i){if(x>=0&&x<=19&&y>=0&&y<=19&&s[i][x][y]=='.')return 1;return 0;}
int tot=1, ed, op[25*25*25*25], pre[25*25*25*25];//路径打印
map<int, node>ma;
int bfs(){
queue<node>q;
q.push(node{19,19,19,0,0,1});
vis[19][19][19][0] = 1;
op[1]=-1; ma[1]=q.front();
while(q.size()){
node t = q.front(); q.pop();
if(t.x1==0&&t.y1==19&&t.x2==0&&t.y2==0){ed=t.id;return t.step;}
for(int i = 0; i < 4; i++){
node nt = t;
nt.x1 += dx[0][i]; nt.y1 += dy[0][i];
nt.x2 += dx[1][i]; nt.y2 += dy[1][i];
nt.step++;
if(!check(nt.x1,nt.y1,0))nt.x1=t.x1,nt.y1=t.y1;
if(!check(nt.x2,nt.y2,1))nt.x2=t.x2,nt.y2=t.y2;
if(vis[nt.x1][nt.y1][nt.x2][nt.y2])continue;
vis[nt.x1][nt.y1][nt.x2][nt.y2] = 1;
nt.id=++tot; q.push(nt);
ma[nt.id] = nt; pre[nt.id] = t.id; op[nt.id] = i;//路径打印
}
}
}
void print(int x){
if(!x)return; print(pre[x]);
if(op[x]==0)printf("L");
if(op[x]==1)printf("R");
if(op[x]==2)printf("U");
if(op[x]==3)printf("D");
s[0][ma[x].x1][ma[x].y1]='A';
s[1][ma[x].x2][ma[x].y2]='A';
}
int main(){
for(int i = 0; i < 20; i++)
cin>>s[0][i]>>s[1][i];
cout<<bfs()<<"\\n";
print(ed);
cout<<"\\n";
for(int i = 0; i < 20; i++)
cout<<s[0][i]<<" "<<s[1][i]<<"\\n";
return 0;
}
//C
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
typedef long long LL;
int main(){
int n, m; cin>>n>>m;
if(n*m%2==0){
cout<<"YES\\n";
}else{
cout<<"NO\\n";
}
return 0;
}
//F
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
struct V{
double x,y,z;
V(){}
V(double a,double b,double c):x(a),y(b),z(c){}
void in(){scanf("%lf%lf%lf",&x,&y,&z);}
};
inline V operator+(V a,V b){return V(a.x+b.x,a.y+b.y,a.z+b.z);}
inline V operator-(V a,V b){return V(a.x-b.x,a.y-b.y,a.z-b.z);}
inline V operator*(double k,V a){return V(k*a.x,k*a.y,k*a.z);}
inline double len(V c){return sqrt(c.x*c.x+c.y*c.y+c.z*c.z);}
inline double dist(V a,V b){return len(a-b);}
inline void proc(V a,V b,double k,V &O,double &R){
O=b+1/(k*k-1)*(b-a); //球心
R=k/(k*k-1)*dist(a,b); //半径
}
int main(){
int T; cin>>T;
while(T--){
//获得球心和半径
V A, B, C, D, O1, O2;
A.in();B.in();C.in();D.in();
double k1,k2, r1,r2;
scanf("%lf%lf",&k1,&k2);
proc(A,B,k1,O1,r1);
proc(C,D,k2,O2,r2);
//模板: 计算两球相交部分体积
if(r1<r2)swap(r1,r2),swap(O1,O2);
double d = dist(O1,O2);
if(d>r1+r2)printf("0\\n");//相离
else if(d<r1-r2)printf("%lf\\n",pi*4/3*r2*r2*r2);//包含
else{
double h1=r1-(r1*r1+d*d-r2*r2)/(2*d),h2=r2-(r2*r2+d*d-r1*r1)/(2*d);
printf("%lf\\n",pi*(r1-h1/3)*h1*h1+pi*(r2-h2/3)*h2*h2);
}
}
return 0;
}
//K
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int a[maxn], b[maxn];
int main(){
int n, k; cin>>n>>k;
for(int i = 1; i <= k; i++){
int p, x; cin>>p>>x; b[p] = x;
}
for(int i = 1; i <= n; i++){
if(!b[i])b[i]=b[i-1]+1;//没有指定,直接加入元素
else{
if(b[i]>b[i-1]+1){//指定了但不够,无解
cout<<"-1\\n";
return 0;
}
}
}
stack<int>s; int x = 0;
for(int i = n; i >= 1; i--){
while(b[i]>s.size())s.push(++x);//如果大小不够,就按顺序加入元素直到大小够了为止
a[i] = s.top(); s.pop();//出栈顶
}
for(int i = 1; i <= n; i++)
cout<<a[i]<<" ";
return 0;
}
以上是关于2021牛客暑期多校训练营2,签到题CDFKI的主要内容,如果未能解决你的问题,请参考以下文章