彻底沦为要么过不掉pp要么就FST的智障选手。
A. Links and Pearls
看余数是否为0即可。
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define per(i,x,y) for (int i=(x); i>=(y); i--)
#define ll long long
#define ull unsigned long long
#define ld long double
#define inf 1000000001
#define INF 1000000000000000001ll
#define pii pair<int,int>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define sqr(x) ((x)*(x))
#define y1 y1_
#define mset(x,y) memset((x),(y),sizeof(x))
#define mcpy(x,y) memcpy((x),(y),sizeof(y))
using namespace std;
const ld pi=acos(-1);
const ld eps=1e-8;
template<typename T> void cmin(T &x,T y){ x=y<x?y:x; }
template<typename T> void cmax(T &x,T y){ x=y>x?y:x; }
header files
ll read(){
char ch=getchar(); ll x=0; int op=1;
for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;
for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*op;
}
void write(ll a){
if (a<0) putchar('-'),a=-a;
if (a>=10) write(a/10); putchar(a%10+'0');
}
// fast i/o //
#ifdef mod
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x%mod) if (p&1) ret=ret*x%mod;
return ret;
}
ll getinv(ll x){ return ksm(x,mod-2); }
#else
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x) if (p&1) ret=ret*x;
return ret;
}
#endif
qpow
char s[105];int n,cnt1,cnt2;
//#define local
int main(){
#ifdef local
freopen("test.in","r",stdin); freopen("test.out","w",stdout);
#endif
scanf("%s",s+1);n=strlen(s+1);
rep (i,1,n) if (s[i]=='o') cnt1++; else cnt2++;
if (!cnt1) puts("YES");
else{
if (cnt2%cnt1==0) puts("YES"); else puts("NO");
}
return 0;
}
// sample data:
/*
*/
// rest:
/*
*/
B. Marlin
对称构造即可。
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define per(i,x,y) for (int i=(x); i>=(y); i--)
#define ll long long
#define ull unsigned long long
#define ld long double
#define inf 1000000000
#define INF 1000000000000000000ll
#define pii pair<int,int>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define sqr(x) ((x)*(x))
#define y1 y1_
#define mset(x,y) memset((x),(y),sizeof(x))
#define mcpy(x,y) memcpy((x),(y),sizeof(y))
using namespace std;
const ld pi=acos(-1);
const ld eps=1e-8;
template<typename T> void cmin(T &x,T y){ x=y<x?y:x; }
template<typename T> void cmax(T &x,T y){ x=y>x?y:x; }
header files
ll read(){
char ch=getchar(); ll x=0; int op=1;
for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;
for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*op;
}
void write(ll a){
if (a<0) putchar('-'),a=-a;
if (a>=10) write(a/10); putchar(a%10+'0');
}
// fast i/o //
#ifdef mod
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x%mod) if (p&1) ret=ret*x%mod;
return ret;
}
ll getinv(ll x){ return ksm(x,mod-2); }
#else
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x) if (p&1) ret=ret*x;
return ret;
}
#endif
qpow
#define N 105
int n,k;char a[10][N];
//#define local
int main(){
#ifdef local
freopen("test.in","r",stdin); freopen("test.out","w",stdout);
#endif
n=read(),k=read();
rep (i,1,4) rep (j,1,n) a[i][j]='.';
if (k%2==0){
rep (i,2,k/2+1) a[2][i]=a[3][i]='#';
} else{
a[2][(n+1)/2]='#';k--;
rep (i,2,n/2){
if (!k) break;
k-=2;a[2][i]=a[2][n-i+1]='#';
}
rep (i,2,n/2){
if (!k) break;
k-=2;a[3][i]=a[3][n-i+1]='#';
}
}
puts("YES");
rep (i,1,4){rep (j,1,n) putchar(a[i][j]);puts("");}
return 0;
}
// sample data:
/*
*/
// rest:
/*
*/
C. Posterized
直接依次贪心下去即可。
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define per(i,x,y) for (int i=(x); i>=(y); i--)
#define ll long long
#define ull unsigned long long
#define ld long double
#define inf 1000000000
#define INF 1000000000000000000ll
#define pii pair<int,int>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define sqr(x) ((x)*(x))
#define y1 y1_
#define mset(x,y) memset((x),(y),sizeof(x))
#define mcpy(x,y) memcpy((x),(y),sizeof(y))
using namespace std;
const ld pi=acos(-1);
const ld eps=1e-8;
template<typename T> void cmin(T &x,T y){ x=y<x?y:x; }
template<typename T> void cmax(T &x,T y){ x=y>x?y:x; }
header files
ll read(){
char ch=getchar(); ll x=0; int op=1;
for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;
for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*op;
}
void write(ll a){
if (a<0) putchar('-'),a=-a;
if (a>=10) write(a/10); putchar(a%10+'0');
}
// fast i/o //
#ifdef mod
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x%mod) if (p&1) ret=ret*x%mod;
return ret;
}
ll getinv(ll x){ return ksm(x,mod-2); }
#else
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x) if (p&1) ret=ret*x;
return ret;
}
#endif
qpow
#define N 100005
int n,k,vis[N],a[N],cnt[N];
//#define local
int main(){
#ifdef local
freopen("test.in","r",stdin); freopen("test.out","w",stdout);
#endif
n=read(),k=read();
memset(vis,-1,sizeof(vis));
rep (i,1,n){
a[i]=read();if (vis[a[i]]!=-1){printf("%d ",vis[a[i]]);continue;}
int x=a[i],tmp=1;//cerr<<"x="<<x<<' ';
while (tmp<k&&x>=0){
if (vis[x]!=-1) break; else x--,tmp++;
}
if (vis[x]==-1){
printf("%d ",x);
rep (j,x,a[i]) vis[j]=x,cnt[x]++;
continue;
}
if (cnt[vis[x]]+a[i]-x>k){
x++;printf("%d ",x);
rep (j,x,a[i]) vis[j]=x,cnt[x]++;
continue;
} else{
printf("%d ",vis[x]);
rep (j,x+1,a[i]) vis[j]=vis[x],cnt[vis[x]]++;
}
}
return 0;
}
// sample data:
/*
*/
// rest:
/*
*/
D. Perfect Groups
一些吐槽:这pp也太坑了qwq。全场被坑。果然注意特判才是硬道理….。
考虑 a×b a × b 和 b×c b × c 如果都是完全平方数,那么 a×c a × c 一定也是。
预处理出vector<int> b[i]
表示1~i中的数和i哪些乘起来为完全平方数(0不算),然后枚举所有子区间左端点,在右端一个个插入数。如果插入一个非0的数,对于这个数j如果在当前左端点到j-1中有某个数和它相乘是完全平方数的则不用新建小组,否则cnt++。
另外0有点坑,现将非0的数全部分好以后,如果有0就随便分到一组,组数不会增加。但如果这个子区间只有0,没有非0,是需要1组的。
//没想到0的情况啊!!…><
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define per(i,x,y) for (int i=(x); i>=(y); i--)
#define ll long long
#define ull unsigned long long
#define ld long double
#define inf 1000000000
#define INF 1000000000000000000ll
#define pii pair<int,int>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define sqr(x) ((x)*(x))
#define y1 y1_
#define mset(x,y) memset((x),(y),sizeof(x))
#define mcpy(x,y) memcpy((x),(y),sizeof(y))
using namespace std;
const ld pi=acos(-1);
const ld eps=1e-8;
template<typename T> void cmin(T &x,T y){ x=y<x?y:x; }
template<typename T> void cmax(T &x,T y){ x=y>x?y:x; }
header files
ll read(){
char ch=getchar(); ll x=0; int op=1;
for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;
for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*op;
}
void write(ll a){
if (a<0) putchar('-'),a=-a;
if (a>=10) write(a/10); putchar(a%10+'0');
}
// fast i/o //
#ifdef mod
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x%mod) if (p&1) ret=ret*x%mod;
return ret;
}
ll getinv(ll x){ return ksm(x,mod-2); }
#else
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x) if (p&1) ret=ret*x;
return ret;
}
#endif
qpow
#define N 5005
int n,ans[N],po[N];ll a[N];vector<int> b[N];
//#define local
int main(){
#ifdef local
freopen("test.in","r",stdin); freopen("test.out","w",stdout);
#endif
n=read();
rep (i,1,n){
a[i]=read();
rep (j,1,i-1){
ll tmp=a[i]*a[j];
if (tmp>0&&sqr((ll)sqrt((ld)tmp))==tmp) b[i].push_back(j);
}
b[i].push_back(i);
}
rep (i,1,n) po[i]=0;
rep (i,1,n){
int cnt=0,cnt0=0;
rep (j,i,n){
while (po[j]<SZ(b[j])&&b[j][po[j]]<i) po[j]++;
if (!a[j]) cnt0++;
if (a[j]&&b[j][po[j]]==j) cnt++;
if (!cnt0||cnt0&&cnt) ans[cnt]++;
else if (!cnt) ans[1]++;
}
}
rep (i,1,n) printf("%d ",ans[i]);puts("");
return 0;
}
// sample data:
/*
*/
// rest:
/*
*/
E. The Number Games
一些吐槽:思维能力欠缺怪自己=.= 考场上还有35+分钟来着,想+写这题,如果直接走上正轨应该来得及的>< 然而绕了很大的圈子走上了歧途…;我怎么会想到并查集的呢…。窝有病吧(
思路是贪心,先转化成选择权值最大的n-k个留下来。从大到小取,如果当前数i到之前连通块的最近距离,<=剩下能选择的数的话,就可以选。
至于怎么处理【到之前连通块的最近距离】,可以发现如果以n为根,每次添加的是树上一条链(初始时是n一个点),考虑这条链对其余点的影响,显然是对子树有影响,于是预处理出dfs序,树状数组实现区间加单点查询即可。
#include<bits/stdc++.h>
#define rep(i,x,y) for (int i=(x); i<=(y); i++)
#define per(i,x,y) for (int i=(x); i>=(y); i--)
#define ll long long
#define ull unsigned long long
#define ld long double
#define inf 1000000001
#define INF 1000000000000000001ll
#define pii pair<int,int>
#define F first
#define S second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define sqr(x) ((x)*(x))
#define y1 y1_
#define mset(x,y) memset((x),(y),sizeof(x))
#define mcpy(x,y) memcpy((x),(y),sizeof(y))
using namespace std;
const ld pi=acos(-1);
const ld eps=1e-8;
template<typename T> void cmin(T &x,T y){ x=y<x?y:x; }
template<typename T> void cmax(T &x,T y){ x=y>x?y:x; }
header files
ll read(){
char ch=getchar(); ll x=0; int op=1;
for (; !isdigit(ch); ch=getchar()) if (ch=='-') op=-1;
for (; isdigit(ch); ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*op;
}
void write(ll a){
if (a<0) putchar('-'),a=-a;
if (a>=10) write(a/10); putchar(a%10+'0');
}
// fast i/o //
#ifdef mod
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x%mod) if (p&1) ret=ret*x%mod;
return ret;
}
ll getinv(ll x){ return ksm(x,mod-2); }
#else
ll ksm(ll x,ll p){
ll ret=1;
for (; p; p>>=1,x=x*x) if (p&1) ret=ret*x;
return ret;
}
#endif
qpow
#define N 1000005
int n,k,cnt,clk,head[N],vis[N],fa[N],in[N],out[N],dep[N];
struct bit{
int t[N];bit(){memset(t,0,sizeof(t));}
void upd(int x,int val){for (int i=x;i<=n;i+=i&-i) t[i]+=val;}
int qry(int x){int ret=0;for (int i=x;i;i-=i&-i) ret+=t[i];return ret;}
}tr;
struct edge{int to,nxt;}e[N<<1];
void adde(int x,int y){e[++cnt].to=y;e[cnt].nxt=head[x];head[x]=cnt;}
void ins(int x,int y){adde(x,y);adde(y,x);}
void dfs(int u,int pr){
in[u]=++clk;
for (int i=head[u],v;i;i=e[i].nxt) if ((v=e[i].to)!=pr){
fa[v]=u;dep[v]=dep[u]+1;dfs(v,u);
}
out[u]=clk;
}
//#define local
int main(){
#ifdef local
freopen("test.in","r",stdin); freopen("test.out","w",stdout);
#endif
n=read(),k=n-read();
rep (i,1,n-1){int x=read(),y=read();ins(x,y);}
dfs(n,0);vis[n]=1;k--;
rep (i,1,n) tr.upd(in[i],dep[i]),tr.upd(in[i]+1,-dep[i]);
per (i,n-1,1){
if (!k) break;if (vis[i]) continue;
int tmp=tr.qry(in[i]);
if (tmp>k) continue;
k-=tmp;int now=i;
for (;tmp;now=fa[now],tmp--){
vis[now]=1;
tr.upd(in[now],-1);tr.upd(out[now]+1,1);
}
}
rep (i,1,n) if (!vis[i]) printf("%d ",i);puts("");
return 0;
}
// sample data:
/*
15 3
9 11
11 8
7 9
9 14
12 8
10 7
1 14
1 5
12 15
10 3
5 2
13 15
4 13
6 4
*/
// rest:
/*
*/
总结
rk150,rating+35…..。
这怎么黄名线下调我还打不上master啊。我怎么div2都打这么烂啊。我怎么整天过不掉pp,过pp的全fst啊。
人生没希望了啊。