CodePlus 2017 12 月赛
这场比赛跟个zz一样 div1卡在了同余方程上 心态崩了去做div2 然后被T1搞崩了
T1:
大模拟
比较像配平方程式
思路:
但是未知物质每种元素系数不能≥10 且不能为空 (如CO2+?=CO2)
没考虑以上两种情况调了好久也没对 心态爆炸
loj 6255
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 700
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,len,i,hsh[][];
bool f,k;
char str[MAXN];
int main()
{
n=read(),m=read();
while(n--)
{
k=;
memset(hsh,,sizeof(hsh));
scanf("%s",str+);
len=strlen(str+);
for(i=;i<=len;i++)
{
if(str[i]=='=') break;
if('A'<=str[i]&&str[i]<='Z')
{
if(isdigit(str[i+])) hsh[][str[i]-'A']+=(str[i+]-'');
else hsh[][str[i]-'A']++;
}
else {if(str[i]=='?') f=;continue;}
}
i++;
//cout<<i<<" "<<len;
for(i;i<=len;i++)
{
//cout<<i<<endl;
if('A'<=str[i]&&str[i]<='Z')
{
//cout<<i<<endl;
if(isdigit(str[i+])) hsh[][str[i]-'A']+=(str[i+]-'');
else hsh[][str[i]-'A']++;
}
else {if(str[i]=='?') f=;continue;}
}
for(int i=;i<;i++) {if(hsh[f][i]>hsh[f^][i]||hsh[f^][i]-hsh[f][i]>) {puts("No Solution");goto ed;}}
for(int i=;i<;i++)
{
if(hsh[f^][i]-hsh[f][i]==) {printf("%c",i+'A');k=;}
else if(hsh[f^][i]-hsh[f][i]) {printf("%c%d",i+'A',hsh[f^][i]-hsh[f][i]);k=;}
}
if(!k) printf("No Solution");
printf("\n");
ed:;
}
}
T2:
考试的时候根本没看orz
这个问题是这样的:
对于任何一个n阶方阵,若任意从其中选择n个不同行不同列的位置,其上的权值之和均相等,则我们称这个矩阵是巧妙的。注意对于n=1的任何矩阵都是巧妙的
例如矩阵\begin{matrix}1&2&3\\4&5&6\\7&8&9\end{matrix}是巧妙的,因为1+5+9=1+6+8=2+4+9=2+6+7=3+5+7=3+4+8=15
而矩阵\begin{matrix}1&2\\2&1\end{matrix}不巧妙,因为1+1≠2+2
现在有一个n×m大小的矩阵M以及T个询问,每次询问其一个子方阵是否是巧妙的
思路:
通过一些例子发现
只有一个矩阵内所有二阶矩阵都为巧妙矩阵是,该矩阵为巧妙矩阵
然后一个二维前缀和就行了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 510
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,mp[MAXN][MAXN],Q;
int s[MAXN][MAXN];
int main()
{
n=read(),m=read();int a,b,c;
Q=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
mp[i][j]=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
s[i][j]=s[i-][j]+s[i][j-]-s[i-][j-]+(mp[i][j]+mp[i-][j-]==mp[i][j-]+mp[i-][j]);
while(Q--)
{
a=read(),b=read(),c=read();
printf("%c\n",s[a+c-][b+c-]-s[a+c-][b]-s[a][b+c-]+s[a][b]==(c-)*(c-)?'Y':'N');
}
}
T3:
若一个数列a满足条件a[n]=a[n-1]+a[n-2],n >=3,而a1 a2 为任意实数,则我们称这个数列为广义斐波那契数列
现在请你求出满足条件a1=i,a2为区间[l,r]中的整数,且ak mod p=m 的广义斐波那契数列有多少个
思路:
可以通过fibonacci+矩阵加速求出ak
然后将问题转化为一个同余方程 使用exgcd解决
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 510
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
ll MOD;
struct mat {ll num[][];};
mat mul(mat x,mat y)
{
mat res;
memset(res.num,,sizeof(res.num));
for(ll i=;i<;i++)
for(ll j=;j<;j++)
for(ll k=;k<;k++)
(res.num[i][j]+=x.num[i][k]*y.num[k][j]%MOD)%=MOD;
return res;
}
ll q_pow(ll n)
{
if(n<=) return ;
mat t,res;
memset(res.num,,sizeof(res.num));
t.num[][]=t.num[][]=t.num[][]=,t.num[][]=;
res.num[][]=res.num[][]=;
while(n)
{
if(n&) res=mul(res,t);
t=mul(t,t);
n>>=;
}
return res.num[][];
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==) {x=;y=;return a;}
ll d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
ll solve(ll a,ll b)
{
ll x,y;
ll gcd=exgcd(a,MOD,x,y);
if(b%gcd) return -;
x*=b/gcd,MOD/=gcd;
if(MOD<) MOD=-MOD;
ll res=x%MOD;
if(res<=) res+=MOD;
return res;
}
int main()
{
ll T,a,b,l,r,m,res,ans,n;
T=read();
while(T--)
{
a=read(),l=read(),r=read(),n=read(),MOD=read(),m=read(),a%=MOD;
(a*=q_pow(n-))%=MOD,b=q_pow(n-);
m=(m-a+MOD)%MOD;
res=solve(b,m);
if(res==-) {puts("");continue;}
if(r<res) {puts("");continue;}
ans=(r-res)/MOD+;
if(l>res) {ans-=(l-res)/MOD+;if((l-res)%MOD==) ans++;}
printf("%lld\n",ans);
}
}
CodePlus 2017 12 月赛的更多相关文章
- [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
[LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...
- 「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)
1A,拿来练手的好题 用一个优先队列按煮熟时间从小到大排序,被煮熟了就弹出来. 用n个vector维护每种食物的煮熟时间,显然是有序的. 用树状数组维护每种煮熟食物的数量. 每次操作前把优先队列里煮熟 ...
- 「CodePlus 2017 12 月赛」可做题2(矩阵快速幂+exgcd+二分)
昨天这题死活调不出来结果是一个地方没取模,凉凉. 首先有个一眼就能看出来的规律... 斐波那契数列满足$a_1, a_2, a_1+a_2, a_1+2a_2, 2a_1+3a_2, 3a_1+5a_ ...
- 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞
[题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...
- 【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1
[题意]定义一个n阶正方形矩阵为“巧妙的”当且仅当:任意选择其中n个不同行列的数字之和相同. 给定n*m的矩阵,T次询问以(x,y)为左上角的k阶矩阵是否巧妙.n,m<=500,T<=10 ...
- 【LibreOJ】#6257. 「CodePlus 2017 12 月赛」可做题2
[题意]数列满足an=an-1+an-2,n>=3.现在a1=i,a2=[l,r],要求满足ak%p=m的整数a2有多少个.10^18. [算法]数论(扩欧)+矩阵快速幂 [题解]定义fib(i ...
- 「CodePlus 2017 12 月赛」白金元首与独舞
description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...
- 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞
n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...
- 「CodePlus 2017 12 月赛」火锅盛宴
n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...
随机推荐
- python安装外部模块Django
Windows安装Django模块: 由于本人安装的Python版本是Python3.7,所以安装命令为:pip3 install django /pip3 install django安装过程中出现 ...
- 14mysql事务、数据库连接池、Tomcat
14mysql事务.数据库连接池.Tomcat-2018/07/26 1.mysql事务 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功. MySQL手动控制事务 开启事 ...
- 洛谷——P2094 运输
P2094 运输 题目描述 现在已知N件商品,和搬运它们其中每一件的费用.现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品.然后这2件商品只算一件商品的费用.但是这个商品的搬运费用是将选出的2 ...
- Luogu P1311 选择客栈
暴力 我一开始做这道题先想到的就是暴力... 所以先说一下暴力的做法.首先在输入的时候讲花费小于P的位置标记下来,然后用两层循环枚举所有的两个客栈的组合方案.再用一层循环将两个客栈之间的位置扫一遍,如 ...
- buf.readDoubleBE()
buf.readDoubleBE(offset[, noAssert]) buf.readDoubleLE(offset[, noAssert]) offset {Number} 0 <= of ...
- Python基础-获取当前目录,上级目录,上上级目录
import os print '***获取当前目录***' print os.getcwd() print os.path.abspath(os.path.dirname(__file__)) pr ...
- codeforces 372 Complete the Word(双指针)
codeforces 372 Complete the Word(双指针) 题链 题意:给出一个字符串,其中'?'代表这个字符是可变的,要求一个连续的26位长的串,其中每个字母都只出现一次 #incl ...
- 设置NODE_ENV=test环境变量
之前开发时因为有内网测试环境和外网测试环境,再部署打包时总是切换两个域名,比较麻烦,所以最好能设置一个环境变量,来控制两个域名,于是做了如下配置: "scripts": { &qu ...
- hadoop full cluster 改为伪分布
https://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-common/SingleCluster.html#Pseudo-Di ...
- 九度oj 题目1050:完数
题目1050:完数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8778 解决:3612 题目描述: 求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子 ...