喵哈哈村的魔法考试 Round #11 (Div.2) 题解
喵哈哈村的星星与月亮(一)
打表发现答案就等于a*b%mod
注意a*b可能爆longlong
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int main(){
long long a,b,c;
while(cin>>a>>b>>c){
cout<<((a%mod)*(b%mod))%mod<<endl;
}
}
喵哈哈村的星星与月亮(二)
数据范围只有10,所以直接dfs就好了。
直接枚举每个点的颜色,然后O(m)去check就好了。
理论复杂度最大是n^n*m,但实际上不会这么大。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 25;
int n,m,mp[maxn][maxn],Mx=0;
int ty[maxn];
vector<int> E[maxn],P;
int FF = 0;
vector<int> D;
int ti = 0;
int vis[maxn];
int T = 0;
void dfs2(int x,int y){
if(FF)return;
if(x==n+1){
FF = 1;
return;
}
for(int i=1;i<=min(x,y);i++){
ty[x]=i;
int flag = 0;
for(int j=1;j<x;j++){
if(mp[x][j]==1&&ty[x]==ty[j]){
flag = 1;
break;
}
}
if(flag == 0)
dfs2(x+1,y);
}
}
int main(){
srand(772003);
while(scanf("%d%d",&n,&m)!=EOF){
memset(mp,0,sizeof(mp));
for(int i=0;i<maxn;i++)E[i].clear();
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
E[a].push_back(b);
E[b].push_back(a);
mp[a][b]=1;
mp[b][a]=1;
}
Mx = 1;
int l = 1,r = n;
int ans = n;
for(int i=Mx;i<=n;i++){
ti = 0;
FF = 0;
dfs2(1,i);
if(FF){
cout<<i<<endl;
break;
}
}
}
}
喵哈哈村的星星与月亮(三)
这道题实际上和[BZOJ 4004][JLOI2015]装备购买 一模一样。
将wi排序,然后从大到小插入就好了,如果插入还是线性无关的就插入,否则就不插入。
用拟阵可以证明贪心的正确性。
然后我们用高斯消元来判断是否线性无关即可。
#include <bits/stdc++.h>
#define maxn 510
using namespace std;
typedef long long ll;
//const int mod = 998224353;
int mod;
struct Node{
int a[maxn], c;
bool operator<(const Node& k)const{return c > k.c;}
}p[maxn], bases[maxn];
bool bases_flag[maxn];
int n, m;
ll power_mod(ll a, ll b, ll mod){
ll ret = 1;
while(b){
if(b & 1)ret = ret * a % mod;
b >>= 1;
a = a * a % mod;
}return ret;
}
void Gauss(Node& a, const Node& b, int o){
//t = a.a[o] / b.b[o]
ll t = mod - a.a[o] * power_mod(b.a[o], mod-2, mod) % mod;
for(int i = o; i <= m; i ++)
a.a[i] =(a.a[i] + b.a[i] * t) % mod;
}
bool Insert(int pos){
for(int i = 1; i <= m; i ++){
if(p[pos].a[i]){
if(!bases_flag[i]){
bases[i] = p[pos];
bases_flag[i] = true;
return true;
}
Gauss(p[pos], bases[i], i);
}
}
return false;
}
int main(){
while(scanf("%d%d%d", &n, &m, &mod)!=EOF){
memset(bases,0,sizeof(bases));
memset(bases_flag,0,sizeof(bases_flag));
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++)
scanf("%d", &p[i].a[j]);
scanf("%d", &p[i].c);
}
sort(p+1, p+1+n);
long long ans = 0;
for(int i = 1; i <= n; i ++)
if(Insert(i))ans += p[i].c;
printf("%lld\n", ans);
}
return 0;
}
喵哈哈村的星星与月亮(四)
假设三个数能够构成等比数列的话,那么满足:
ac=bb,满足 a<b,b<c(都相同的另外考虑)
我们发现其实b的因子个数只有logn个,那么b^2的因子个数,实际上也不会很多,所以我们直接暴力的把b*b且小于b的因子个数暴力dfs出来就好了。
然后我们枚举b就可以算答案了。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int a[maxn];
int num[100005],n;
vector<int> E[maxn],P[maxn],N[maxn];
void dfs(int x,int st,int Num){
E[x].push_back(Num);
for(int j=st;j<P[x].size();j++){
int now = Num;
for(int k=1;k<=N[x][j]*2;k++){
now*=P[x][j];
if(now>x)break;
dfs(x,j+1,now);
}
}
}
int main(){
for(int i=1;i<=100000;i++){
int x = i;
for(int j=2;j*j<=i;j++){
if(x%j==0){
P[i].push_back(j);
N[i].push_back(0);
while(x%j==0){
N[i][N[i].size()-1]++;
x/=j;
}
}
}
if(x!=1){
P[i].push_back(x);
N[i].push_back(1);
}
dfs(i,0,1);
sort(E[i].begin(),E[i].end());
E[i].erase(unique(E[i].begin(),E[i].end()),E[i].end());
}
while(scanf("%d",&n)!=EOF){
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
num[a[i]]++;
}
long long ans = 0;
for(int i=1;i<=100000;i++){
if(num[i]>=3){
ans = ans + 1ll*(num[i]-2)*(num[i]-1)*num[i]/6LL;
}
for(int j=0;j<E[i].size();j++){
if(i==E[i][j])continue;
if(1ll*i*i%E[i][j]!=0)continue;
if(1ll*i*i/E[i][j]<=100000){
int p = 1ll*i*i/E[i][j];
ans = ans + 1ll * num[i]*num[E[i][j]]*num[p];
}
}
}
cout<<ans<<endl;
}
}
喵哈哈村的星星与月亮(五)
这道题是离线树状数组。
询问,如果只有A数组的话,实际上就是权值线段树或者主席树的裸题了。
那么我们其实只要将询问按照A数组从小到大排序,然后依次删除对于>A不合法的,然后用个权值树状数组去查询,就可以了。
细节比较多,所以还是看代码吧。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int n,q,d[maxn],ans[maxn],All=0;
struct node{
int first,second;
}a[maxn];
bool cmp(node A,node B){
return A.first<B.first;
}
struct Node{
int first,secondfirst,secondsecond;
}query[maxn];
bool cmp2(Node A,Node B){
return A.first<B.first;
}
inline bool scan_d(int &num)
{
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int lowbit(int x){
return x&(-x);
}
void update(int x,int v){
for(int i=x;i<maxn;i+=lowbit(i)){
d[i]+=v;
}
}
int getsum(int x){
int ans = 0;
for(int i=x;i;i-=lowbit(i))
ans+=d[i];
return ans;
}
int main(){;
while(scanf("%d%d",&n,&q)!=EOF){
memset(d,0,sizeof(d));
memset(ans,0,sizeof(ans));
All=0;
for(int i=1;i<=n;i++)
scan_d(a[i].first);
for(int i=1;i<=n;i++){
scan_d(a[i].second);
All++;
update(a[i].second,1);
}
for(int i=1;i<=q;i++){
scan_d(query[i].first);
scan_d(query[i].secondfirst);
query[i].secondsecond=i;
}
sort(a+1,a+1+n,cmp);
sort(query+1,query+1+q,cmp2);
int tot = 1;
for(int i=1;i<=q;i++){
while(tot<=n&&a[tot].first<query[i].first){
update(a[tot].second,-1);
All--;
tot++;
}
ans[query[i].secondsecond]=All-getsum(query[i].secondfirst-1);
}
for(int i=1;i<=q;i++){
printf("%d\n",ans[i]);
}
}
return 0;
}
喵哈哈村的魔法考试 Round #11 (Div.2) 题解的更多相关文章
- 喵哈哈村的魔法考试 Round #2 (Div.2) 题解
喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解
喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...
- 喵哈哈村的魔法考试 Round #7 (Div.2) 题解
喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05 最后更新: 2017年2月21日 20:06 时间限制: 1000ms 内存限制: 128M 描述 传说喵哈哈村有三种神 ...
- 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...
- 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...
- 喵哈哈村的魔法考试 Round #8 (Div.2) 题解
喵哈哈村的美食面馆 签到题,就不停的if就好了. #include<bits/stdc++.h> using namespace std; string name[5]={"ni ...
- 喵哈哈村的魔法考试 Round #4 (Div.2) 题解
有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...
- 喵哈哈村的魔法考试 Round #20 (Div.2) 题解
题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...
随机推荐
- 重装系统windows
1 boot没有usb启动选项,驱动没加载好,先进入xp系统正确安装usb驱动,重启 2 file not fount bootmgr 用pe自带修复程序修复,修复驱动盘符为最小那个,非c盘 3 wi ...
- 一步步实现windows版ijkplayer系列文章之七——终结篇(附源码)
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- openwrt git 代码下载地址
openwrt 各个版本代码下载 trunk:git clone git://github.com/openwrt/openwrt.git 15.05 (Chaos Calmer)git clone ...
- 输入一个数,求1到他 的和(for循环)
- noip 2017 时间复杂度
自认为是少有的复杂的代码 这题思想很简单,就是大模拟 对于for循环,一行读入4个字符串,然后分类讨论: ①:如果是一个正常的O(n),那么累计n的指数加1 ②:如果是一个常数级别的,那么继续循环,但 ...
- 性能测试二十一:环境部署之mysql
在正常工作中,mysql应该部署到 一台独立的服务器上,不与tomcat共用服务器,由于成本原因,现部署到一起 为避免出错引起麻烦,先备份: 一:环境清理:先卸载系统自带的mysql 停止mysql: ...
- BZOJ2287【POJ Challenge】消失之物
题解: 1.以前见过类似的,可以cdq分治 当l=r时就是还有一个剩余 这样时间是nmlogn的 空间是mlogn 2.首先我们可以dp出表示出j的方案数 令g[i][j]表示不能选i,表示出j的方案 ...
- 使用.NET Core+Docker 开发微服务
.NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜, ...
- BZOJ1819 [JSOI]Word Query电子字典 Trie
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1819 题意概括 字符串a与字符串b的编辑距离是指:允许对a或b串进行下列“编辑”操作,将a变为b或 ...
- 【Java】 剑指offer(52) 两个链表的第一个公共结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...