ABC354

A

link

模拟整个过程即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

signed main(){
	
	int h;
	cin >> h;
	int day = 1ll,g = 0ll;
	while(g < h){
		g += (1ll<<day);
		day++;
	}
	
	cout << day;
	
	return 0;
	
} 

B

link


名字排序后输出第\(T%N+1\)个即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int n;
string s[105];
int c;
int q;

signed main(){
	
	cin >> n;
	for(int i = 1;i <= n;++ i)
		cin >> s[i] >> c,q += c;
	
	q %= n;
	sort(s+1,s+1+n);
	cout << s[q+1];
	
	return 0;
	
} 

C

link

我们把这两个数看做这个位置的两个属性。
我们把其中一个属性排序,对于每一个位置找到后面另一个属性比它小的这个位置/那个位置就可以删掉了。
这个可以倒着来,从\(n\)\(1\),走过一个数把这个数取到最小值中,其他的判断是否大于最小值即可。

点击查看代码
#include<bits/stdc++.h>

using namespace std;

int n;
struct nd{
	int a,c,w;
}t[200005];
bool f[200005];
int mn = 0x3f3f3f3f,cn;

bool cmp(nd x,nd y){
	return x.a < y.a;
}

signed main(){
	
	cin >> n;
	for(int i = 1;i <= n;++ i)
		cin >> t[i].a >> t[i].c,t[i].w = i;
	
	sort(t+1,t+1+n,cmp);
	
	for(int i = n;i >= 1;-- i){
		if(t[i].c > mn) f[t[i].w] = 1,cn++;
		mn = min(mn,t[i].c);
	}
	
	cout << n-cn << endl;
	for(int i = 1;i <= n;++ i){
		if(!f[i]) cout << i << " ";
	}
	
	return 0;
	
}

D

link

以下图红框中的为周期,算出其中每一个格子出现了几次即可。

点击查看代码
#include<bits/stdc++.h>

#define int long long

using namespace std;

int a,b,c,d;
const int mn = 1e9+4;

int p[3][5] = {{0,0,0,0,0},
			   {0,2,1,0,1},
			   {0,1,2,1,0}};
int ans;

signed main(){
	
	cin >> a >> b >> c >> d;
	
	for(int i = 1;i <= 2;++ i){
		for(int j = 1;j <= 4;++ j){
			int sx = (c-j+4+mn)/4-(a-j+4+mn)/4;
			int sy = (d-i+2+mn)/2-(b-i+2+mn)/2;
			ans += sx*sy*p[i][j];
		}
	}
	
	cout << ans;
	
	return 0;
	
}
posted @ 2024-05-22 12:37  校牌杀手  阅读(10)  评论(0编辑  收藏  举报