首页 > 其他分享 >Living-Dream 系列笔记 第26期

Living-Dream 系列笔记 第26期

时间:2024-03-03 18:48:32浏览次数:17  
标签:Living 26 ch int vis while maxn Dream check

Problem

T1

见题解。

T2

/*
思路:
枚举每一头牛说的话,尝试将Bessie置于pi处,
再枚举其他牛说的话,检验不合法的数量,取max即为答案。
*/
#include<bits/stdc++.h>
using namespace std;

int n,ans=1e9;
struct node{
    char op;
    int p;
}a[1031];

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].op>>a[i].p;
    for(int i=1;i<=n;i++){
        int sum=0;
        for(int j=1;j<=n;j++){
            if(a[j].op=='G'&&a[j].p>a[i].p) sum++;
            if(a[j].op=='L'&&a[j].p<a[i].p) sum++;
        }
        ans=min(ans,sum);
    }
    cout<<(ans==1e9?0:ans);
    return 0;
}

T3

/*
思路:
枚举9个数的全排列,
然后枚举三段区间,分别代表整数、分子和分母,
若整数+分子/分母=n,则说明当前排列是合法的,将答案累加。
*/
#include<bits/stdc++.h>
using namespace std;

int n,ans;
int tmp[9]={1,2,3,4,5,6,7,8,9};

bool check(){
	for(int i=0;i<9;i++)
		for(int j=i+1;j<9;j++){
			int s1=0,s2=0,s3=0;
			double s=0.0;
			for(int k=0;k<=i;k++) s1=s1*10+tmp[k];
			for(int k=i+1;k<=j;k++) s2=s2*10+tmp[k];
			for(int k=j+1;k<9;k++) s3=s3*10+tmp[k];
			s=(double)s1+(double)s2/(double)s3;
			if(s==n) return 1;
		}
	return 0;
}

int main(){
	cin>>n;
	do{
		if(check()) ans++;
	}while(next_permutation(tmp,tmp+9));
	cout<<ans;
	return 0;
}

T4

/*
思路:
考虑二分R的值,
在check函数中,对n垛干草排序并遍历,
记录数组vis表示不用炸弹的位置,
若当前干草的vis=1,则不用放置炸弹,直接跳过,
否则在当前位置+R处放置一个炸弹,
并将从当前位置开始的到2R处的所有干草的vis均标记为1。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

inline __int128 read() {
    __int128 x = 0, f = 1; char ch = getchar();
    while (ch > '9' || ch < '0') { if (ch == '-')f = -1; ch = getchar(); }
    while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
    return x * f;
}
inline void write(__int128 x) {
    if (x < 0) { putchar('-'); x = -x; }
    if (x > 9) write(x / 10);
    putchar(x % 10 + '0');
}

int n,k,maxn=-1e9,a[50031];
bool vis[50031];

bool check(int x){
	int sum=0;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++){
		if(vis[i]) continue;
		sum++;
		for(int j=i;j<=n;j++){
			if(a[i]+2*x<a[j]) break;
			vis[j]=1;
		}
	}
	return sum<=k;
}

signed main(){
	ios::sync_with_stdio(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++) 
		cin>>a[i],maxn=max(maxn,a[i]);
	sort(a+1,a+n+1);
	
	int l=0,r=maxn+1;
	while(l+1<r){
		int mid=(l+r)>>1;
		if(check(mid)) r=mid;
		else l=mid;
	}
	cout<<r;
	return 0;
}

标签:Living,26,ch,int,vis,while,maxn,Dream,check
From: https://www.cnblogs.com/XOF-0-0/p/18050450

相关文章

  • Living-Dream 系列笔记 第25期
    ProblemT1/*思路:对于操作1,直接+=拼接即可;对于操作2,直接令s=s.substr(a,b)即可;对于操作3,直接令s=s.insert(a,t)即可;对于操作4,直接s.find(str)即可,注意特判-1。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intq;strings;signedmain(){......
  • Living-Dream 系列笔记 第23期
    ProblemT1/*思路:我们可以忽略两人碰到后转向的过程,直接视为两人彼此穿过了对方,这样算距离是不变的,时间也是不变的,所以合法。通过上述分析,那么最小时间即为对于每一个士兵往左/右走的时间取min再取max,最大时间反之亦然。*/#include<bits/stdc++.h>usingnamespacestd;......
  • Living-Dream 系列笔记 第24期
    ProblemT1/*思路:暴力枚举所有的和,用桶标记每个和出现的次数,找最大值且编号最小即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;ints1,s2,s3;intsum=-1e9,ans;intmp[131];signedmain(){ ios::sync_with_stdio(0); cin>>s1>>s2>>s3;......
  • Living-Dream 系列笔记 第21期
    ProblemT1/*思路:枚举二元组(i,j),依次检验k次训练课,若i的位置总是>j或<j,则将答案累加。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intk,n,ans;inta[31][31];signedmain(){ ios::sync_with_stdio(0); cin>>k>>n; for(inti=1;i<=......
  • Living-Dream 系列笔记 第22期
    ProblemT1/*思路:因为题目要求最大水量,所以K次操作需要都用上,并且由于每次都是将x倒入x+1中,所以K次操作之后的最大水量应当是x~x+k+1之和;于是问题就转变成了求一段长度为k+1的连续子段的和的最大值,因此维护一个前缀和即可。*/#include<bits/stdc++.h>usingnamespacestd......
  • Living-Dream 系列笔记 第19期
    ProblemT1/*思路:对于每一对L,R,标记[L,R)(注意左闭右开!),并且求出最小的L(minl)和最大的R-1(maxr);循环maxl~maxr,若被标记则最长连续挤奶时间+1,最长无人挤奶时间=0;否则最长连续挤奶时间=0,最长无人挤奶时间+1,同时更新最大值。*/#include<bits/stdc++.h>usingnamespacestd;intn......
  • Living-Dream 系列笔记 第18期
    ProblemT1/*思路:令N个整数以字符串形式读入,判断其末尾是否为0、2、4、6、8,若是则为偶数,不是则为奇数。*/#include<bits/stdc++.h>usingnamespacestd;intn;stringx;//以字符串形式读入intmain(){ cin>>n; while(n--){ cin>>x; if(x[x.size()-1]=='0'||x[x.......
  • Living-Dream 系列笔记 第20期
    ProblemT1/*思路:统计每个人成绩的出现人次,然后贪心地按分数值域从大到小扫描一遍,每次令答案累加上当前分数出现的人次,若答案>=k就停止扫描并输出即可。*/#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,k,a[2031];intcnt,ans;intmp[131......
  • leedcode 10进制转换成26进制
    10进制转换成26进制 A对应0:(正常的情况)classSolution:defconvertToTitle(self,columnNumber:int)->str:mydict={}#创建字典,映射数字到字母foriinrange(1,27):mydict[i]=chr(ord('A')+i-1)print(mydi......
  • Programming Abstractions in C阅读笔记:p312-p326
    《ProgrammingAbstractionsinC》学习第77天,p312-p326,总计15页,第7章完结。一、技术总结第7章主要讲算法分析——引入时间复杂度这一概念来评估算法的快慢。时间复杂度使用大O符号来表示。第7章以排序算法为示例,包含:选择排序,归并排序以及快速排序,这些基本的排序算法都是我们要......