A Alien Sunset

模拟

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
#define
int h[MAXN],l[MAXN],r[MAXN];
int check(int p,int i) {
p%=h[i];
if (l[i] <= r[i]) return p<=l[i] || p>=r[i];
else return p<=l[i] && p>=r[i];
}
int main()
{
// freopen("A.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
int dy=0;
For(i,n) {
h[i]=read(),l[i]=read(),r[i]=read();
gmax(dy,h[i]);
}


Rep(i,1825*dy) {
bool fl=0;
For(j,n) if (!check(i,j)) {
fl=1;break;
}
if (!fl) {
cout<<i<<endl;return 0;
}
}
puts("impossible");
return 0;
}

B Breaking Biscuits

找凸包,旋转卡壳

#include<bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define ForkD(i,k,n) for(int i=n;i>=k;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=Pre[x];p;p=Next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=Next[p])
#define Lson (o<<1)
#define Rson ((o<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define vi vector<int>
#define pi pair<int,int>
#define SI(a) ((a).size())
#define ALL(x) (x).begin(),(x).end()
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
ll sqr(ll a){return a*a;}
ld sqr(ld a){return a*a;}
double sqr(double a){return a*a;}
const double eps=1e-10;
int dcmp(double x) {
if (fabs(x)<eps) return 0; else return x<0 ? -1 : 1;
}
ld PI = 3.141592653589793238462643383;
class P{
public:
double x,y;
P(double x=0,double y=0):x(x),y(y){}
friend ld dis2(P A,P B){return sqr(A.x-B.x)+sqr(A.y-B.y); }
friend ld Dot(P A,P B) {return A.x*B.x+A.y*B.y; }
friend ld Length(P A) {return sqrt(Dot(A,A)); }

friend P operator- (P A,P B) { return P(A.x-B.x,A.y-B.y); }
friend P operator+ (P A,P B) { return P(A.x+B.x,A.y+B.y); }
friend P operator* (P A,double p) { return P(A.x*p,A.y*p); }
friend P operator/ (P A,double p) { return P(A.x/p,A.y/p); }
friend bool operator< (const P& a,const P& b) {return dcmp(a.x-b.x)<0 ||(dcmp(a.x-b.x)==0&& dcmp(a.y-b.y)<0 );}

};
P read_point() {
P a;
scanf("%lf%lf",&a.x,&a.y);
return a;
}
bool operator==(const P& a,const P& b) {
return dcmp(a.x-b.x)==0 && dcmp(a.y-b.y) == 0;
}
typedef P V;

