Acperience
公式题
考场贪心乱搞版本:
#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 Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
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;}
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 MAXN (100000+10)
int w[MAXN],w2[MAXN],b[MAXN];
ll Abs(ll x) {
if (x<0) return -x; return x;
}
ll gcd(ll a,ll b){if (!b) return a;return gcd(b,a%b);}
int main()
{
// freopen("A.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
int n=read();
ll c=0;
For(i,n) {
w[i]=read();
if (w[i]<0) w[i]=-w[i];
c+=w[i]*w[i];
}
c*=4*n;
sort(w+1,w+1+n);
ll p=0;
ForD(i,n) {
if (Abs(4*(p-w[i])*(p-w[i])-c)<Abs(4*(p+w[i])*(p+w[i])-c)) p-=w[i];
else p+=w[i];
}
p=Abs(p*p*4-c);
ll q=4*n;
ll g=gcd(p,q);
p/=g,q/=g;
printf("%lld/%lld\n",p,q);
}
return 0;
}
Born Slippy
树形dp
求
fx=max(fy+wx opt wy)
opt 是and ,or ,xor中的一个
题目保证
wx≤216
和冬令营的某题类似(然而还是不会做)
g[a][b]
表示
wy
前8位为
a
时,
#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 (1000000007)
#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 Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef unsigned int uint;
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;}
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 MAXN (65540+10)
char s[10];
uint w[MAXN];
vi edges[MAXN];
ll ans=0;
inline uint opt(uint a,uint b) {
if (s[0]=='X') return a^b;
if (s[0]=='A') return a&b;
return a|b;
}
int v[MAXN]={0};
uint g[256][256]={0},h[MAXN][256]={0};
void dfs(int x,int fa){
uint dp=0,A=w[x]>>8,B=w[x]&(255);
Rep(i,256) if (v[i]) dp=max(dp,g[i][B]+(opt(A,i)<<8));
ans=(ans+(ll)x*((ll)dp+w[x])) %F;
Rep(i,256) h[x][i]=g[A][i];
v[A]++;
Rep(i,256) g[A][i]=max(g[A][i] , dp + opt(B,i) );
int sz=edges[x].size();
Rep(i,sz) if (edges[x][i]!=fa) dfs(edges[x][i],x);
Rep(i,256) g[A][i] = h[x][i];
v[A]--;
}
int main()
{
// freopen("B.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
int n=read();
cin>>s;
For(i,n) cin>>w[i];
ans=0;
Fork(i,2,n) {
int p=read();
edges[p].pb(i);
edges[i].pb(p);
}
dfs(1,-1);
cout<<ans<<endl;
For(i,n) edges[i].clear();
}
return 0;
}
Call It What You Want
挖坑
Differencia
挖坑
Eureka
极角排序,注意精度
#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 (1000000007LL)
#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())
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;}
ld PI = 3.141592653589793238462643383;
class P{
public:
double x,y;
P(double x=0,double y=0):x(x),y(y){}
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 a.x<b.x||(a.x==b.x&& a.y<b.y);}
};
const double eps=1e-15;
int dcmp(double x) {
if (fabs(x)<eps) return 0; else return x<0 ? -1 : 1;
}
bool operator==(const P& a,const P& b) {
return dcmp(a.x-b.x)==0 && dcmp(a.y-b.y) == 0;
}
typedef P V;
P read_point() {
P a;
scanf("%lf%lf",&a.x,&a.y);
return a;
}
double angle(V v) {return atan2(v.y,v.x);}
#define MAXN (1000+10)
P a[MAXN];
double p[MAXN];
ll p2[MAXN];
int main()
{
// freopen("E.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
p2[0]=1;
For(i,1005) p2[i]=mul(p2[i-1],2);
while(T--) {
ll ans=0;
int n=read();
For(i,n) a[i]=read_point();
sort(a+1,a+1+n);
For(i,n-1) {
int sz=0,m=1;
Fork(j,i+1,n) {
if (a[i]==a[j]) m++;
else p[++sz]=angle(a[j]-a[i]);
}
p[0]=-10000;
sort(p+1,p+1+sz);
ll t=0,an=0;
For(j,sz) {
if (dcmp(p[j]-p[j-1])==0) {
t=(t*2LL%F+1LL)%F;
} else {
upd(an,t);
t=1;
}
}
upd(an,t);
upd(ans,mul(an,sub(p2[m],1)) );
if (m>1) upd(ans,sub(p2[m],1+m) );
i=i+m-1;
}
cout<<ans<<endl;
}
return 0;
}
It’s All In The Mind
贪心
#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 Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
ll gcd(ll a,ll b){if (!b) return a;return gcd(b,a%b);}
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 MAXN (100+10)
int n;
int a[MAXN];
int main()
{
// freopen("i.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
cin>>n;
For(i,n) a[i]=-1;
a[0]=100;
a[n+1]=0;
int m=read();
while(m--) {
int p=read(),v=read();
a[p]=v;
}
For(i,2) if (a[i]==-1) {
a[i]=a[i-1];
}
ForkD(i,3,n) if (a[i]==-1) a[i]=a[i+1];
ll p=0,q=0;
For(i,2) p+=a[i];
For(i,n) q+=a[i];
ll g=gcd(p,q);
p/=g,q/=g;
printf("%lld/%lld\n",p,q);
}
return 0;
}
Keep On Movin
注意把奇数长度的拆成1和偶数长度
#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 Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
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;}
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 a[100000+10];
ll st[100000+10];
int sz;
int main()
{
// freopen("k.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
int n = read();
bool fl=0; sz=0;
ll t=0;
For(i,n) {
scanf("%d",&a[i]);
if (a[i]&1) {
fl=1;
st[++sz]=a[i];
} else t+=a[i];
}
if (!fl) {
cout<<t<<endl;
continue;
}
For(i,sz) if (st[i]>1) {
t+=st[i]-1;
st[i]=1;
}
ll ans=0,l=0,r=1e9;
while(l<=r) {
ll m=(l+r)/2;
ll m2=2*m+1;
ll s=0;
For(i,sz) if (st[i]<m2) s+=m2-st[i];
if (s<=t) ans=m2,l=m+1;
else r=m-1;
}
cout<<ans<<endl;
}
return 0;
}
La Vie en rose
暴力
#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 Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);
#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;
#define PRi2D(a,n,m) For(i,n) { \
For(j,m-1) cout<<a[i][j]<<' ';\
cout<<a[i][m]<<endl; \
}
#pragma comment(linker, "/STACK:102400000,102400000")
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;}
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 MAXN (100000+10)
char s[MAXN],s2[MAXN];
int main()
{
// freopen("l.in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--) {
int n=read(),m=read();
scanf("%s%s",s,s2);
Rep(i,n-m+1) {
bool fl=0,p=0;
Rep(j,m) {
if (!p) {
if (s[i+j]==s2[j] ) ;
else if (s[i+j]==s2[1+j]) p=1;
else {
fl=1;break;
}
} else {
if (s[i+j]==s2[j-1]) p=0;
else {
fl=1;break;
}
}
}
if (fl) putchar('0'); else putchar('1');
}
Rep(i,m-1) putchar('0');puts("");
}
return 0;
}