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

Living-Dream 系列笔记 第21期

时间:2024-03-03 18:45:48浏览次数:17  
标签:Living 21 int 31 long ans sorted Dream cur

Problem

T1

/*
思路:枚举二元组(i,j),依次检验k次训练课,若i的位置总是>j或<j,则将答案累加。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int k,n,ans;
int a[31][31];

signed main(){
	ios::sync_with_stdio(0);
	cin>>k>>n;
	for(int i=1;i<=k;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			bool f1=1,f2=1;
			for(int x=1;x<=k;x++){
				int p1,p2;
				for(int y=1;y<=n;y++) if(a[x][y]==i) p1=y;
				for(int y=1;y<=n;y++) if(a[x][y]==j) p2=y;
				if(p1>p2){ f1=0; break; } 
			}
			for(int x=1;x<=k;x++){
				int p1,p2;
				for(int y=1;y<=n;y++) if(a[x][y]==i) p1=y;
				for(int y=1;y<=n;y++) if(a[x][y]==j) p2=y;
				if(p2>p1){ f2=0; break; } 
			}
			if(f1||f2)
				//cout<<i<<' '<<j<<'\n';
				ans++;
		}
	}
	cout<<ans;
	return 0;
}

T2

/*
思路:
1.对于求绿色,直接将guess[]与ans[]比较即可,顺便求出每个品种的奶牛的绿色个数;
2.对于求黄色,遍历guess[],对于每一头新品种的牛,分别求出它在guess[]和ans[]中出现的次数,对这两个值-绿色个数取min即为当前奶牛的黄色个数,不要忘记标记这个品种。
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int vis[131],flag[131];
char guess[31][31],ans[31][31];

int get_green(){
	int cnt=0;
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			if(guess[i][j]==ans[i][j])
				cnt++,flag[guess[i][j]]++;
	return cnt;
}
int get_yellow(){
	int cnt=0;
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			char now=guess[i][j];
			
			int s1=0,s2=0;	
			for(int x=0;x<3;x++)
				for(int y=0;y<3;y++)
					s1+=(guess[x][y]==now);
			for(int x=0;x<3;x++)
				for(int y=0;y<3;y++)
					s2+=(ans[x][y]==now);
			
			if(s1&&s2&&!vis[now]){
				//cout<<now<<'\n';
				cnt+=min(s2-flag[now],s1-flag[now]),vis[now]=1;
				//break;
			}
		}
	}
	return cnt;
}

signed main(){
	ios::sync_with_stdio(0);
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cin>>guess[i][j];
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			cin>>ans[i][j];
	cout<<get_green()<<'\n';
	cout<<get_yellow();
	return 0;
}

T3

/*
思路:使用一个deque维护所有操作即可。
坑点:else总是和最近的if配对,因此需要勤加大括号!
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;

int s,now=1;
deque<int> dq;

signed main(){
	ios::sync_with_stdio(0);
	cin>>s;
	while(s--){
		char op1,op2; int k;
		cin>>op1>>op2;
		if(op1=='A'){
			if(op2=='L') dq.push_front(now++);
			else dq.push_back(now++);
		}
		else{
			cin>>k;
			if(op2=='L'){
			    for(int i=1;i<=k;i++) 
                    if(!dq.empty()) dq.pop_front();
            }
			else{
				for(int i=1;i<=k;i++) 
                    if(!dq.empty()) dq.pop_back();
            }
		}
	}
	while(!dq.empty())
		cout<<dq.front()<<'\n',dq.pop_front(); 
	return 0;
}

T4

/*
思路:
通过观察样例可知,S'排序后就是n个构造串排序后的首字母,
而每个构造串的首字母就是末字母的下一个字母,
因此我们用sorted[]保存S'排序后的字母序列,
并且维护cur表示S'中的当前位置,
然后倒序确认答案字母,
从S'[p]开始不断在sorted[]中寻找与S'[cur]相等的字母下标x,令cur=x,
此时的S'[cur]即为下一个字母,放入ans数组即可。
*/
#include<bits/stdc++.h>
using namespace std;

int n,p,cur;
bool vis[10031];
char s[10031],sorted[10031],ans[10031];

int main(){
    cin>>n;
	for(int i=1;i<=n;i++) cin>>s[i],sorted[i]=s[i];
	cin>>p;
    sort(sorted+1,sorted+n+1);
    
    ans[1]=s[p];
    for(int i=1;i<=n;i++)
        if(sorted[i]==s[p]){
            cur=i; break;
        }
    
    for(int i=n;i>=2;i--){
        ans[i]=s[cur],vis[cur]=1;
        for(int j=n;j>=1;j--)
            if(sorted[j]==s[cur]&&!vis[j]){
                cur=j; break;
            }
    }
    
    for(int i=1;i<=n;i++) cout<<ans[i];
    return 0;
}

标签:Living,21,int,31,long,ans,sorted,Dream,cur
From: https://www.cnblogs.com/XOF-0-0/p/18050462

相关文章

  • 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......
  • 20211121杨博川《密码工程》1、2章笔记
    一二章笔记@目录一二章笔记第1章密码学研究范围思维导图知识概述1.1密码学作用1.2木桶原理1.3对手设定1.4专业偏执狂1.5威胁模式1.6密码学不是唯一解决方案1.7密码学是非常难的1.8密码学是简单的部分1.9通用攻击1.10安全性和其他设计准则1.11更多阅读材料1.12专业偏执狂练习第2......
  • LTSC2021安装Windows Terminal
    Microsoft.VCLibs.x64.14.00.DesktopAdd-AppPackage.\Microsoft.VCLibs.x64.14.00.Desktop.appxMicrosoft.UI.XamlAdd-AppPackage.\Microsoft.UI.Xaml.2.8.x64.appxWindowsTerminalAdd-AppxPackage.\Downloads\Microsoft.WindowsTerminal_1.19.10573.0_8wekyb3d8......
  • day53 动态规划part10 代码随想录算法训练营 121. 买卖股票的最佳时机
    题目:121.买卖股票的最佳时机我的感悟:soeasy 打印dp确实能发现问题理解难点:注意条件,及时更新dp听课笔记:看了,老师的代码,感觉没有我的简洁,哈哈!!我的代码:classSolution:defmaxProfit(self,prices:List[int])->int:#设dp[i]为截止到当前能获得......
  • day52 动态规划part9 代码随想录算法训练营 213. 打家劫舍 II
    题目:213.打家劫舍II我的感悟:看了题解不难,就是环这个思路转化很重要!理解难点:环的转化为,首,尾。代码上面可以省略长度为2的校验听课笔记:分3中情况:不考虑首尾|考虑首|考虑尾而情况2和情况3包含了情况1我的代码:classSolution:defrob(self,nums:List[i......
  • remote: Support for password authentication was removed on August 13, 2021.
    今天在pushcode的时候发现报了如下的错误remote:SupportforpasswordauthenticationwasremovedonAugust13,2021. 根据提示发现需要updategithub的token, https://github.com/settings/tokens  改好生成对应的token,记得保存好 gitpushhttps://<your_tok......
  • 3121005947
    这个作业属于哪个课程软件工程2024-双学位(广东工业大学)这个作业要求在哪里软件工程第一次作业这个作业的目标学习Markdown语言、撰写博客目录软件工程第一次作业1.评估自己1.1个人介绍1.2当前值1.3项目经历2.展望未来2.1阅读《构建之法》2.2未来的职......