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. [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)

    最近同事咨询这两个问题: 1.word 2007内是否有全屏显示的快捷键,这样投影时,就可以快速切换到全屏. 2.从ppt或者excel复制一张较大的图片,word 2007 会默认让复制的图片缩小, ...

  2. Python执行系统命令并获得输出的几种方法

    [root@a upfc]# ./ffmpeg-linux64-v3.3.1 -i a.mp3 ffmpeg version N-86111-ga441aa90e8-static http://joh ...

  3. 美国诚实签经验——必带材料:护照,证件照,DS160确认页,面试预约确认页,+境外照片

    Step3. 准备签证材料这些材料如果准备,请一定围绕着你的DS160表格,不可说谎,但可适当修饰,辅佐它,烘托它,营造出一种——你绝无可能去不复返,绝无可能制造麻烦,绝无想占人便宜的意思,并且随时可 ...

  4. 使Android 自带SDK 完美支持HTML5 之 html5webview

    HTML5出来之后,webkit 大部分都支持了,但是由于历史原因,支持限度有限,我在Android 4.0使用 hao123的客户端访问youxi.cn期望可以万网手机HTML5游戏但是有些失望,进 ...

  5. [NOIP 2010] 引入入城

    [题目链接] https://loj.ac/problem/2595 [算法] 显然 , 每个第一行的成市控制的一定是一段区间 那么 , 问题就转化为了经典的区间覆盖问题 , 贪心即可 , 时间复杂度 ...

  6. 【POJ 3233】Matrix Power Series

    [题目链接] 点击打开链接 [算法] 要求 A^1 + A^2 + A^3 + ... + A^k 考虑通过二分来计算这个式子 : 令f(k) = A^1 + A^2 + A ^ 3 + ... + ...

  7. 使用IntelliJ IDEA 配置JDK(入门)

    一.JDK下载 首先要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击 ...

  8. 【NOI2012】魔幻棋盘

    Description 将要读二年级的小 Q 买了一款新型益智玩具——魔幻棋盘,它是一个N行M列的网格棋盘,每个格子中均有一个正整数.棋盘守护者在棋盘的第X行Y列(行与列均从1开始编号) 并且始终不会 ...

  9. ActiveMQ命令行工具

    命令行工具 命令行工具 n        activemq——运行activemq代理 n activemq-admin——管理代理的实例 在5.0之前activemq-admin被分成多个脚本,例如 ...

  10. Storm编程入门API系列之Storm的可靠性的ACK消息确认机制

    概念,见博客 Storm概念学习系列之storm的可靠性  什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...