cstring

AtCoder Regular Contest 098

人盡茶涼 提交于 2020-11-24 13:24:41
AtCoder Regular Contest 098 C - Attention 题意:有n个人站成一排,每个人可能面向东或西。 现在要选一个人,让其他人转向所选的那个人。求最小转向次数。 分析:模拟即可。 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <map> using namespace std; typedef long long ll; #define GG puts("FUCK") #define N 300050 char str[N]; int n,sum; int main() { scanf("%d%s",&n,str+1); int i; for(i=1;i<=n;i++) { if(str[i]=='E') sum++; } int now=0,ans=1<<30; for(i=1;i<=n;i++) { if(str[i]=='E') sum--; ans=min(ans,now+sum); if(str[i]=='W') now++; } printf("%d\n",ans); } D - Xor Sum 2 题意:给你一个长度为n的序列,求合法连续子序列个数,合法定义为和等于他们异或起来。 分析

POJ-1038 Bugs Integrated, Inc. (状压+滚动数组+深搜 的动态规划)

一个人想着一个人 提交于 2020-11-24 06:38:10
本题的题眼很明显,N (1 <= N <= 150), M (1 <= M <= 10),摆明了是想让你用状态压缩dp。 整个思路如下:由于要填2*3或者3*2的芯片,那么就要找一个策略来判断到底能不能填。 精华1在此: 找到的策略是,记格子(i,j)的状态有三种: 状态0代表(i,j)和(i-1,j)均可用(可用包括非损坏和未占用) 状态1代表(i,j)可用但(i-1,j)不可用 状态2代表(i,j)和(i-1,j)均不可用。 这样设置状态后,我们可以将填芯片这个问题策略化描述: 即能够填芯片的情况无非两种: 其一横着填3*2的芯片,此时只需满足state(i,j)=0&&state(i,j+1)=0&&state(i,j+2)=0即可(在代码中用的是pre和now数组存放的两行状态) 其二是竖着填2*3的芯片,此时只需满足state(i,j)=0&&state(i,j+1)=0&&state(i-1,j)=0&&state(i-1,j+1)=0即可。 这样一来就可以从第一行开始深搜每一行可能出现的填芯片的情况并计数。 同时由于每个格子的状态只有3种,因此可以用3进制数对每一行的状态进行记录,也就是所谓的状态压缩。 比如如果某一行的状态为(1,1,0,2,2),转化为3进制数就是1*3^0+1*3^1+0*3^2+2*3^3+2*3^4。这样就将一行的状态用一个3进制数表示了。

CSP 小明种苹果(续)201909-2

我是研究僧i 提交于 2020-11-24 02:56:23
输入: 4 4 74 -7 -12 -5 5 73 -8 -6 59 -4 5 76 -5 -10 60 -2 5 80 -6 -15 59 0 输出: 222 1 0 输入: 5 4 10 0 9 0 4 10 -2 7 0 2 10 0 4 10 -3 5 0 4 10 -1 8 0 输出: 39 4 2 注意: 1.发生苹果掉落和疏果是两种不同的操作 发生苹果掉落(5 3) 疏果(5 -3) 2.一棵树可能出现多次苹果掉落的情况 比如:3 5 2 1(对于一棵树来说 有3个操作,原来有5个苹果,第一次掉落后还剩2个,第二次掉落后还剩1个) 3.当发生苹果掉落的苹果树的棵树大于等于3时才可能形成连续的三个苹果树 发生苹果掉落的苹果树的序号我是用栈存的,感觉稍微麻烦了点,有时间试试数组 #include <cstdio> #include <algorithm> #include <iostream> #include <stack> #include <cstring> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; typedef long long LL; const int mod = 1e9+ 7 ; int dir[ 4 ][ 2 ] = { 0 , 1 , 0 ,- 1 , 1 , 0 ,- 1

【2019 1月集训 Day1】回文的后缀

放肆的年华 提交于 2020-11-23 05:26:00
题意:   给定 n,s ,求有多少个字符集大小为 s ,长度为 n 的字符串,使得其不存在一个长度大于 1 的 回文后缀 。   答案对 m 取模。 分析:   考场见到计数题的链式反应,想写暴力—>暴力难写—>不会暴力—>弃疗—>爆零。   今天考试也不例外。但是逐渐思想过于摸化,没想到今天T2这么简单的一个递推,竟然不会写,我好弱啊,大概是学废了。   对于这道题目,我们想到,后缀其实就是前缀(把字符串倒过来即可)我们设f[i]表示长度为i的满足题意的最长回文前缀是1的字符串有多少个,f[0]=1,在转移时,我们啥都不考虑,直接加一个字母。   但是可能原串是这样的,最长回文前缀长度为1,我们加了一个字母之后,突然最长回文前缀长度就变成了i,比如“abbbbbb”最长回文前缀是1,但是,假如我们加入一个a,那么这个长度立刻就变成了8,我们就要把不和法的减去,所以考虑长度为p的回文串(不存在一个大于1的回文串是它的前缀)的数目,其实我们把把半个串确定了,整个回文串就确定了。   所以方案数是f[ceil(i/2)],(ceil()函数代表向上取整)。   最终的递推式子就是f[i]=f[i-1]*s-f[ceil(i/2)];   别忘取模…… 代码: 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring>

loj #117. 有源汇有上下界最小流