double Cross(V A,V B) {return A.x*B.y - A.y*B.x;}
double Area2(P A,P B,P C) {return Cross(B-A,C-A);}
double DistanceToSegment(P p,P A,P B) {
if (A==B) return Length(p-A);
V v1 = B-A, v2 = p-A, v3 = p - B;
if (dcmp(Dot(v1,v2))<0) return Length(v2);
else if (dcmp(Dot(v1,v3))>0 ) return Length(v3);
else return fabs(Cross(v1,v2) ) / Length(v1);
}
int ConvexHull(P *p,int n,P *ch) {
sort(p,p+n);
int m=0;
Rep(i,n) {
while(m>1 && Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;
ch[m++]=p[i];
}
int k=m;
RepD(i,n-2) {
while(m>k && Cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--;
ch[m++]=p[i];
}
if ( n > 1 ) m--;
return m;
}
P p[1000],ch[1000];
double rotating_calipers(P *p,int n) {
int q=1;
double ans=INF;
Rep(i,n) {
while(fabs(Area2(p[i],p[(i+1)%n],p[(q+1)%n]))> fabs(Area2(p[i],p[(i+1)%n],p[q] )) )
q=(q+1)%n;
ans = min( ans, (double)DistanceToSegment(p[q],p[i],p[(i+1)%n]) );
}
return ans;
}

int main()
{
// freopen("B.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
Rep(i,n) {
p[i]=read_point();
}
int m=ConvexHull(p,n,ch);
printf("%.10lf\n",rotating_calipers(ch,m));

return 0;
}

C Cued In

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
map<string,int> h;
int c[1000]={};
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
h["red"]=1;
h["yellow"]=2;
h["green"]=3;
h["brown"]=4;
h["blue"]=5;
h["pink"]=6;
h["black"]=7;

int r1=0;
For(i,n) {
// char s[1000];
string s;
cin>>s;
int p=h[s];
c[p]++;
}
if (c[1]==n) {
puts("1");return 0;
}
// PRi(c,7)
ll ans=0;
if (c[1]>0) {
int p=7;
while(!c[p]) --p;
ans+=p*c[1] + c[1];
}
Fork(i,2,7) ans+=i*c[i];
cout<<ans<<endl;

return 0;
}

D Deranging Hat

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
char s[1010];
char s2[1010];
int main()
{
// freopen("A.in","r",stdin);
// freopen(".out","w",stdout);

cin>>(s+1);
int n=strlen(s+1);
For(i,n) {
s2[i]=s[i];
}
sort(s2+1,s2+1+n);
For(i,n) {
swap(s[i],s2[i]);
}
For(i,n) if (s[i]!=s2[i]) {
Fork(j,i+1,n) {
if (s[j]==s2[i]) {
if (s[i]>s[j])
printf("%d %d\n",i,j);
else {
printf("%d %d\n",j,i);

}
swap(s[j],s[i]);
break;
}
}
// puts(s+1);
}





return 0;
}

H Hiking

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
#define
ll B;
int n;
ll d[MAXN];
int k;
int a[MAXN],v[MAXN];
vi ans;
bool avi(int i,int j) {
if (i!=1) {
if (j-d[v[i-1]]>B) return 0;
}
if (i<k) {
if (d[v[i+1]]-j>B) return 0;
}
if (i<k) {
if (j>d[v[i+1]]-a[i+1]) return 0;
if (j+a[i]>d[v[i+1]]) return 0;
}
return 1;
}
int main()
{
// freopen("H.in","r",stdin);
// freopen(".out","w",stdout);
B=read();
n=read();
For(i,n) d[i]=read();
k=read();
For(i,k) a[i]=read(),v[i]=read();
while(1) {
while (v[k]==n && k ) --k;
if (!k) break;
bool fl=0;
ForD(i,k) {
while (v[i]<n && avi(i,d[v[i]+1]) ) {
ans.pb(i);// cout<<i<<' ';
v[i]++; fl=1;
}
}
if (!fl) puts("impossible"),exit(0);

}
Rep(i,SI(ans)) cout<<ans[i]<<' ';
return 0;
}

K nightsbridge Rises

贪心

#include<bits/stdc++.h> 
using namespace std;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma
#define
#define
#define
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return ((a-b)%F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
#define
int w[MAXN],pl[MAXN];
bool use[MAXN]={};
vector<int> v[MAXN];
pi a[MAXN];
int main()
{
// freopen("K.in","r",stdin);
// freopen(".out","w",stdout);
int n=read();
For(i,n) w[i]=read(),pl[i]=read();
For(i,n) {
if (w[i]>=pl[i]) use[i]=1;
}
int m=read();
For(i,m) {
int p=read();
a[i]=mp(p,i);
}
sort(a+1,a+1+m);
// reverse(a+1,a+1+m);
For(i,m) {
int vv=a[i].fi;
// cout<<vv<<endl;
while(vv) {
int j=0;
For(i,n) {
if (!use[i] && pl[i]>=vv ) {
if (!j || pl[j]>pl[i] || (pl[j]==pl[i] &&w[j]>w[i] ) ) j=i;
}
}
// printf("(%d,%d)",w[j],pl[j]);
if (!j) {
puts("impossible"),exit(0);
}
v[a[i].se].pb(j);
use[j]=1;
vv=w[j];
}
// cout<<endl;
}
For(i,m) {
int sz=SI(v[i]);
if (sz) {
printf("%d",v[i][sz-1]);
RepD(j,sz-2)
printf(" %d",v[i][j]);

}
puts("");
}

return 0;
}