这场比赛跟个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 为任意实数,则我们称这个数列为广义斐波那契数列

现在请你求出满足条件a​1​​=i,a​2​​为区间[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 月赛的更多相关文章

  1. [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞

    [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...

  2. 「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)

    1A,拿来练手的好题 用一个优先队列按煮熟时间从小到大排序,被煮熟了就弹出来. 用n个vector维护每种食物的煮熟时间,显然是有序的. 用树状数组维护每种煮熟食物的数量. 每次操作前把优先队列里煮熟 ...

  3. 「CodePlus 2017 12 月赛」可做题2(矩阵快速幂+exgcd+二分)

    昨天这题死活调不出来结果是一个地方没取模,凉凉. 首先有个一眼就能看出来的规律... 斐波那契数列满足$a_1, a_2, a_1+a_2, a_1+2a_2, 2a_1+3a_2, 3a_1+5a_ ...

  4. 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞

    [题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...

  5. 【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1

    [题意]定义一个n阶正方形矩阵为“巧妙的”当且仅当:任意选择其中n个不同行列的数字之和相同. 给定n*m的矩阵,T次询问以(x,y)为左上角的k阶矩阵是否巧妙.n,m<=500,T<=10 ...

  6. 【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 ...

  7. 「CodePlus 2017 12 月赛」白金元首与独舞

    description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...

  8. 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞

    n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...

  9. 「CodePlus 2017 12 月赛」火锅盛宴

    n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...

随机推荐

  1. PhpStorm 本地管理提交码云和GitHub代码仓库

    参考地址:https://www.yflad.cn/1766.html 1:下载Git客户端 2:打开PhpStorm,设置,Version Control → Git.配置git执行文件的路径.gi ...

  2. 当ECharts碰到TWaver

    百度公司的ECharts发展迅速,已经成为HTML5 Chart的佼佼者,这让大家骄傲:中国人终于也有世界级的开源通用UI产品了.正如其网站所说,它是百度的,是中国的,也是世界的.想想那些年,我们追逐 ...

  3. 洛谷——P2252 取石子游戏

    P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  4. UVA-1599 Ideal Path(双向BFS)

    题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...

  5. 基于虚拟机的centos6.5 搭建本地光盘yum源

    在线yum安装必须要保持服务器能够连入网络并且他下载的还会比较慢因为地址大部分多是国外的下载站.另外yum在线下载的都是比较新的软件包,可能不是很稳定,那么使用yum的本地资源就是光盘里的RPM包,让 ...

  6. 恶补---bell数

    定义 bell数即一个集合划分的数目 示例 前几项的bell数列为 1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975 ,... 求值方法 1.bell ...

  7. 设置NODE_ENV=test环境变量

    之前开发时因为有内网测试环境和外网测试环境,再部署打包时总是切换两个域名,比较麻烦,所以最好能设置一个环境变量,来控制两个域名,于是做了如下配置: "scripts": { &qu ...

  8. Ural 1091 Tmutarakan Exams

    Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...

  9. HDU 1042 大数计算

    这道题一开始就采用将一万个解的表打好的话,虽然时间效率比较高,但是内存占用太大,就MLE 这里写好大数后,每次输入一个n,然后再老老实实一个个求阶层就好 java代码: /** * @(#)Main. ...

  10. 最小公倍数LCM

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入2个正整数A,B,求A与B的最小公倍数. Input 2个数A,B,中间用空格隔开.(1<= A,B <= ...