A题:
https://codeforces.com/contest/1150/problem/A
题目看了我半天
大意就是给你k块钱,有n种购买方法,m种卖出方法
选少的买,大的卖。。。。。水的不行这题。。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,m,r;
cin>>n>>m>>r;
int buy=0x3f3f3f3f,sel=-1;
for(int i=1;i<=n;i++){
int inp; cin>>inp;
if(buy>inp) buy=inp;
}
for(int i=1;i<=m;i++){
int inp; cin>>inp;
if(sel<inp) sel=inp;
}
// cout<<buy<<" "<<sel<<endl;
if(buy<sel){
int a=r/buy;
int b=r%buy;
cout<< b+ a*sel;
}
else cout<<r;
return 0;
}
B题:
题目:https://codeforces.com/contest/1150/problem/B
这道题是翻转问题的裸题
大体就是从上到下搜索,假如第一行有一个需要翻转,那么翻转点一定是那个点下面,假如无法翻转,那么就不行。
从1~n-2行搜索,最后检查n-1~n 行有没有没被翻过来的,有的话就输出NO
然鹅我还是被hack了(菜)
#include<bits/stdc++.h>
using namespace std;
const int maxn=55;
bool M[maxn][maxn];
bool turn(int i,int j){
M[i][j]=1;
for(int k=j-1;k<=j+1;k++){
if(!M[i+1][k]) M[i+1][k]=1;
else return false;
}
if(!M[i+2][j]) M[i+2][j]=1;
else return false;
return true;
}
int main() {
char s[55];
int n,m; cin>>n;
m=n;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=m;j++){
if(s[j-1]=='#') M[i][j]=1;
}
}
int flag=1;
for(int i=1;i<=n-2;i++){
for(int j=1;j<=m;j++){
if(!M[i][j]){
if(j==1||j==m) flag=0;
else if(!turn(i,j)) flag=0;
}
}
}
for(int i=n-1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!M[i][j]) flag=0;
}
}
if(flag) cout<<"YES";
else cout<<"NO";
return 0;
}
C题:https://codeforces.com/contest/1150/problem/C
这题考的就是一个素数筛吧,还有一个是贪心,前面能放2就放2,不可以再放1
#include<bits/stdc++.h>
using namespace std;
const int maxn=4e5+5000;
int prime[maxn];
int find_prime(int num){
bool flag[maxn];
memset(flag,0,sizeof(flag));
int count=0;
for(int i=2;i<=num;i++){
if(!flag[i]) prime[count++]=i;
for(int j=0;j<count&&i*prime[j]<=num;j++){
flag[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
return count;
}
int main() {
int n; cin>>n;
int one=0,two=0;
int inp;
for(int i=1;i<=n;i++){
scanf("%d",&inp);
if(inp==1) one++;
else two++;
}
int cnt=find_prime(maxn);
int flag=0,sum=0;
for(int i=1;i<=n;i++){
int ok=0;
while(sum+2<=prime[flag]&&two>0){
sum+=2;
two--;
ok=1;
printf("%d ",2);
}
while(1+sum<=prime[flag]&&one>0){
sum++;
one--;
printf("%d ",1);
ok=1;
}
flag++;
if(ok==0) break;
}
while(one>0) printf("%d ",1),one--;
while(two>0) printf("%d ",2),two--;
return 0;
}
后面的我就没做了,补题假如做得出来再发。。。