A.
C.
D.
E.
F.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
if(a+b<=9)
printf("Yes\n");
else
printf("No\n");
}
B.
二分查找小于x的最大位置
#include<bits/stdc++.h>
using namespace std;
int find(int *a,int start,int end,int tar)
{
if(start>end)
return -1;
int mid=(start+end)/2;
if(a[mid]<=tar)
return max(mid,find(a,mid+1,end,tar));
else
return find(a,start,mid-1,tar);
}
int main()
{
int n,x;
cin>>n>>x;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int ans=find(a,0,n-1,x);
cout<<ans+1<<" ";
int use=ans==-1?0:a[ans];
cout<<x-use<<endl;
}
C.
如果结果一位,x*10取模和结果求和取模为0,如果结果2位,x*10取模和结果求和取模为0.结果至多三位。
#include<bits/stdc++.h>
using namespace std;
long long f(int len,long long x)
{
for(int i=0;i<len;i++)
{
x=(x*10)%495;
}
int t=(495-x)%495;
if(len==1)
{
if(t>=0&&t<=9)
return t;
else
return -1;
}
else if(len==2)
{
if(t>=10&&t<=99)
return t;
else
return -1;
}
else
return t;
}
int main()
{
long long x;
cin>>x;
x%=495;
if(x==0)
cout<<"-1\n";
else
{
int ans;
for(int i=1;i<10;i++)
{
if(f(i,x)!=-1)
{
ans=f(i,x);
break;
}
}
cout<<ans<<endl;
}
}
输出首位字符较大者。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
if(s[0]>=s[n-1])
cout<<s[0]<<endl;
else
cout<<s[n-1]<<endl;
}
bfs求最短路,只是给每一个位置加上方向
#include<bits/stdc++.h>
using namespace std;
struct Node{
int x,y,f;
Node(int xx,int yy,int ff)
{
x=xx;
y=yy;
f=ff;
}
};
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
string s[n];
for(int i=0;i<n;i++)
cin>>s[i];
int x1,y1,x2,y2;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(s[i][j]=='S')
{
x1=i;
y1=j;
}
if(s[i][j]=='T')
{
x2=i;
y2=j;
}
}
}
int get[n][m][4]; //0,1,2,3 上下左右
memset(get,-1,sizeof get);
queue<Node> qu;
for(int i=0;i<4;i++)
{
get[x1][y1][i]=0;
qu.push(Node(x1,y1,i));
}
while(!qu.empty())
{
int x=qu.front().x;
int y=qu.front().y;
int f=qu.front().f;
//printf("%d %d %d\n",x,y,f);
qu.pop();
if(s[x][y]=='*')
{
if(f==0)
{
if(x&&s[x-1][y]!='#'&&(get[x-1][y][f]==-1||get[x-1][y][f]>get[x][y][f]+1))
{
qu.push(Node(x-1,y,f));
get[x-1][y][f]=get[x][y][f]+1;
}
if(y&&s[x][y-1]!='#'&&(get[x][y-1][2]==-1||get[x][y-1][2]>get[x][y][f]+1))
{
qu.push(Node(x,y-1,2));
get[x][y-1][2]=get[x][y][f]+1;
}
if(y+1<m&&s[x][y+1]!='#'&&(get[x][y+1][3]==-1||get[x][y+1][3]>get[x][y][f]+1))
{
qu.push(Node(x,y+1,3));
get[x][y+1][3]=get[x][y][f]+1;
}
}
else if(f==1)
{
if(x+1<n&&s[x+1][y]!='#'&&(get[x+1][y][f]==-1||get[x+1][y][f]>get[x][y][f]+1))
{
qu.push(Node(x+1,y,f));
get[x+1][y][f]=get[x][y][f]+1;
}
if(y&&s[x][y-1]!='#'&&(get[x][y-1][2]==-1||get[x][y-1][2]>get[x][y][f]+1))
{
qu.push(Node(x,y-1,2));
get[x][y-1][2]=get[x][y][f]+1;
}
if(y+1<m&&s[x][y+1]!='#'&&(get[x][y+1][3]==-1||get[x][y+1][3]>get[x][y][f]+1))
{
qu.push(Node(x,y+1,3));
get[x][y+1][3]=get[x][y][f]+1;
}
}
else if(f==2)
{
if(x&&s[x-1][y]!='#'&&(get[x-1][y][0]==-1||get[x-1][y][0]>get[x][y][f]+1))
{
qu.push(Node(x-1,y,0));
get[x-1][y][0]=get[x][y][f]+1;
}
if(x+1<n&&s[x+1][y]!='#'&&(get[x+1][y][1]==-1||get[x+1][y][1]>get[x][y][f]+1))
{
qu.push(Node(x+1,y,1));
get[x+1][y][1]=get[x][y][f]+1;
}
if(y&&s[x][y-1]!='#'&&(get[x][y-1][2]==-1||get[x][y-1][2]>get[x][y][f]+1))
{
qu.push(Node(x,y-1,2));
get[x][y-1][2]=get[x][y][f]+1;
}
}
else
{
if(x&&s[x-1][y]!='#'&&(get[x-1][y][0]==-1||get[x-1][y][0]>get[x][y][f]+1))
{
qu.push(Node(x-1,y,0));
get[x-1][y][0]=get[x][y][f]+1;
}
if(x+1<n&&s[x+1][y]!='#'&&(get[x+1][y][1]==-1||get[x+1][y][1]>get[x][y][f]+1))
{
qu.push(Node(x+1,y,1));
get[x+1][y][1]=get[x][y][f]+1;
}
if(y+1<m&&s[x][y+1]!='#'&&(get[x][y+1][f]==-1||get[x][y+1][f]>get[x][y][f]+1))
{
qu.push(Node(x,y+1,f));
get[x][y+1][f]=get[x][y][f]+1;
}
}
}
else
{
if(f==0)
{
if(x&&s[x-1][y]!='#'&&(get[x-1][y][f]==-1||get[x-1][y][f]>get[x][y][f]+1))
{
qu.push(Node(x-1,y,f));
get[x-1][y][f]=get[x][y][f]+1;
}
}
else if(f==1)
{
if(x+1<n&&s[x+1][y]!='#'&&(get[x+1][y][f]==-1||get[x+1][y][f]>get[x][y][f]+1))
{
qu.push(Node(x+1,y,f));
get[x+1][y][f]=get[x][y][f]+1;
}
}
else if(f==2)
{
if(y&&s[x][y-1]!='#'&&(get[x][y-1][f]==-1||get[x][y-1][f]>get[x][y][f]+1))
{
qu.push(Node(x,y-1,f));
get[x][y-1][f]=get[x][y][f]+1;
}
}
else
{
if(y+1<m&&s[x][y+1]!='#'&&(get[x][y+1][f]==-1||get[x][y+1][f]>get[x][y][f]+1))
{
qu.push(Node(x,y+1,f));
get[x][y+1][f]=get[x][y][f]+1;
}
}
}
}
/*
printf("0:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d ",get[i][j][0]);
printf("\n");
}
printf("1:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d ",get[i][j][1]);
printf("\n");
}
printf("2:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d ",get[i][j][2]);
printf("\n");
}
printf("3:\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d ",get[i][j][3]);
printf("\n");
}
*/
int ans=1e9;
for(int i=0;i<4;i++)
{
if(get[x2][y2][i]!=-1)
ans=min(ans,get[x2][y2][i]);
}
ans=ans==1e9?-1:ans;
cout<<ans<<endl;
}
}
F.
抛弃最多就是用最少的灵魂位与结果为0,记dp[ i ] [ j ]表示考虑第i个灵魂,位与结果位j,需要用到的最少灵魂数量。 则dp[ i ] [ j &a[ i ] ] =min(dp[ i - 1 ] [ j & a[ i ] ] , dp[ i - 1 ] [ j ]+1)。初始化dp[ 0 ] [ i ] =n*2, dp[ 0 ] [255] = 0 。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
int ans[256],last[256];
for(int i=0;i<256;i++)
last[i]=n*2;
last[255]=0;
for(int i=0;i<n;i++)
{
memcpy(ans,last,sizeof ans);
for(int j=0;j<256;j++)
{
if(last[j]!=n*2)
{
int x=(j&a[i]);
ans[x]=min(ans[x],last[j]+1);
}
}
//printf("--%d",ans[0]);
memcpy(last,ans,sizeof ans);
}
if(ans[0]==n*2)
printf("-1\n");
else
printf("%d\n",n-ans[0]);
}
}



京公网安备 11010502036488号