1.签到:https://ac.nowcoder.com/acm/contest/80259/A
AC代码:
#include<bits/stdc++.h>
using namespace std;
string a,b;
int main()
{
cin>>a>>b;
if(a==b) cout<<"Yes";
else cout<<"No";
}
2.枚举:https://ac.nowcoder.com/acm/contest/80259/B
AC代码:
#include<bits/stdc++.h>
using namespace std;
string a[2020];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]!='*'&&a[i][j]!='.')
{
int cnt=0;
if(a[i][j]=='A')
{
for(int k=j;k>=0;k--) cnt+=(a[i][k]=='*');
}
else if(a[i][j]=='S')
{
for(int k=i;k<n;k++) cnt+=(a[k][j]=='*');
}
else if(a[i][j]=='W')
{
for(int k=i;k>=0;k--) cnt+=(a[k][j]=='*');
}
else{
for(int k=j;k<m;k++) cnt+=(a[i][k]=='*');
}
cout<<cnt;
return 0;
}
}
}
}
3.双指针:https://ac.nowcoder.com/acm/contest/80259/C
p,q地位一样,我们枚举1--n,优先填p,p有重在填q,最后填补空位:
用双指针,发现空位时J移到没有的位置,依次类推即可。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[100010];
int p[100010],q[100001];
int b1[100010],b2[100010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
if(b1[a[i]]==0)
{
p[i]=a[i];
b1[a[i]]=1;
}
else if(b2[a[i]]==0)
{
q[i]=a[i];
b2[a[i]]=1;
}
else{
cout<<-1;
return 0;
}
}
int j1=1,j2=1;
for(int i=1;i<=n;i++)
{
if(p[i]==0)
{
while(b1[j1]) j1++;
p[i]=j1;
j1++;
}
else{
while(b2[j2]) j2++;
q[i]=j2;
j2++;
}
}
for(int i=1;i<=n;i++) cout<<p[i]<<" ";
cout<<endl;
for(int i=1;i<=n;i++) cout<<q[i]<<" ";
}
4.DP:https://ac.nowcoder.com/acm/contest/80259/D
我们令dp[i][j]表示取前i件花费j的最大战力,对于每一个物品,我们可以不选也就是dp[i-1][j],选的话枚举k从0--w,w*k<=j,即可
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
long long n,x,dp[333][330];
int main()
{
memset(dp,-0x3f,sizeof(dp));
dp[0][0]=0;
cin>>n>>x;
long long ans=0;
for(int i=1;i<=n;i++)
{
int a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
for(int j=0;j<=x;j++) dp[i][j]=dp[i-1][j];
for(int j=0;j<=x;j++)
{
for(int k=0;k<=e;k++)
{
if(c*k+b>j) break;
dp[i][j]=max(dp[i][j],dp[i-1][j-b-c*k]+a+k*d);
ans=max(ans,dp[i][j]);
}
}
}
cout<<ans;
}
5.思维题(经验题)+贪心:https://ac.nowcoder.com/acm/contest/80259/E
结论!!!!:
n是3的倍数,全部填L时,不可能恰好剩一个
反之,全部填L时,一定有一个方案敲好剩一个
首先假如n%3==0,自然光用L或正方都可以填满,答案就是其中之一(
假如!=0,那么还有可能是加了一个正方形(样例)
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
//n是3的倍数,全部填L时,不可能恰好剩一个
//反之,全部填L时,一定有一个方案敲好剩一个
long long n,x,y;
int main()
{
cin>>n>>x>>y;
if(n%3==0)
{
cout<<max(n*n/3*x,n*n/4*y);
}
else{
cout<<max(max(n*n/3*x,n*n/4*y),n*n/3*x-x+y);
}
}