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. 《ASP.NET4 从入门到精通》学习笔记4

    第4部分诊断与插件 刚開始看这章的时候,真实一头雾水.不知道在讲什么.只是看了关于http pipeline之后.才了解相关说明. 因此对于这一章的学习,建议各位首先看看http pipeline然后 ...

  2. Mac系统打开命令行终端及查看操作系统版本号的方法

    Mac系统打开命令行终端的方法: 应用程序 --> 实用工具 --> 终端 Mac系统终端查看操作系统版本号的方法: 输入:#more /System/Library/CoreServic ...

  3. POJ1808 平方(二次)同余方程

    POJ1808  给定一个方程 x*x==a(mod p) 其中p为质数 判断是否有解 程序中 MOD_sqr()返回整数解 无解返回-1 数学证明略 #include<iostream> ...

  4. Java 泛型 三

    一.泛型初衷 Java集合不会知道我们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要就具有很好的通用性.但这样做也带来两个问题: –集合对元素类型没有任何限制,这样可能引 ...

  5. 如何精通javascript

    http://stackoverflow.com/questions/2628672/what-should-every-javascript-programmer-know Not jQuery. ...

  6. C++ 值初始化和默认初始化

    对于初始化的问题,我之前一直傻傻分不清.有关初始化以及赋值的区别也是一问题,这次回过头来看,配合<<CSAPP>>的内容,对初始化有了一些新的认识. 声明: 在环境/上下文中指 ...

  7. MySQL Archive存储引擎

    200 ? "200px" : this.width)!important;} --> 介绍 从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上 ...

  8. 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)

    1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 935  Solved: 55 ...

  9. 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

  10. EasyUI系列学习(十一)-Accordion(分类)

    一.加载 1.class加载 <div class="easyui-accordion" style="width:300px;height:200px" ...