2019西安多校联训 Day4
T1
大水题!!难度简单,显然的贪心策略即可,but...
思路:首先我们按与i点作战后活下来的士兵排序,然后
若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加
够再打它,但是!我们在考完试观察测试点时发现了这样一组
测试点:
2
7 4
5 1
emmm,这组测试点是什么意思呢??我们只需要4个人就可以
打下这座城市,但打这个城市的4个人中需要阵亡7人!(???喵喵喵???)
这就很尴尬了,当我们遇到这样的点时,我们只需凑够阵亡人数即可
不用管剩余人数(显然无人生还...)
#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
然后套个快速幂即可,数据过多可以再套个快读快写
#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结束后我们只需要再判断整合后的字符串是否满足回文串即可
#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的更多相关文章
- 2019西安多校联训 Day5
T1 光哥为了不让某初二奆佬恶心到我们而留下的火种 (貌似没这题平均分就100-了) 思路:就一横一竖让后就gztopa嘛 #include <bits/stdc++.h> using n ...
- 2019西安多校联训 Day3
试题链接:http://www.accoders.com/contest.php?cid=1895 考试密码请私信; 特别鸣谢:zkc奆佬帮助我优化本篇题解(语言表达方面) T1 显然二分求解的 ...
- 2019西安多校联训 Day2
试题链接:http://www.accoders.com/contest.php?cid=1894 考试密码请私信; T1 残忍WA 0,明明就是一道非常菜的字符串QAQ 思路:一共找四种东西,A ...
- 2019西安多校联训 Day1
试题链接:http://www.accoders.com/contest.php?cid=1893 考试密码请私信; T1 明明就是O(n)的模拟,强行打成二分QAQ 思路:判断收尾是否为1或 ...
- Contest1893 - 2019年6月多校联训b层测试1
传送门 密码:waxadyt T1 暴力 对于任意相邻的两个值 中间能到达的最大高度是固定的 加上头尾,判一下就好了 代码//感谢Th Au K #include<bits/stdc++.h&g ...
- 2019中山纪念中学夏令营-Day4[JZOJ]
Begin (题目的排序方式:难易程度) 什么是对拍: 对拍是一种在写完程序后,验证自己程序是不是正解的比较方便的方法. 实现过程: 对同一道题,再打一个暴力程序,然后用一些大数据等跑暴力程序来进行验 ...
- [DBSDFZOJ 多校联训] 就
就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...
- [DBSDFZOJ 多校联训] Password
Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...
- 【正睿多校联盟Day4 T4 简单的数论题】
题目名有毒 由于并没有系统地开始学习数论,所以数论题基本靠暴力. 然鹅本题的题解相当简单: emmm....我当你没说 一个简单易懂的方法是这样的: 1. 欧拉定理的推论 若正整数a,n互质,则对于任 ...
随机推荐
- 《ASP.NET4 从入门到精通》学习笔记4
第4部分诊断与插件 刚開始看这章的时候,真实一头雾水.不知道在讲什么.只是看了关于http pipeline之后.才了解相关说明. 因此对于这一章的学习,建议各位首先看看http pipeline然后 ...
- Mac系统打开命令行终端及查看操作系统版本号的方法
Mac系统打开命令行终端的方法: 应用程序 --> 实用工具 --> 终端 Mac系统终端查看操作系统版本号的方法: 输入:#more /System/Library/CoreServic ...
- POJ1808 平方(二次)同余方程
POJ1808 给定一个方程 x*x==a(mod p) 其中p为质数 判断是否有解 程序中 MOD_sqr()返回整数解 无解返回-1 数学证明略 #include<iostream> ...
- Java 泛型 三
一.泛型初衷 Java集合不会知道我们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要就具有很好的通用性.但这样做也带来两个问题: –集合对元素类型没有任何限制,这样可能引 ...
- 如何精通javascript
http://stackoverflow.com/questions/2628672/what-should-every-javascript-programmer-know Not jQuery. ...
- C++ 值初始化和默认初始化
对于初始化的问题,我之前一直傻傻分不清.有关初始化以及赋值的区别也是一问题,这次回过头来看,配合<<CSAPP>>的内容,对初始化有了一些新的认识. 声明: 在环境/上下文中指 ...
- MySQL Archive存储引擎
200 ? "200px" : this.width)!important;} --> 介绍 从archive单词的解释我们大概可以明白这个存储引擎的用途,这个存储引擎基本上 ...
- 1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
1642: [Usaco2007 Nov]Milking Time 挤奶时间 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 935 Solved: 55 ...
- 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- EasyUI系列学习(十一)-Accordion(分类)
一.加载 1.class加载 <div class="easyui-accordion" style="width:300px;height:200px" ...