2020HDU多校第十场 By Rynar 6877-6887
1003.Mine Sweeper
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=25+10;
const int mod=1e9+7;
int n,m,k;
int a[N][N];
int main(){
int T,x,y,s;
scanf("%d",&T);
while (T--){
scanf("%d",&s);
if (s==0)cout<<"1 1"<<endl<<"."<<endl;
else if (s<=16){
for (int i=1;i<=25;i++){
if (i%3!=2)s--;
if (((i+1)%3!=2||i%3==2)&&!s){
cout<<1<<" "<<i<<endl;
for (int j=1;j<=i;j++){
if (j%3==2)cout<<"X";
else cout<<".";
}
break;
}
}
puts("");
}
else{
cout<<25<<" "<<25<<endl;
memset(a,0,sizeof a);
int k=(s-8)/8,r=s-k*8;
for (int i=2;i<=25;i+=2){
for (int j=2;j<=25;j+=2){
a[i][j]=1;
--k;
if (k==0)break;
}
if (k==0)break;
}
if (r==8)a[24][24]=1;
else if (r==9)a[25][1]=a[25][2]=a[25][25]=1;
else if (r==10)a[25][2]=a[25][5]=1;
else if (r==11)a[25][1]=a[25][2]=a[25][5]=1;
else if (r==12)a[25][1]=a[25][2]=a[25][24]=a[25][25]=1;
else if (r==13)a[24][2]=a[25][5]=1;
else if (r==14)a[25][1]=a[25][2]=a[25][25]=a[25][5]=1;
else if (r==15)a[25][7]=a[25][2]=a[25][5]=1;
for (int i=1;i<=25;i++){
for (int j=1;j<=25;j++){
if (a[i][j]==1)printf("X");
else printf(".");
}
puts("");
}
}
}
return 0;
}
1004.Permutation Counting
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
const int N=5000+10;
const int mod=1e9+7;
int n,m,k;
int a[N];
int dp[N][N];//dp[i][j]表示第i位对应的数字是j对应的种类数
signed main(){
int T,x,y,s;
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);
for (int i=1;i<n;i++)scanf("%lld",&a[i]);
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
dp[i][j]=0;
}
}
dp[1][1]=1;
if (a[1])dp[2][1]=1;
else dp[2][2]=1;
for (int i=2;i<n;i++){
if (a[i]){
for(int j=i;j>=1;j--){
dp[i+1][j]=(dp[i+1][j+1]+dp[i][j])%mod;
}
}
else{
for(int j=2;j<=i+1;j++){
dp[i+1][j]=(dp[i][j-1]+dp[i+1][j-1])%mod;
}
}
}
int res=0;
for(int i=1;i<=n;i++) res=(res+dp[n][i])%mod;
printf("%lld\n",res);
}
return 0;
}
1005.Tree Cutting
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define SZ(X) ((ll)X.size())
using namespace std;
const int maxn=1e6+10;
int n,K;
struct edge{
int y,nex;
}a[maxn<<1];
int len,fir[maxn];
inline void ins(const int x,const int y){ a[++len]=(edge){y,fir[x]};fir[x]=len; }
int seg[maxn<<2],flag[maxn<<2];
int loc,c,lx,rx;
void pushdown(const int x){
if(flag[x]){
int fl=flag[x]; flag[x]=0;
int lc=x<<1,rc=lc|1;
seg[lc]+=fl,seg[rc]+=fl;
flag[lc]+=fl,flag[rc]+=fl;
}
}
void upd(const int x,const int l,const int r){
if(l==r) { seg[x]=c;return; }
int mid=(l+r)>>1,lc=x<<1,rc=lc|1;
pushdown(x);
if(loc<=mid) upd(lc,l,mid);
else upd(rc,mid+1,r);
seg[x]=max(seg[lc],seg[rc]);
}
void upd2(const int x,const int l,const int r){
if(rx<l||r<lx) return;
if(lx<=l&&r<=rx){
seg[x]+=c;
flag[x]+=c;
return;
}
pushdown(x);
int mid=(l+r)>>1,lc=x<<1,rc=lc|1;
upd2(lc,l,mid); upd2(rc,mid+1,r);
seg[x]=max(seg[lc],seg[rc]);
}
int query(const int x,const int l,const int r){
if(l==r)return seg[x];
pushdown(x);
int mid=(l+r)>>1,lc=x<<1,rc=lc|1;
if(loc<=mid) return query(lc,l,mid);
else return query(rc,mid+1,r);
}
int query2(const int x,const int l,const int r){
if(rx<l||r<lx) return 0;
if(lx<=l&&r<=rx) return seg[x];
pushdown(x);
int mid=(l+r)>>1,lc=x<<1,rc=lc|1;
return max(query2(lc,l,mid),query2(rc,mid+1,r));
}
int dis[maxn],son[maxn];
void dfs(int x,int fa){
dis[x]=0;
int mxd=0;
for(int k=fir[x],y=a[k].y;k;k=a[k].nex,y=a[k].y) if(y!=fa){
dfs(y,x);
if(mxd<=dis[y]) mxd=dis[y],son[x]=y;
dis[x]=max(dis[x],dis[y]+1);
}
}
int ans;
void dp(const int x,const int fa,const int L){
if(!son[x]){
loc=L,c=1,upd(1,1,2*n);
return;
}
dp(son[x],x,L+1);
loc=L,c=1; upd(1,1,2*n);
lx=L+1,rx=L+dis[x],c=1; upd2(1,1,2*n);
for(int k=fir[x],y=a[k].y;k;k=a[k].nex,y=a[k].y) if(y!=fa&&y!=son[x]){
dp(y,x,L+dis[x]+1);
for(int u=min(dis[y]+1,K),i=u;i>=1;i--){
int fx,fy;
loc=L+i,fx=query(1,1,2*n);
loc=L+dis[x]+1+i-1,fy=query(1,1,2*n);
int temp=fx;
lx=L+dis[x]+1+0,rx=L+dis[x]+1+min(K-i-1,i-1);
if(lx<=rx) temp=max(temp,fx + query2(1,1,2*n) );
lx=L+0,rx=L+min(K-i,i);
if(lx<=rx) temp=max(temp,fy + query2(1,1,2*n) );
loc=L+i,c=temp,upd(1,1,2*n);
}
if(K-1-dis[y]>dis[y]+1){
lx=L+dis[x]+1,rx=min(L+dis[x]+1+dis[y],L+dis[x]+1+K);
c=query2(1,1,2*n);
lx=L+dis[y]+2,rx=min(L+K-1-dis[y],L+dis[x]);
if(lx<=rx) upd2(1,1,2*n);
}
if(dis[x]+dis[y]+1>K){
int fy=0;
for(int i=0;i<dis[y]&&K-i-1>dis[y]+1;i++){
loc=L+K-i-1;
int fx=query(1,1,2*n);
loc=L+dis[x]+1+i;
fy=max(fy,query(1,1,2*n));
loc=L+K-i-1,c=fx+fy;
upd(1,1,2*n);
}
}
for(int i=0;i<=dis[y];i++){
loc=L+dis[x]+1+i,c=0;
upd(1,1,2*n);
}
}
lx=L+0,rx=L+K;
ans=max(ans,query2(1,1,2*n));
}
int main(){
int T;
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&K);
ans=0;
len=0;for (int i=0;i<=n;i++)fir[i]=0,dis[i]=0,son[i]=0;
for (int i=0;i<=4*n;i++)seg[i]=0,flag[i]=0;
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
ins(x,y),ins(y,x);
}
dfs(1,0);
dp(1,0,1);
printf("%d\n",n-ans);
}
return 0;
}
1010.Tic-Tac-Toe-Nim
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[4][4];
int main(){
int T;
scanf("%d",&T);
while (T--){
for (int i=1;i<=3;i++){
for (int j=1;j<=3;j++){
scanf("%d",&a[i][j]);
}
}
int tot=0;
for (int i=1;i<=3;i++){
for (int j=1;j<=3;j++){
int ans=1;
for (int k=1;k<=3;k++){
for (int p=1;p<=3;p++){
if (k==i||p==j)continue;
int r=0;
for (int x=1;x<=3;x++){
for (int y=1;y<=3;y++){
if (x==i&&y==j)continue;
if (x==k&&y==p)continue;
if (x==k||x==i||y==p||y==j)r^=a[x][y]-1;
else r^=a[x][y];
}
}
if (r==0)ans=0;
}
}
if (ans==1)tot++;
}
}
cout<<tot<<endl;
}
return 0;
}
1011.Task Scheduler
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5000+10;
const int mod=1e9+7;
int n,m,k;
struct node{
int id,w;
}a[N];
bool cmp(node a,node b){
if (a.w==b.w)return a.id<b.id;
return a.w>b.w;
}
signed main(){
int T,x,y,s;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&k);
for (int i=1;i<=n;i++){
scanf("%d",&a[i].w);
a[i].id=i;
}
if (k==0){
for (int i=1;i<=n;i++){
if (i!=1)printf(" ");
printf("%d",i);
}puts("");
continue;
}
sort(a+1,a+1+n,cmp);
for (int i=1;i<=n;i++){
if (i!=1)printf(" ");
printf("%d",a[i].id);
}puts("");
}
return 0;
}
禁止类似码农教程的网站爬取,抄袭博客内容。
https://www.cnblogs.com/rair/

浙公网安备 33010602011771号