2023.2.18
比赛地址
T1
题意
补题代码
#include<bits/stdc++.h>
using namespace std;
int n;
int x[230],y[230];
int az1[20][20],az2[20][20];
bool checktie(){//需要优化
int nw1=0,nw2=0;
for(int i=1;i<=15;i++){
for(int j=1;j<=15;j++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
}
for(int j=1;j<=15;j++){
for(int i=1;i<=15;i++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
}
for(int k=1;k<=15;k++){
for(int i=k,j=1;i<=15&&j<=15;i++,j++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int i=k,j=1;i>=1&&j<=15;i--,j++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int i=k,j=15;i<=15&&j>=1;i++,j--){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int i=k,j=15;i>=1&&j>=1;i--,j--){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int j=k,i=1;j<=15&&i<=15;i++,j++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int j=k,i=1;j>=1&&i<=15;j--,i++){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int j=k,i=15;j<=15&&i>=1;j++,i--){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
for(int j=k,i=15;j>=1&&i>=1;j--,i--){
if(az1[i][j])nw1++;
else nw1=0;
if(az2[i][j])nw2++;
else nw2=0;
if(nw1==5||nw2==5)return 0;
}
nw1=0;nw2=0;
}
return 1;
}
bool check(int dx){
memset(az1,0,sizeof(az1));
memset(az2,0,sizeof(az2));
for(int i=1;i<=dx;i++){
if(i%2==1)az1[x[i]][y[i]]=1;
else az2[x[i]][y[i]]=1;
}
if(checktie())return 0;
return 1;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
if(i%2==1)az1[x[i]][y[i]]=1;
else az2[x[i]][y[i]]=1;
}
/*
for(int i=1;i<=15;i++){
for(int j=1;j<=15;j++){
if(az1[i][j]){
printf("*");
continue;
}
if(az2[i][j])printf("+");
else printf("-");
}
puts("");
}
*/
if(checktie())return printf("Tie"),0;
//cout<<111<<endl;
int l=1,r=n,res=n;
while(l<=r){
int mid=(l+r)/2;
if(check(mid))res=mid,r=mid-1;
else l=mid+1;
}
if(res%2==0)printf("B ");
else printf("A ");
printf("%d",res);
return 0;
}
T2
题意
补题代码
#include<bits/stdc++.h>
using namespace std;
int n,k,q;
long long a[2];
long long c[2000005],d[2000005];
//bool b[2000005];
int ans;
bool check(){
for(int i=n-k+2;i<=n+1;i++)if(d[i]!=c[i])ans++;
if(ans!=0)return 0;
return 1;
}
int main(){
scanf("%d%d%d",&n,&k,&q);
for(int i=1;i<=n;i++){
scanf("%d",&a[i%2]);
c[i]=a[i%2]-a[(i%2)^1];
}
c[n+1]=-a[n%2];
for(int i=1;i<=n-k+1;i++){
if(d[i]==c[i])continue;//其实可以省略
d[i+k]+=d[i]-c[i];
d[i]=c[i];
}
if(check())printf("Yes\n");
else printf("No\n");
while(q--){
int pos,dx;
scanf("%d%d",&pos,&dx);
/*
c[pos]+=dx;
c[pos+1]-=dx;
for(int i=pos;i<=n-k+1;i++){
if(d[i]==c[i])continue;//其实可以省略
d[i+k]+=d[i]-c[i];
d[i]=c[i];
}
*/
int tiaoyi=(n+1-pos)/k*k+pos,tiaoer=(n-pos)/k*k+pos+1;
if(d[tiaoer]!=c[tiaoer])ans--;
if(d[tiaoyi]!=c[tiaoyi])ans--;
d[tiaoyi]-=dx;d[tiaoer]+=dx;
if(d[tiaoer]!=c[tiaoer])ans++;
if(d[tiaoyi]!=c[tiaoyi])ans++;
if(ans==0)printf("Yes\n");
else printf("No\n");
}
return 0;
}
T3
题意
补题代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
bool b[405][405];
int dx[405],dy[405];
int f[200][405][405];
int ans=1<<30;
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch;
scanf(" %c",&ch);
//cout<<ch;
if(ch=='1')b[i][j]=1;
}
}
for(int i=1;i<=k;i++){
char ch;scanf(" %c",&ch);
if(ch=='L')dy[i]--;else if(ch=='R')dy[i]++;
else if(ch=='U')dx[i]--;else dx[i]++;
}
memset(f,0x3f,sizeof(f));
//cout<<f[0][0][0]<<endl;
f[0][1][1]=0;
for(int ii=1;ii<=k;ii++){
int i=(ii%2);
//cout<<ii<<":"<<endl;
for(int x=1;x<=n;x++){
for(int y=1;y<=m;y++){
f[i][x][y]=f[i^1][x][y]+1;
if(x-dx[ii]>=1&&y-dy[ii]>=1&&x-dx[ii]<=n&&y-dy[ii]<=m&&b[x][y]==0)
f[i][x][y]=min(f[i^1][x][y]+1,f[i^1][x-dx[ii]][y-dy[ii]]);
//cout<<x<<" "<<y<<" "<<f[i][x][y]<<endl;
}
}
}
for(int x=1;x<=n;x++)
for(int y=1;y<=m;y++)
ans=min(ans,f[k%2][x][y]);
printf("%d",ans);
return 0;
}
T4
题意
2023.2.24
比赛地址
T1
题意
补题代码
#include<bits/stdc++.h>
using namespace std;
long long n;
map<long long,int> a;
vector<long long> vc;
long long phi(long long k){
long long ans=k;
for(int i=2;i*i<=k;i++){
if(k%i==0){
ans=ans/i*(i-1);
while(k%i==0)k/=i;
}
}
if(k>1)ans=ans/k*(k-1);
return ans;
}
void cyf(){
for(long long i=1;i*i<=n;i++){
if(n%i!=0)continue;
printf("%lld %lld\n",i,phi(n/i));
if(i*i==n)continue;
a[n/i]=phi(i);
vc.push_back(n/i);
}
return;
}
int main(){
scanf("%lld",&n);
cyf();
for(int i=vc.size()-1;i>=0;i--)printf("%lld %lld\n",vc[i],a[vc[i]]);
return 0;
}
T2
题意
T3
题意
T4
题意