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的熟食, ...
随机推荐
- DeepCloneObjects 和 DeepClone
ARX AcDbDatabase 中的方法 deepCloneObjects() 和 wblock() 区别以及和 AcDbObject 方法 clone() 和 deepClone() 的关系 Ac ...
- CAD得到指定条件的实体
主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...
- JavaScipt30(第二个案例)
承接上篇https://www.cnblogs.com/wangxi01/p/10641115.html,这是第二个案例 附上项目链接: https://github.com/wesbos/JavaS ...
- 00HyperText Markup Language
HyperText Markup Language HTML超文本标记语言是一种用于创建网页的标准标记语言用于显示网页内容,HTML运行在浏览器上,由浏览器来解析,您可以使用 HTML 来建立自己的 ...
- Luogu P4316 绿豆蛙的归宿
P4316 绿豆蛙的归宿 题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边 ...
- 10 Minutes to pandas中文版
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- Go:闭包
闭包就是一个函数和与其相关的引用环境组合的一个整体(实体). package main import "fmt" func add() func(int) int { i := 0 ...
- Thinkphp 批量更新方法 saveALL
批量更新只适用于一个字段的更新,原理是用自定义函数拼接sql语句,然后再执行sql语句. //数据 $data[] = array('id'=>1,'value'=>value1); $d ...
- node.js 核心http模块,起一个服务器,返回一个页面
let http=require("http"); //引入核心http模块 let fs=require("fs"); let mime={ '.js':'a ...
- android在listview中放入从sdcard读取的bitmap
重写viewbinder public class viewbinder_bookmark implements SimpleAdapter.ViewBinder{ @Override public ...