传送门
A - Two Problems
抠细节
一定要考虑特殊的值和特殊的情况
#include<bits/stdc++.h>
using namespace std;
int x,t,a,b,da,db;
bool ok=false;
int main(){
scanf("%d%d%d%d%d%d",&x,&t,&a,&b,&da,&db);
if(x==0){
cout<<"YES"<<endl;
return 0;
}
if(x>a+b){
cout<<"NO"<<endl;
return 0;
}
else{
for(int i=0;i<=t-1;i++){
for(int j=0;j<=t-1;j++){
if(a-da*i+b-db*j==x)
{
ok=true;
break;
}
}
if(ok)
break;
}
for(int i=0;i<=t-1;i++){
if(a-da*i==x){
ok=true;
break;
}
}
for(int i=0;i<=t-1;i++){
if(b-db*i==x){
ok=true;
break;
}
}
if(ok)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
B - Game on Paper
题目的解决方法:现将走的每一步存起来,在直接暴力一下。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+10;
int n,p;
int num;
int s[maxn][maxn];
int main(){
scanf("%d%d",&n,&p);
int sum1=0;
while(p--){
int x,y;
scanf("%d%d",&x,&y);
s[x][y]=++sum1;
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<s[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(s[i][j]){
int m=0,sum=0;
for(int k=0;k<=2;k++){
if(j+k<=n&&s[i][j+k]!=0){
m++;
sum=max(sum,s[i][j+k]);
}
else break;
}
if(i+1<=n){
for(int k=0;k<=2;k++){
if(j+k<=n&&s[i+1][j+k]!=0){
m++;
sum=max(sum,s[i+1][j+k]);
}
else break;
}
}
if(i+2<=n){
for(int k=0;k<=2;k++){
if(j+k<=n&&s[i+2][j+k]!=0){
m++;
sum=max(sum,s[i+2][j+k]);
}
else break;
}
}
if(m==9){
if(num==0)num=sum;
else num=min(num,sum);
}
}
}
}
if(num!=0)
printf("%d\n",num);
else printf("-1\n");
return 0;
}
C - Photographer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n;
ll d;
int x,y;
struct node{
int a,b;
int sum;
int id;
}s[maxn];
int p[maxn];
bool cmp(const node&a,const node&b){
return a.sum<b.sum;
}
int main(){
scanf("%d%lld",&n,&d);
scanf("%d%d",&x,&y);
for(int i=1;i<=n;i++){
scanf("%d%d",&s[i].a,&s[i].b);
s[i].sum=s[i].a*x+s[i].b*y;
s[i].id=i;
}
sort(s+1,s+1+n,cmp);
int cnt=0;
int j=0;
for(int i=1;i<=n;i++){
if(d>=s[i].sum)
{
d-=s[i].sum;
cnt++;
p[++j]=s[i].id;
}
if(d<s[i].sum)
break;
}
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++){
if(i!=cnt)
cout<<p[i]<<" ";
else cout<<p[i]<<endl;
}
return 0;
}