T1

  大水题!!难度简单,显然的贪心策略即可,but...

  思路:首先我们按与i点作战后活下来的士兵排序,然后

若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加

够再打它,但是!我们在考完试观察测试点时发现了这样一组

测试点:

  2

  7 4

  5 1

  emmm,这组测试点是什么意思呢??我们只需要4个人就可以

打下这座城市,但打这个城市的4个人中需要阵亡7人!(???喵喵喵???)

这就很尴尬了,当我们遇到这样的点时,我们只需凑够阵亡人数即可

不用管剩余人数(显然无人生还...)

T1-

 #include <bits/stdc++.h>
using namespace std;
struct node{
long long x,y;
}a[];
long long n,mlast,ans;
long long T;
bool cmp(node p,node q){
return (p.y-p.x)>(q.y-q.x);
}
inline void solve(){
for(register int i=;i<=n;i++){
if(a[i].y<a[i].x&&mlast<a[i].x){ans+=(a[i].x-mlast),mlast=;continue;}
else if(a[i].y<a[i].x&&mlast>=a[i].x){mlast-=a[i].x;continue;}
if(mlast>=a[i].y){
mlast-=a[i].x;
continue;
}
else if(mlast<a[i].y){
ans+=a[i].y-mlast;
mlast=a[i].y-a[i].x;
}
}
}
int main(){
scanf("%lld",&T);
while(T--){
memset(a,,sizeof(a));
ans=;mlast=;
scanf("%lld",&n);
for(register int i=;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);
sort(a+,a+n+,cmp);
solve();
printf("%lld\n",ans);
}
return ;
}

X国的军队

   T2

  这道题是一道数论题,对没有学过组合数同学非常不友好

(当然对我这种学过组合数但是只会杨辉三角的人也不友好....)

难度中等,因为有规律鸭

  思路:首先我们需要知晓组合数的定义如下图

    

  此乃组合数,那我们可以好好看题了,根据二项式定理我们知道

C0n+C1n+C2n+...Cnn=2^n;这是无比显然的,但平方过后规律产生了

变化,由作业帮可得(Cn0)^2+(Cn1)^2+(Cn2)^2+...+(Cnn)^2=(2n!)/(n!)^2

由这个式子再加上组合数的一些定理可得(反正我是不会证的)

  ans=(2n)!*(n!)^(mod-2)%mod

  其中(n!)^(mod-2)即为(n!)^2在mod下的逆元,所以除法变为乘法

然后在我们了解了公式之后打一个(2n)!的表,然后每次算完%一下mod

然后套个快速幂即可,数据过多可以再套个快读快写

T2-

 #include <bits/stdc++.h>
using namespace std;
long long n,T;
const long long modd=1e9+;
long long dis[],x[];
long long ans,ak,ac,wa;
long long ksm(long long a, long long b, long long p){
long long ret=;
while(b){
if(b%)ret=(ret*a)%p;
a=(a*a)%p;
b=b>>;
}
return ret;
}
inline int read(){
int X=; bool flag=; char ch=getchar();
while(ch<''||ch>'') {if(ch=='-') flag=; ch=getchar();}
while(ch>=''&&ch<='') {X=(X<<)+(X<<)+ch-''; ch=getchar();}
if(flag) return X;
return ~(X-);
}
inline int write(long long X){
if(X<) {putchar('-'); X=~(X-);}
int s[],top=;
while(X) {s[++top]=X%; X/=;}
if(!top) s[++top]=;
while(top) putchar(s[top--]+'');
}
int main(){
T=read();
dis[]=x[]=;
for(register int i=;i<=;i++) dis[i]=dis[i-]*i%modd;
while(T--)
{
n=read();
wa=ksm(dis[n],modd-,modd);
ans=dis[*n]*wa%modd*wa%modd;
write(ans);
putchar('\n');
}
return ;
}

排列组合

   T3

  考试时我竟然想用线段树做!!(快停止这危险的想法),难度中上

其实本题正解是带有dp色彩的模拟...

  思路:首先咱们可以发现一个回文字符串的性质,假设咱们有一字符串长度>=3

假设它左右端点的字符相同,那显然内侧也是一个回文串,其次我们很显然的发现只

有一个字符的串是回文串,然后长度为2的字符串只需要特判一下就可以确定是否为

回文串了,验证回文串算法get√

  其次我们为什么称这道题为带有dp色彩的模拟呢?显然我们可以先O(n)处理一遍长度为1和长度为2的字符串,然后我即可找到dp式 dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1];

