首页 > 其他分享 >考前做题笔记

考前做题笔记

时间:2024-10-18 19:48:39浏览次数:2  
标签:10 cnt 考前 int top 笔记 long define

[KDOI-10]商店砍价

考虑dp,钦定全用操作 \(1\),容易由 \(v_i\le 10^5\) 发现只有剩下的数位小于 \(6\) 时用操作 \(2\) 才更优。于是我们设 \(f_{i,j}\) 为考虑完第 \(i\) 位剩下 \(j\) 个数用操作 \(2\) 能减小的最大代价,并从高位向低位考虑。

转移方程很显然,选或不选用操作 \(2\) 能减小的代价取最大值,对于数位 \(x\) 剩下 \(j\) 位,因为是从低到高枚举用操作 \(2\) 即保留这一位的代价为 \(x\times 10^{j-1}\)。所以转移方程为 $$f_{i,j}=\max(f_{i+1,j},f_{i+1,j-1}+v_i-a_i\times 10^{j-1})$$ \(a_i\) 为输入数从左向右数第 \(i\) 位。

Code:

#include<bits/stdc++.h>
#define gt getchar
#define pt putchar
#define int long long
#define ull unsigned long long
#define fst first
#define snd second
#define L(x) x<<1
#define R(x) x<<1|1
using namespace std;
typedef pair<int,int> pii;
const double eps=1e-6;
inline bool pts(char ch){return ch>=48&&ch<=57;}
inline int read(){
	bool f=0;int x=0;char ch;
	ch=gt();
	while(!pts(ch)&&ch!=EOF){if(ch=='-')f=1;ch=gt();}
	while(pts(ch)){x*=10;x+=(ch-48);ch=gt();}
	if(f)return -x;
	else return x;
}
template<class T>
inline void print(T x){
	char s[114];
	int top=0;
	if(x<0)pt('-');
	do{
		top++;
		if(x>=0)s[top]=(x%10)+48;
		else s[top]=(-(x%10)+48);
		x/=10;
	}while(x);
	while(top){pt(s[top]);top--;}
}
int f[100005][10];
int v[10];
//|n|>6时1一定优,设f[i][j]为考虑到第i位利用策略二答案减小的值
void solve(){
    memset(f,-1,sizeof(f));
    string s;
    cin>>s;
    int len=s.size();
    s=' '+s;
    int sum=0;
    for(int i=1;i<=9;i++)v[i]=read();
    f[len+1][0]=0;
    for(int i=len;i>=1;i--){
        sum+=v[s[i]-'0'];
        f[i][0]=f[i+1][0];
        for(int j=1;j<=6;j++){
            f[i][j]=max(f[i][j],f[i+1][j]);
            f[i][j]=max(f[i+1][j],f[i+1][j-1]+v[s[i]-'0']-(s[i]-'0')*(int)powl(10,j-1));
        }
    }
    int maxn=-1;
    for(int j=1;j<=6;j++)
        maxn=max(maxn,f[1][j]);
    cout<<min(sum,sum-maxn)<<'\n';
}
signed main(){
    int c=read(),T=read();
    while(T--)solve();
    return 0;
}

打字练习

把范文和输入分别读入,读入时用 getline,然后把每行字符串处理掉退格键加入到 vector 中方便比较,记正确的字符数为 \(cnt\),答案即为 \(cnt\times 60\div t+0.5\)。

坑点:范文也有退格键,处理退格时注意写法。

#include<bits/stdc++.h>
#define gt getchar
#define pt putchar
#define int long long
#define ull unsigned long long
#define fst first
#define snd second
#define L(x) x<<1
#define R(x) x<<1|1
using namespace std;
typedef pair<int,int> pii;
const double eps=1e-6;
inline bool pts(char ch){return ch>=48&&ch<=57;}
inline int read(){
	bool f=0;int x=0;char ch;
	ch=gt();
	while(!pts(ch)&&ch!=EOF){if(ch=='-')f=1;ch=gt();}
	while(pts(ch)){x*=10;x+=(ch-48);ch=gt();}
	if(f)return -x;
	else return x;
}
template<class T>
inline void print(T x){
	char s[114];
	int top=0;
	if(x<0)pt('-');
	do{
		top++;
		if(x>=0)s[top]=(x%10)+48;
		else s[top]=(-(x%10)+48);
		x/=10;
	}while(x);
	while(top){pt(s[top]);top--;}
}
string fw[10005];
string sr[10005];
vector<char>v1[10005],v2[10005];
signed main(){
    int cnt=0;
    while(true){   
        cnt++;
        getline(cin,fw[cnt]);
        if(fw[cnt]=="EOF")break;
        for(char c:fw[cnt]){
            if(c!='<')v1[cnt].push_back(c);
            else if(c=='<'&&v1[cnt].size()>0)v1[cnt].pop_back();//这两个if else顺序是坑点
        }
    }
    int tnc=0;
    while(true){
        tnc++;
        getline(cin,sr[tnc]);
        if(sr[tnc]=="EOF")break;
        for(char c:sr[tnc]){
            if(c!='<')v2[tnc].push_back(c);
            else if(c=='<'&&v2[tnc].size()>0)v2[tnc].pop_back();
        }
    }
    int ans=0;
    for(int i=1;i<=min(cnt,tnc);i++)
        for(int j=0;j<min(v2[i].size(),v1[i].size());j++)
            if(v1[i][j]==v2[i][j])ans++;
            //cout<<(char)v1[i][j]<<' '<<(char)v2[i][j]<<'\n';
    int T=read();
    cout<<(int)(1.0*ans/T*60.0+0.5);
    return 0;
}

