#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n;
string s;
cin>>n;
getchar();
getline(cin,s);
int m=s.size();
int r=m/n+(m%n!=0);
for(int i=0;i<n;i++)
{
for(int j=r-1;j>=0;j--)
{
if(j*n+i<m)
cout<<s[j*n+i];
else
cout<<" ";
}
cout<<endl;
}
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
void solve()
{
string s;
cin>>s;
int x=0;
for(int i=0;i<2;i++)
{
x=x*10+s[i]-'0';
}
int y=0;
for(int i=3;i<5;i++)
{
y=y*10+s[i]-'0';
}
if(x>=0&&x<=11)
{
cout<<"Only "<<s<<". Too early to Dang.";
return ;
}
if(x==12&&y==0)
{
cout<<"Only "<<s<<". Too early to Dang.";
return ;
}
x=x-12+(y!=0);
for(int i=0;i<x;i++)
cout<<"Dang";
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
stack<int> st;
void solve()
{
while(!st.empty())
st.pop();
string s,a,b;
cin>>s>>a>>b;
int x,y,z;
int l=a.size()-1;
int r=b.size()-1;
int cnt=s.size()-1;
int temp=0;
while(l>=0||r>=0)
{
if(l>=0)
x=a[l]-'0';
else
x=0;
if(r>=0)
y=b[r]-'0';
else
y=0;
if(cnt>=0)
z=s[cnt]-'0';
else
z=10;
if(z==0)
z=10;
st.push((x+y+temp)%z);
temp=(x+y+temp)/z;
l--;
r--;
cnt--;
}
if(temp!=0)
st.push(temp);
while(!st.empty()&&st.top()==0)
{
st.pop();
}
if(st.empty())
cout<<0;
else
while(!st.empty())
cout<<st.top(),st.pop();
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll n;
long double z,r;
long double sum=0;
long double val[maxn]={0};
ll vis[maxn]={0};
struct edge
{
ll v,next;
};
edge no[maxn*4];
ll head[maxn];
ll cnt;
void add(int x,int y)
{
no[cnt].v=y;
no[cnt].next=head[x];
head[x]=cnt;
cnt++;
}
void init()
{
memset(head,0,sizeof(head));
cnt=1;
}
void dfs(int u,int fa)
{
if(u!=0)
{
val[u]=val[fa]*(((double)(100-r))/100);
if(vis[u]!=0)
{
val[u]=val[u]*(1.0*vis[u]);
sum+=val[u];
}
}
for(int i=head[u];i;i=no[i].next)
{
int v=no[i].v;
if(v==fa)
continue;
dfs(v,u);
}
}
void solve()
{
init();
cin>>n>>z>>r;
val[0]=z;
for(int i=0;i<n;i++)
{
int k;
cin>>k;
if(k==0)
{
int x;
cin>>x;
if(i==0)
sum+=val[0]*x;
vis[i]=x;
continue;
}
for(int j=0;j<k;j++)
{
int x;
cin>>x;
add(i,x);
add(x,i);
}
}
dfs(0,-1);
cout<<(ll)sum<<endl;
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e4+5;
long double val[maxn]={0};
int in[maxn];
int inde[maxn];
ll ge[maxn]={0};
bool cmp(int a,int b)
{
if(val[a]==val[b])
{
if(ge[a]==ge[b])
return inde[a]<inde[b];
else
return ge[a]>ge[b];
}
else
return val[a]>val[b];
}
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
in[i]=i;
inde[i]=i;
int k;
cin>>k;
for(int j=1;j<=k;j++)
{
ll x;
long double y;
cin>>x>>y;
ge[x]++;
val[i]-=y;
val[x]+=y;
}
}
sort(in+1,in+n+1,cmp);
for(int i=1;i<=n;i++)
{
int j=in[i];
if(val[j]<0)
{
val[j]=-val[j];
cout<<j<<" -"<<(ll)((ll)val[j]/100)<<".";
printf("%02d\n",(ll)((ll)val[j]%100));
}
else
{
cout<<j<<" "<<(ll)((ll)val[j]/100)<<".";
printf("%02d\n",(ll)((ll)val[j]%100));
}
}
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=1e9+5;
const int maxn=1e5+5;
int fa[maxn];
ll val[maxn];
int sz[maxn];
int mn[maxn];
ll ge[maxn];
set <int> se;
int find_(int x)
{
return fa[x]==x ? x: fa[x]=find_(fa[x]);
}
struct node
{
int mn,sz;
double ge,v;
};
node no[maxn];
int res;
void init()
{
res=0;
se.clear();
for(int i=0;i<maxn;i++)
{
fa[i]=i;
sz[i]=1;
val[i]=0;
mn[i]=i;
ge[i]=0;
}
}
bool cmp(node a,node b)
{
if(a.v==b.v)
return a.mn<b.mn;
else
return a.v>b.v;
}
void solve()
{
init();
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
se.insert(x);
int a,b;
cin>>a>>b;
int fax=find_(x);
if(a!=-1)
{
se.insert(a);
int faa=find_(a);
if(fax!=faa)
{
fa[faa]=fax;
sz[fax]+=sz[faa];
ge[fax]+=ge[faa];
val[fax]+=val[faa];
mn[fax]=min(mn[fax],mn[faa]);
}
}
if(b!=-1)
{
int faa=find_(b);
if(fax!=faa)
{
fa[faa]=fax;
sz[fax]+=sz[faa];
ge[fax]+=ge[faa];
val[fax]+=val[faa];
mn[fax]=min(mn[fax],mn[faa]);
}
se.insert(b);
}
int k;
cin>>k;
for(int j=1;j<=k;j++)
{
int xx;
cin>>xx;
se.insert(xx);
int faa=find_(xx);
if(fax!=faa)
{
fa[faa]=fax;
sz[fax]+=sz[faa];
ge[fax]+=ge[faa];
val[fax]+=val[faa];
mn[fax]=min(mn[fax],mn[faa]);
}
}
int l,r;
cin>>l>>r;
ge[fax]+=l;
val[fax]+=r;
}
for(auto m:se)
{
if(find_(m)==m)
{
res++;
no[res].mn=mn[m];
no[res].ge=(1.0*ge[m]/sz[m]);
no[res].sz=sz[m];
no[res].v=(1.0*val[m]/sz[m]);
}
}
sort(no+1,no+res+1,cmp);
cout<<res<<endl;
for(int i=1;i<=res;i++)
{
printf("%04d",no[i].mn);
cout<<" "<<no[i].sz<<" ";
printf("%.3lf %.3lf\n",no[i].ge,no[i].v);
}
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+5;
map<int ,int>mm;
struct edge
{
int v,next;
};
edge no[maxn];
void solve()
{
mm.clear();
int l,n,r=-1,cnt=-1;
cin>>l>>n;
for(int i=1;i<=n;i++)
{
int x,val,y;
cin>>x>>val>>y;
no[x].v=val;
no[x].next=y;
}
mm[abs(no[l].v)]=1;
for(int i=l;i!=-1;i=no[i].next)
{
if(no[i].next==-1)
break;
int v=abs(no[no[i].next].v);
if(mm[v]==0)
{
mm[v]=1;
}
else
{
while(mm[v]==1)
{
int nn=no[no[i].next].next;
if(r==-1)
{
r=no[i].next;
cnt=no[i].next;
no[cnt].next=-1;
}
else
{
no[cnt].next=no[i].next;
cnt=no[i].next;
no[cnt].next=-1;
}
no[i].next=nn;
if(no[i].next==-1)
break;
v=abs(no[no[i].next].v);
}
if(no[i].next==-1)
break;
mm[v]=1;
}
}
for(int i=l;i!=-1;i=no[i].next)
{
printf("%05d",i);
cout<<" "<<no[i].v<<" ";
if(no[i].next!=-1)
printf("%05d\n",no[i].next);
else
cout<<-1<<endl;
}
for(int i=r;i!=-1;i=no[i].next)
{
printf("%05d",i);
cout<<" "<<no[i].v<<" ";
if(no[i].next!=-1)
printf("%05d\n",no[i].next);
else
cout<<-1<<endl;
}
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e3+5;
int fa[maxn];
int sz[maxn];
map<int ,int >mm;
vector<int>vv;
void init()
{
vv.clear();
mm.clear();
for(int i=1;i<=1000;i++)
{
fa[i]=i;
sz[i]=1;
}
for(int i=1001;i<=2000;i++)
{
fa[i]=i;
sz[i]=0;
}
}
int find_(int x)
{
return fa[x]==x?x:fa[x]=find_(fa[x]);
}
void solve() {
init();
int n;
cin >> n;
for (int j = 1; j <= n; j++)
{
string s;
cin>>s;
int x=0;
for(int i=0;i<s.size()-1;i++)
x=x*10+(s[i]-'0');
for(int i=1;i<=x;i++)
{
int y;
cin>>y;
int faj=find_(j);
y=y+1000;
int fay=find_(y);
if(faj!=fay)
{
fa[faj]=fay;
sz[fay]+=sz[faj];
}
}
}
for(int i=1;i<=n;i++)
{
int fai=find_(i);
if(mm[fai]==0)
{
mm[fai]=1;
vv.push_back(sz[fai]);
}
}
sort(vv.begin(),vv.end(),greater<int>());
cout<<vv.size()<<endl;
for(int i=0;i<vv.size();i++)
{
cout<<vv[i];
if(i!=vv.size()-1)
{
cout<<" ";
}
}
}
int main()
{
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=25;
int map_[maxn][maxn];
int n;
int vis[maxn];
int flag;
int b[maxn];
void init()
{
flag=0;
memset(map_,0,sizeof(map_));
memset(vis,0,sizeof(vis));
}
void dfs(int u,int dep)
{
//cout<<u<<" "<<dep<<endl;
if(flag)
return;
if(dep==n&&map_[u][1])
{
b[dep]=u;
flag=1;
return;
}
vis[u]=1;
int cnt=0;
for(int i=2;i<=n;i++)
{
if(vis[i]==0&&map_[i][1])
cnt=1;
}
if(!cnt)
{
vis[u]=0;
return;
}
b[dep]=u;
for(int i=2;i<=n;i++)
{
if(map_[u][i]&&!vis[i])
{
dfs(i,dep+1);
}
}
vis[u]=0;
}
void solve() {
init();
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
char ch;
cin>>ch;
if(ch=='L')
map_[j][i]=1;
if(ch=='W')
map_[i][j]=1;
}
}
dfs(1,1);
if(flag)
{
for(int i=1;i<=n;i++)
{
cout<<b[i];
if(i!=n)
cout<<" ";
}
}
else
cout<<"No Solution";
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--){
solve();
}
return 0;
}
题目
先进去两个点由于第一个点不算无所谓,然后遍历一个点都要判断目前栈顶是否有存在的价值
对于那三个峰来说 记为 a,b,c 如果 ab 在ac的下面则在对b c来说对于以后的点包括a c看到的范围是覆盖b的所以
并没有必要存在直接删去继续判断看是否有必要存在 判断结束发现b可以看到c看不到的那么 把a放进去
在遍历的时候发现 栈顶b可以看到a 而c 看不到当然c之后的也看不到所以就把建一个烽,然后求出贡献即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
struct point
{
ll x,y;
};
point p[maxn];
set <int >se;
int res;
int st[maxn];
void init()
{
se.clear();
res=0;
}
bool check(int a,int b,int c)
{
return (p[c].x-p[a].x)*(p[b].y-p[a].y) <=(p[b].x-p[a].x)*(p[c].y-p[a].y);
}
void solve()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>p[i].x>>p[i].y;
}
for(int i=1;i<=n;i++)
{
if(i<=2)
{
st[res++]=i;
continue;
}
while(res>=2&&check(i,st[res-1],st[res-2])) res--;
if(st[res-1]!=1)
se.insert(st[res-1]);
st[res++]=i;
}
cout<<se.size();
}
int main() {
int _=1;
//cin>>_;
while(_--)
{
init();
solve();
}
return 0;
}