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的熟食, ...
随机推荐
- 日常开发需要掌握的Maven知识
文章来自:https://www.jianshu.com/p/e224a6dc8f20和https://www.jianshu.com/p/20b39ab6a88c Maven出现之前 jar包默认都 ...
- Leetcode724:寻找数组的中心索引(java、python3)
寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...
- eBPF监控工具bcc系列五工具funccount
eBPF监控工具bcc系列五工具funccount funccount函数可以通过匹配来跟踪函数,tracepoints 或USDT探针.例如所有以vfs_ 开头的内核函数. ./funccount ...
- libevent reference Mannual IV --Helper functions and types
FYI: http://www.wangafu.net/~nickm/libevent-book/Ref5_evutil.html Helper functions and types for Lib ...
- try catch影响Spring事务吗?
对于这个问题有两种情况: 1.catch只打印异常,不抛出异常 try { 数据库做添加订单表; /; 数据库减少库存; }catch (Exception e){ e.printStackTrace ...
- cookie的原理
一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上.首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,然后,浏览器在它的请求中通过Cooki ...
- 统计nginx日志里每五分钟的访问量
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Random_lee import time import os import re cla ...
- c#读取.config文件内容
今天在做项目的时候,由于程序同时启动多种情况的数据,测试分为多个人,就需要把数据分离开来,于是用了一个临时的配置文件,让测试在配置文件修改相应数据从而让各个测试互相不影响! 步骤: 第一步:添加一个A ...
- Java面试题大全(javaSe,HTML,CSS,js,Spring框架等)
目录 1. Java基础部分 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2.Java有没有goto? 7 3.说说&和& ...
- 【GC分析】Java GC日志查看
Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃圾收集. UsePa ...