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互质,则对于任 ...
随机推荐
- [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)
最近同事咨询这两个问题: 1.word 2007内是否有全屏显示的快捷键,这样投影时,就可以快速切换到全屏. 2.从ppt或者excel复制一张较大的图片,word 2007 会默认让复制的图片缩小, ...
- Python执行系统命令并获得输出的几种方法
[root@a upfc]# ./ffmpeg-linux64-v3.3.1 -i a.mp3 ffmpeg version N-86111-ga441aa90e8-static http://joh ...
- 美国诚实签经验——必带材料:护照,证件照,DS160确认页,面试预约确认页,+境外照片
Step3. 准备签证材料这些材料如果准备,请一定围绕着你的DS160表格,不可说谎,但可适当修饰,辅佐它,烘托它,营造出一种——你绝无可能去不复返,绝无可能制造麻烦,绝无想占人便宜的意思,并且随时可 ...
- 使Android 自带SDK 完美支持HTML5 之 html5webview
HTML5出来之后,webkit 大部分都支持了,但是由于历史原因,支持限度有限,我在Android 4.0使用 hao123的客户端访问youxi.cn期望可以万网手机HTML5游戏但是有些失望,进 ...
- [NOIP 2010] 引入入城
[题目链接] https://loj.ac/problem/2595 [算法] 显然 , 每个第一行的成市控制的一定是一段区间 那么 , 问题就转化为了经典的区间覆盖问题 , 贪心即可 , 时间复杂度 ...
- 【POJ 3233】Matrix Power Series
[题目链接] 点击打开链接 [算法] 要求 A^1 + A^2 + A^3 + ... + A^k 考虑通过二分来计算这个式子 : 令f(k) = A^1 + A^2 + A ^ 3 + ... + ...
- 使用IntelliJ IDEA 配置JDK(入门)
一.JDK下载 首先要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击 ...
- 【NOI2012】魔幻棋盘
Description 将要读二年级的小 Q 买了一款新型益智玩具——魔幻棋盘,它是一个N行M列的网格棋盘,每个格子中均有一个正整数.棋盘守护者在棋盘的第X行Y列(行与列均从1开始编号) 并且始终不会 ...
- ActiveMQ命令行工具
命令行工具 命令行工具 n activemq——运行activemq代理 n activemq-admin——管理代理的实例 在5.0之前activemq-admin被分成多个脚本,例如 ...
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
概念,见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...