T1T1

考试错误:无。

思路:

公式题,公式为 (a1)×(b1)1( a - 1 )\times( b - 1 )- 1 ,具体请自行打表。

代码:

#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;
}

T2T2

考试错误:无。

思路:

模拟题,直接模拟即可。

代码:

#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;
}

T3T3

考试错误:没写。

思路:

用两个数组 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";
	}
}

T4T4

考试错误:骗分的,没想到真能骗99分。

思路:

直接暴搜模拟每一种情况即可,放心,MM只有1010TLE不了的

代码:

#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;
}