元气小坏坏 提交于 2020-11-22 05:22:37
题目链接 有源汇有上下界最小流,-> 上下界网络流 注意细节,边数组也要算上后加到SS,TT边。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 #include<iostream> 6 7 using namespace std; 8 9 const int N = 150010 ; 10 const int INF = 1e9; 11 12 struct Edge{ 13 int to,nxt,c; 14 }e[ 500100 ]; 15 int head[N],dis[N],cur[N],M[N]; 16 int q[ 500100 ],L,R; 17 int tot = 1 ,n,m,S,T,Sum; 18 19 inline char nc() { 20 static char buf[ 100000 ],*p1 = buf,*p2 = buf; 21 return p1==p2&&(p2=(p1=buf)+fread(buf, 1 , 100000 ,stdin),p1==p2)?EOF:*p1++ ; 22 } 23 inline int read() { 24 int x = 0 ,f = 1 ; char ch = nc(); 25 for (; ch

LOJ117 有源汇有上下界最小流(上下界网络流)

好久不见. 提交于 2020-11-22 04:30:56
  跑出可行流后从原来的汇点向原来的源点跑最大流,原图最小流=inf-maxflow。显然超源超汇的相关边对其也没有影响。原图最小流=可行流-原图新增流量,因为t向s流量增加相当于s向t流量减少。但为什么等于inf-maxflow呢?显然最大流会把这条inf边跑满,这样会增加inf-可行流的流量,然后又继续在原图中增加可增加的流量,移项就可以得到这个式子了。 #include<iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; int read() { int x= 0 ,f= 1 ; char c= getchar(); while (c< ' 0 ' ||c> ' 9 ' ) { if (c== ' - ' ) f=- 1 ;c= getchar();} while (c>= ' 0 ' &&c<= ' 9 ' ) x=(x<< 1 )+(x<< 3 )+(c^ 48 ),c= getchar(); return x* f; } #define N 50010 #define M 500000 #define S 0 #define T 50001 #define inf

C++做四则运算的MFC计算器(二)栈转换和计算后缀表达式

自作多情 提交于 2020-11-21 11:54:54
上篇写了MFC界面搭建,这篇写实现计算。涉及到数据结构,对新手很不友好。 虽然是MFC程序,但是能灵活地分离后台代码,自行构建控制台程序,本文的程序一开始只是个“黑框框”程序,后来把代码包装进MFC的。 上篇文章链接: C++做四则运算的MFC计算器(一)MFC界面创建 概要: 中缀表达式与后缀表达式 栈的相关实现 用栈将中缀表达式转换成后缀表达式 用栈计算后缀表达式 等号按钮功能,显示计算结果 中缀表达式与后缀表达式 中缀:(60-20)/(5-1)。小学就学的东西 后缀:60 20 – 5 1 - /,为增加可读性,以“#”做分隔符,60#20#-#5#1#-#/。 后缀计算:从左到右遇到符号就计算符号左边的两个数并写上新值, 即优先的运算符相对在左 。上例中遇到第一个‘-’算60-20得40,遇到第二个“-”计算5-1得4,遇到“/”计算30/3的10,结果是10。 对比:中缀式人看起来方便,后缀式没有括号,计算顺序从前到后,用计算机操作起来的逻辑简单。 栈的相关实现 输入的值都是字符,所以需要一个字符结构的栈;在计算数时还需要一个处理数字结构的栈。 字符和数值的栈结构体分别命名SqStack和SqStackN。 然后实现栈初始化、进栈、出栈等栈的操作函数。 在工程中,同时把栈结构体和操作函数声明在新建的头文件xxx.h中,或者工程中其他头文件如stdafx.h

C语言中字符串常用函数--strcat,strcpy

不问归期 提交于 2020-11-20 05:20:35
strcpy 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include < string.h > 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的 地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的 指针 。 函数实现: /**********************  * C语言标准库函数strcpy的一种典型的工业级的最简实现  * 返回值:目标串的地址。  * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。  * 参数:  * strDestination 目标串  * strSource 源串  ***********************/   char * strcpy ( char *strDestination, const char *strSource)  {   assert(strDestination!= NULL && strSource!= NULL);   char *strD=strDestination;   while ((*strD++=*strSource++)!= '\0');   return strDestination

PTA PAT排名汇总(25 分)

怎甘沉沦 提交于 2020-11-19 05:22:09
PAT排名汇总(25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准(网址 http://www.patest.cn)。 每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。 现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。 输入格式: 输入的第一行给出一个正整数N( ≤100),代表考点总数。随后给出N个考点的成绩,格式为:首先一行给出正整数K( ≤300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。 输出格式: 首先在第一行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增顺序输出。 输入样例: 2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002

MFC和C#写windows程序

若如初见. 提交于 2020-11-19 05:19:00
-------------------------------------------- C#写Windows程序更简单,且跟MFC类似,现切换到C#,缺点就是依赖.Net了。 打开一个文件选择框 https://www.cnblogs.com/lotusto/p/5767141.html https://www.cnblogs.com/tinaluo/p/6636073.html 文本文件的读写: https://www.cnblogs.com/eniac12/p/4398310.html FileStream和StreamWriter/Reader的区别: https://www.cnblogs.com/lyd2016/p/6599550.html FileStream对象表示在磁盘或网络路径上指向文件的流。 这个类提供了在文件中读写字节的方法, 但经常使用StreamReader或 StreamWriter执行这些功能。 这是因为 FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。 ToString()参数中格式解析大全 https://blog.csdn.net/sinat_20559947/article/details/49028625 数字转十六进制字符串:255. ToString ("X") C#,int转成string