标签:10,cnt,考前,int,top,笔记,long,define
From: https://www.cnblogs.com/FinderHT/p/18474940

相关文章

  • [学习笔记] Minimax 算法和 Alpha-Beta 剪枝
    题目引入在博弈论中,有这样一类题目:两个玩家A、B轮流行动,A先手,B后手。有一个结果,A想要使它最大,B想要使它最小。Minimax算法把每个状态作为一个点,每个转移作为一条边建出一棵树。这棵树好像叫博弈树。两种实现(都没有真正地建树):直接搜索(可能有结点被重复经过)记忆化......
  • 程序员修炼之道——第一章读书笔记
    《程序员修炼之道——从小工到专家》第一章阅读笔记一、章节主题个人责任与职业素养二、核心观点个人责任的重要性:程序员需要对代码的质量和项目的成功负责,而不仅仅是完成任务。职业素养:包括良好的编程习惯、持续学习和对工作的热情。三、重要内容摘要代码质量:高质量的......
  • 《代码大全》阅读笔记3(2024.10.18)
    在阅读《代码大全》第7-10章后,我深刻体会到了软件开发中代码质量的重要性以及在实际开发过程中应遵循的最佳实践。第7章强调了代码的结构与可读性。一个清晰、模块化的代码不仅能提高团队的协作效率,还能帮助开发者更快地理解和修改代码。良好的命名规范是提升可读性的关键。变量......
  • Rust学习笔记
    首先下载RUST的安装程序:https://www.rust-lang.org/tools/installWindows系统直接下载rustup-init.exe进行安装。这个只是一个安装器,安装的过程中还需要再下载安装文件。下载的速度可能会有点慢。可以尝试设置下面两个系统环境变量(设置在当前用户里)RUSTUP_DIST_SERVER="https:......
  • 强化学习算法笔记之【Q-learning算法和DQN算法】
    强化学习笔记之【Q-learning算法和DQN算法】前言:强化学习领域,繁冗复杂的大段代码里面,核心的数学公式往往只有20~40行,剩下的代码都是为了应用这些数学公式而服务的这可比遥感图像难太多了,乱七八糟的数学公式看得头大本文初编辑于2024.10.5CSDN主页:https://blog.csdn.net/rvd......
  • C#学习笔记之编码
    C#学习笔记之编码 归纳:一、ASCII码ASCII码是用来表示英文字符的一种编规范,每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数为255(00H-FFH)。 二、Unicode码Unicode也是一种字符编码方法,它占用两个字节(0000H-FFFFH),容纳65536个字符。三、UTF-8以8位为......
  • ShowMeAI-人工智能工具笔记-九-
    ShowMeAI人工智能工具笔记(九)T81-558|深度神经网络应用-全案例实操系列(2021最新·完整版)-P15:L2.4-在Pandas中为Keras使用Apply和Map-ShowMeAI-BV15f4y1w7b8嗨,我是Jeffine,欢迎来到华盛顿大学的深度神经网络应用课程。在这段视频中,我们将看看如何结合使用apply和......
  • 01 bfs 学习笔记
    当一张图的边权只有\(0\)和\(1\)时,跑dij的堆优化显得比较累赘。因为只有两个取值,所以取\(0\)的时候在队列前面推进来,反之在后面。其他和dij没什么区别,时间复杂度\(O(m)\),其中\(m\)是边数。相关题目:P4554小明的游戏。点击查看代码voidwork(){ m0(vis);mem(di......
  • 二维 bfs 基础笔记
    一、寻找连通块1.基本思路找到一个未被走过的点,以这个点为起点,将与此点相连的所有点标记为走过,答案数\(+1\)2.代码实现#include<bits/stdc++.h>usingnamespacestd;structp{intx,y;};queue<p>q;intn,m,cnt;//最终答案为cntintdx[]={1,-1,0,0}......
  • 《使用Gin框架构建分布式应用》阅读笔记:p77-p87
    《用Gin框架构建分布式应用》学习第5天,p77-p87总结,总计11页。一、技术总结1.Go知识点(1)context2.on-premisessoftwarep80,AcontainerislikeaseparateOS,butnotvirtualized;itonlycontainsthedependenciesneededforthatoneapplication,whichmakesthe......