非常优秀!而dp结束后我们只需要再判断整合后的字符串是否满足回文串即可

T3-

 #include <bits/stdc++.h>
using namespace std;
long long T,n;
int l,r;
int a[][];
bool vis[][];
char s[];
bool check(int L,int R){
if(vis[L][R]) return true;
else if(s[L]==s[R]) return check(L+,R-);
return false;
}
int main(){
cin>>s+;
int len=strlen(s+);
scanf("%lld",&T);
for(register int i=;i<=len;i++){
vis[i][i]=true;
a[i][i]++;
a[i][i+]=;
if(s[i]==s[i+]) a[i][i+]++,vis[i][i+]=true;
}
for(register int i=;i<=len;i++){
for(register int l=;l+i-<=len;l++){
int r=l+i-;
a[l][r]=a[l][r-]+a[l+][r]-a[l+][r-];
if(check(l,r)) a[l][r]++,vis[l][r]=true;
}
}
while(T--){
int num1,num2;
scanf("%d%d",&l,&r);
printf("%d\n",a[l][r]);
}
return ;
}

回文

  end;

2019西安多校联训 Day4的更多相关文章

  1. 2019西安多校联训 Day5

    T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...

  2. 2019西安多校联训 Day3

    试题链接:http://www.accoders.com/contest.php?cid=1895    考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...

  3. 2019西安多校联训 Day2

    试题链接:http://www.accoders.com/contest.php?cid=1894   考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...

  4. 2019西安多校联训 Day1

    试题链接:http://www.accoders.com/contest.php?cid=1893  考试密码请私信;    T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...

  5. Contest1893 - 2019年6月多校联训b层测试1

    传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...

  6. 2019中山纪念中学夏令营-Day4[JZOJ]

    Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...

  7. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  8. [DBSDFZOJ 多校联训] Password

    Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...

  9. 【正睿多校联盟Day4 T4 简单的数论题】

    题目名有毒 由于并没有系统地开始学习数论,所以数论题基本靠暴力. 然鹅本题的题解相当简单: emmm....我当你没说 一个简单易懂的方法是这样的: 1. 欧拉定理的推论 若正整数a,n互质,则对于任 ...

随机推荐

  1. cocos2dx游戏开发学习笔记2-从helloworld開始

    一.新建project 具体安装和新建project的方法在cocos2dx文件夹下的README.md文件里已经有具体说明,这里仅仅做简介. 1.上官网下载cocos2dx-3.0的源代码.http ...

  2. [办公应用]如何打印较小边距的PPT讲义(或者每页打印16页)

    关键词:打印 PPT 讲义 4张 边距   今天同事问我如何打印PowerPoint的讲义.她自己使用PowerPoint打印讲义,设置每页4张,但是页边距太大:觉得浪费很大. 经过网上查阅后,现将方 ...

  3. 两道NOIP里的DP题目~

    拦截导弹    来源:NOIP1999(提高组) 第一题 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都 ...

  4. golang中管道热替换

    golang中管道替换问题 https://blog.csdn.net/cyk2396/article/details/78875347 1.运行以下代码: var chan1 chan int va ...

  5. MSD6A628开发资料与技术支持

    MSD6A628VX/VXM是mstar推出的低成本安卓智能网络电视方案,628分两个版本,一个是内置512MB内存,一个是外挂1G内存, 安卓4.4系统,4核A7处理器,Mali450MP2 GPU ...

  6. bzoj1051受欢迎的牛(Tarjan)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4776  Solved: 2542 Description ...

  7. Java中的锁机制,你真的了解吗?

    学到锁说明你已经学过多线程了,只有在多线程并发的情况下才会涉及到锁,相信大家用的最多的要数synchronized了,因为这个也是最简单的,直接加在方法上就可以使一个方法同步.那么除了synchron ...

  8. 实数类型c++

    数据类型 定义标识符 数值范围 占字节数 有效位数 单精度浮点数 float -3.4E+38-3.4E+38 4(32位) 6-7位 双精度浮点数 double -1.7E+308-1.7E+308 ...

  9. S - Cyclic Components (并查集的理解)

    Description You are given an undirected graph consisting of nn vertices and mm edges. Your task is t ...

  10. 基于Web的Kafka管理器工具之Kafka-manager启动时出现Exception in thread "main" java.lang.UnsupportedClassVersionError错误解决办法(图文详解)

    不多说,直接上干货! 前期博客 基于Web的Kafka管理器工具之Kafka-manager的编译部署详细安装 (支持kafka0.8.0.9和0.10以后版本)(图文详解)   问题详情 我在Kaf ...