- 伍衍 的博客
DAY16(8)
- @ 2024-8-22 15:58:16
考试错误:无。
思路:
公式题,公式为 ,具体请自行打表。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
freopen("dontforgetfileio.in","r",stdin);
freopen("dontforgetfileio.out","w",stdout);
int a,b;
cin >> a >> b;
cout << (a-1)*(b-1)-1;
}
考试错误:无。
思路:
模拟题,直接模拟即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=110;
struct Node{
int day;
string name;
char change;
int num;
};
Node a[N];
int zl[4],back[4];
int n;
map<string,int> mp={{"Mildred",7},{"Elsie",7},{"Bessie",7}};
bool cmp(Node a,Node b){
return a.day<b.day;
}
signed main(){
freopen("milk2.in","r",stdin);
freopen("milk2.out","w",stdout);
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i].day >> a[i].name >> a[i].change >> a[i].num;
}
sort(a+1,a+n+1,cmp);
int mx=-1,cnt=0;
for(int i=1;i<=n;i++){
mx=-1;
string _name=a[i].name;
int x=a[i].num;
if(a[i].change=='-') x*=-1;
mp[_name]+=x;
back[1]=zl[1];
back[2]=zl[2];
back[3]=zl[3];
zl[1]=zl[2]=zl[3]=0;
int h=1;
for(auto j:mp){
if(j.second>=mx){
if(j.second>mx){
zl[1]=zl[2]=zl[3]=0;
}
mx=j.second;
zl[h]=1;
}
h++;
}
if(zl[1]!=back[1]||zl[2]!=back[2]||zl[3]!=back[3]){
cnt++;
}
}
cout << cnt;
}
考试错误:没写。
思路:
用两个数组 bei ,dong 存储两个方向的牛并分别排序,初始时每个牛都能吃到无限
多的草,
如果两个牛都能吃到无限多的草,并且它们方向不同,横纵坐标差不同,相对位置是{左上
,右下},则更新值。最后如果没有被更新,输出 "Infinty",否则正常输出。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=110;
struct Node{
int x,y;
int num;
};
Node dong[N],bei[N];
int ans[N];
int idxd=1,idxb=1;
bool cmpbei(Node a,Node b){
return a.x<b.x;
}bool cmpdong(Node a,Node b){
return a.y<b.y;
}
signed main(){
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
for(int i=1;i<=60;i++){
ans[i]=2e9;
}
int n;
cin >> n;
for(int i=1;i<=n;i++){
char c;
int x,y;
cin >> c;
cin >> x >> y;
if(c=='E'){
dong[idxd++]={x,y,i};
}else{
bei[idxb++]={x,y,i};
}
}
idxd--;
idxb--;
sort(bei+1,bei+1+idxb,cmpbei);
sort(dong+1,dong+1+idxd,cmpdong);
for(int j=1;j<=idxd;j++){
for(int i=1;i<=idxb;i++){
if(bei[i].x<dong[j].x||bei[i].y>dong[j].y||ans[bei[i].num]!=2e9) continue;
int _x=bei[i].x-dong[j].x;
int _y=dong[j].y-bei[i].y;
if(_x<_y) ans[bei[i].num]=_y;
if(_x>_y){ans[dong[j].num]=_x;break;}
}
}
for(int i=1;i<=n;i++){
if(ans[i]==2e9) cout << "Infinity\n";
else cout << ans[i] << "\n";
}
}
考试错误:骗分的,没想到真能骗分。
思路:
直接暴搜模拟每一种情况即可,放心,只有,TLE不了的。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct A{
int s,t,c;
};
A a[50];
struct B{
int aa,bb,p,mon;
};
B b[50];
int flag[50];
int mn=2e9;
int cow[110],place[110];
void dfs(int u){
if(u>m){
int money=0;
for(int i=1;i<=m;i++){
if(flag[i]){
money+=b[i].mon;
for(int j=b[i].aa;j<=b[i].bb;j++){
cow[j]+=b[i].p;
}
}
}
int flag=1;
for(int i=1;i<=100;i++){
if(cow[i]<place[i]){
flag=0;
break;
}
}
if(flag){
mn=min(mn,money);
}
for(int i=1;i<=100;i++){
cow[i]=0;
}
return;
}
dfs(u+1);
flag[u]=1;
dfs(u+1);
flag[u]=0;
}
signed main(){
freopen("air.in","r",stdin);
freopen("air.out","w",stdout);
cin >> n >> m;
for(int i=1;i<=n;i++){
cin >> a[i].s >> a[i].t >> a[i].c;
for(int j=a[i].s;j<=a[i].t;j++){
place[j]=a[i].c;
}
}for(int i=1;i<=m;i++){
cin >> b[i].aa >> b[i].bb >> b[i].p >> b[i].mon;
}
dfs(1);
cout << mn;
}