Codeforces_803
A. 填k个1,使矩阵主对角线对称,相同情况选择上面1数量多的。
#include<bits/stdc++.h>
using namespace std; int n,k,a[][] = {}; int main()
{
ios::sync_with_stdio(false);
cin >> n >> k;
if(k > n*n)
{
cout << - << endl;
return ;
}
for(int i = ;i <= n;i++)
{
for(int j = ;j <= n;j++)
{
if(a[i][j]) continue;
if(k >= && i == j)
{
k--;
a[i][j] = ;
}
else if(k >= )
{
k -= ;
a[i][j] = ;
a[j][i] = ;
}
}
}
if(k != )
{
cout << - << endl;
return ;
}
for(int i = ;i <= n;i++)
{
for(int j = ;j <= n;j++) cout << a[i][j] << " ";
cout << endl;
}
return ;
}
B.两个方向各跑一次,更新最邻近的0位置就可以了。
#include<bits/stdc++.h>
using namespace std; int n,a[],l[],r[]; int main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
int last = -1e9;
for(int i = ;i <= n;i++)
{
if(a[i] == ) last = i;
l[i] = i-last;
}
last = 1e9;
for(int i = n;i >= ;i--)
{
if(a[i] == ) last = i;
r[i] = last-i;
}
for(int i = ;i <= n;i++) cout << min(l[i],r[i]) << " ";
cout << endl;
return ;
}
C.因为和为n,所以可以是某个最小的初始小序列的某倍数为n,达到gcd最大,枚举n的每一个因子即可。
#include<bits/stdc++.h>
using namespace std; long long n,k; int main()
{
ios::sync_with_stdio(fals#include<bits/stdc++.h>
using namespace std; long long n,k; int main()
{
ios::sync_with_stdio(false);
cin >> n >> k;
if(log(n*) < log(k)+log(k+)-1e-)
{
cout << - << endl;
return ;
}
long long t = k*(k+)/,maxx = ;
for(long long i = ;i*i <= n;i++)
{
if(n%i) continue;
{
if(i*t <= n) maxx = max(maxx,i);
if(t <= i) maxx = max(maxx,n/i);
}
}
for(long long i = ;i < k;i++) cout << i*maxx << " ";
cout << n-maxx*k*(k-)/ << endl;
return ;
}
e);
cin >> n >> k;
if(log(n*) > log(k)+log(k+)-1e-)
{
cout << - << endl;
return ;
}
long long t = k*(k+)/,maxx = ;
for(long long i = ;i*i <= n;i++)
{
if(n%i) continue;
{
if(i*t <= n) maxx = max(maxx,i);
if(n/i*t <= n) maxx = max(maxx,n/i);
}
}
for(int i = ;i <= n;i++) cout << i*maxx << " ";
cout << n-maxx*k*(k-)/ << endl;
return ;
}
D.直接划分成每个最小单词的字符个数,然后二分答案。
#include<bits/stdc++.h>
using namespace std; int n,cnt = ,a[] = {};
string s; bool ok(int x)
{
int cntt = ,now = ;
for(int i = ;i <= cnt;i++)
{
if(a[i] > x) return ;
now += a[i];
if(now > x)
{
cntt++;
now = a[i];
}
}
if(now > ) cntt++;
if(cntt <= n) return ;
return ;
}
int main()
{
cin >> n;
getchar();
getline(cin,s);
for(int i = ;i < s.length();i++)
{
a[cnt]++;
if(s[i] == ' ' || s[i] == '-') cnt++;
}
int l = ,r = 1e6;
while(l < r)
{
int mid = (l+r)/;
if(ok(mid)) r = mid;
else l = mid+;
}
cout << l << endl;
return ;
}
E.dp[i][j]表示到i轮状态为j的可能,j可以用赢的量表示,因为会有负值,可以设置一个偏移量,因为要记录路径,直接把dp[i][j]用来记录上一状态,然后逆向输出路径就可以了。
#include<bits/stdc++.h>
using namespace std; int n,k,a[][];
string s;
int main()
{
ios::sync_with_stdio(false);
cin >> n >> k >> s;
memset(a,-,sizeof(a));
a[][n] = ;
for(int i = ;i < n;i++)
{
for(int j = n-k+;j <= n+k-;j++)
{
if(a[i][j] == -) continue;
if(s[i] == '?' || s[i] == 'W') a[i+][j+] = j;
if(s[i] == '?' || s[i] == 'L') a[i+][j-] = j;
if(s[i] == '?' || s[i] == 'D') a[i+][j] = j;
}
}
if(a[n][n-k] == - && a[n][n+k] == -)
{
cout << "NO" << endl;
return ;
}
int now = n-k;
if(a[n][n-k] == -) now = n+k;
for(int i = n;i >= ;i--)
{
if(a[i][now] == now-) s[i-] = 'W';
else if(a[i][now] == now+) s[i-] = 'L';
else s[i-] = 'D';
now = a[i][now];
}
cout << s << endl;
return ;
}
F.gcd为1的序列数较难求得,我们可以求gcd不为1的序列数,预处理统计每个数的约数,求得所有约数的个数,其中,k个数中的选择情况有2^k-1种,容斥原理求得答案。
#include<bits/stdc++.h>
#define MOD 1000000007
using namespace std; int n,cnt[] = {},ans[],two[]; int main()
{
ios::sync_with_stdio(false);
cin >> n;
while(n--)
{
int x;
cin >> x;
for(int i = ;i*i <= x;i++)
{
if(x%i == )
{
cnt[i]++;
if(i*i != x) cnt[x/i]++;
}
}
}
two[] = ;
for(int i = ;i <= ;i++) two[i] = two[i-]*%MOD;
for(int i = ;i <= ;i++) ans[i] = two[cnt[i]]-;
for(int i = ;i >= ;i--)
{
for(int j = i*;j <= ;j += i) ans[i] = (ans[i]-ans[j]+MOD)%MOD;
}
cout << ans[] << endl;
return ;
}
Codeforces_803的更多相关文章
随机推荐
- 用Eclipse和Tomcat搭建一个本地服务器
服务器软件环境 Eclipse oxygen Tomcat 9.0 SQL Sever 2014 参考资料 https://blog.csdn.net/qq_21154101/article/deta ...
- Bandicam(班迪录屏)高清视频录制工具
Bandicam(班迪录屏)简单好用的录屏幕,录游戏,录视频的功能强大的屏幕录像软件,比起其他软件其性能更加卓越. 与其他软件相比,用Bandicam录制的视频大小更小, 不仅保证原文件的质量.
- matlab写入excel数据
使用xlswrite 可以help xlswrite查看用法 xlswrite(filename,A)xlswrite(filename,A,sheet)xlswrite(filename,A,xlR ...
- Spring AOP 基于AspectJ
简介 AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式支持.因为Spring1.0的时候Aspectj还未出现; AspectJ1.5中新增了对 ...
- 原生javascript实现选项卡(基础版)
一.实现原理 1.主要运用“排他思想”,在设置当前元素前,先把相应元素恢复到默认状态 2.给相应元素添加下标的应用 二.代码展示 <!DOCTYPE html> <html> ...
- Scala实践12
1.内部类和抽象类型成员作为对象成员 内部类 在Scala中,可以让类将其他类作为成员.这些内部类是封闭类的成员.在Scala中,这样的内部类绑定到外部对象.假设希望编译器在编译时阻止我们混合哪些节点 ...
- Java List集合的介绍与常用方法
List接口的介绍 List接口简介: java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合. 在List集合 ...
- “土法炮制”之 OOM框架
一.什么是OOM框架? OOM 的全拼是 Object-Object-Map,意思是对象与对象之间的映射,OOM框架要解决的问题就是对象与对象之间数据的自动映射. 举一个具体的例子:用过MVC模式开发 ...
- 阿里开源服务发现组件 Nacos快速入门
最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念. 云原生是一种专门针对云 ...
- ElasticSearch安装中文分词器IKAnalyzer
# ElasticSearch安装中文分词器IKAnalyzer 本篇主要讲解如何在ElasticSearch中安装中文分词器IKAnalyzer,拆分的每个词都是我们熟知的词语,从而建立词汇与文档 ...