Educational Codeforces Round 14
水
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// } int a[];
int main(){
int n;
cin>>n;
int k=;
for(int i=;i<n;i++){
cin>>a[i];
if(!a[i]) k++;
}
if(n==&&a[]==){
puts("NO");
exit();
}
if(n==&&a[]==){
puts("YES");
exit();
}
if(k==) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return ;
}
题意:判断是否是 ‘镜像‘
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
std::pair<char, char> mapP[] ={{'A', 'A'}, {'b', 'd'}, {'d', 'b'}, {'H', 'H'}, {'I', 'I'}, {'M', 'M'}, {'O', 'O'}, {'o', 'o'}, {'p', 'q'},
{'q', 'p'},{'T', 'T'}, {'U', 'U'}, {'V', 'V'}, {'v', 'v'},{'W', 'W'}, {'w', 'w'}, {'X', 'X'}, {'x', 'x'}, {'Y', 'Y'}
}; bool check(char a, char b){
for(std::pair<char, char> p : mapP){
if(p.first == a && p.second == b){
return true;
}
}
return false;
} int main(){
string s;
cin>>s;
int i,j;
bool flag=false;
for(i=,j=(int)s.length()-;i<=j;i++,j--){
if(!check(s[i],s[j])){
flag=;
puts("NIE");
break;
}
}
if(!flag)
puts("TAK");
return ;
}
题意:把一个值转换成 表达式a*10^b形式
字符处理
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// } int main(){
string s;
string str="";
int ansb;
cin>>s;
int p=;
while(p<(int)s.size()&&(s[p]==''||s[p]=='.')){
p++;
}
// cout<<p<<bndl;
str.push_back(s[p]);
str.push_back('.');
int pos=s.find('.');
if(pos==-) pos=s.size();
for(int i=++p;i<s.size();i++){
if(s[i]!='.') str.push_back(s[i]);
}
if(pos==p) ansb=;
else{
if(pos>p) ansb=pos-p;
else ansb=pos-p+;
}
while(str.back()==''||str.back()=='.') str.pop_back();
if(ansb) str+="E"+to_string(ansb);
printf("%s\n",str.c_str());
return ;
}
题意:n个数(1,2。。。n) m种操作:交换下标为x y的数, 每种操作可选任意次,输出最大字典序。
思路:并查集。最后把每个位置上同一个块的从大到小输出
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
int a[N];
int pre[N];
vector<int>ans[N];
vector<int>root;
int vis[N];
int pos[N];
int find(int x){
if(x==pre[x]) return x;
return pre[x]=find(pre[x]);
}
int main(){
std::ios::sync_with_stdio(false);
int n,m;
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>a[i];
pre[i]=i;
}
while(m--){
int x,y;
cin>>x>>y;
x=find(x),y=find(y);
if(x!=y) pre[x]=y;
}
for(int i=;i<=n;i++){
int x=find(i);
ans[x].push_back(a[i]);
if(!vis[x]){
root.push_back(x);
vis[x]=true;
}
}
for(int i=;i<(int)root.size();i++){ //从大到小排序
sort(ans[root[i]].rbegin(),ans[root[i]].rend());
}
for(int i=;i<n;i++){
cout<<ans[find(i)][pos[find(i)]++]<<" ";
}
cout<<ans[find(n)][pos[find(n)]]<<endl;
return ;
}
题意:n个数,选k个出来,形成一个新的序列,该序列相邻两个数异或后数的二进制中1的个数是3的倍数。问有几个序列
思路:每个数转化成一个点,两个数满足 异或后数的二进制1的个数是3倍数的则两点之间建一条边。转化成求边的条数。
矩阵快速幂
M(i,j):(ai^aj)%3==0 则最后答案是M^(k-1)的元素和
借鉴了Q神的模板
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// } struct Matrix{
LL a[][];
Matrix(){
clc(a,);
}
void init(){
for(int i=;i<;i++) a[i][i]=;
}
Matrix operator * (const Matrix &B)const{
Matrix C;
for(int i=;i<;i++){
for(int k=;k<;k++){
for(int j=;j<;j++){
(C.a[i][j]+=a[i][k]*B.a[k][j])%=MOD;
}
}
}
return C;
}
Matrix operator ^ (const LL &t) const{
Matrix A= (*this),res;
res.init();
LL p=t;
while(p){
if(p&) res=res*A;
A=A*A;
p>>=;
}
return res;
}
};
LL a[];
int main(){
LL n,k;
scanf("%I64d%I64d",&n,&k);
for(int i=;i<n;i++){
scanf("%I64d",&a[i]);
}
Matrix A;
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(__builtin_popcountll(a[i]^a[j])%==)
A.a[i][j]=;
}
}
LL ans=;
A=A^(k-);
for(int i=;i<n;i++){
for(int j=;j<n;j++){
(ans+=A.a[i][j])%=MOD;
}
}
printf("%I64d\n",ans);
return ;
}
题意:n个数,任选两个相乘,q次询问,每次输出不小于x的乘积对数
思路:总的方案数-小于x
预处理每种面积的方案数
// #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = *1e6+;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-); void fre() {
freopen("in.txt","r",stdin);
} // inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// } int cnt[N];
int maxn=*1e6;
LL a[N];
LL sum[N];
void init(){
for(int i=;i<=maxn;i++){
for(int j=;j*i<=maxn;j++){
if(i==j) a[i*j]+=(LL)cnt[i]*(cnt[i]-);
else a[i*j]+=(LL)cnt[i]*cnt[j];
}
}
for(int i=;i<=maxn;i++){
sum[i]=sum[i-]+a[i];
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<n;i++){
int x;
scanf("%d",&x);
if(x<=maxn)
cnt[x]++;
}
init();
int q;
scanf("%d",&q);
while(q--){
int x;
scanf("%d",&x);
LL ans=(LL)n*(n-)-sum[x-];
printf("%I64d\n",ans);
}
return ;
}
Educational Codeforces Round 14的更多相关文章
- Educational Codeforces Round 14 D. Swaps in Permutation (并查集orDFS)
题目链接:http://codeforces.com/problemset/problem/691/D 给你n个数,各不相同,范围是1到n.然后是m行数a和b,表示下标为a的数和下标为b的数可以交换无 ...
- Educational Codeforces Round 14 D. Swaps in Permutation(并查集)
题目链接:http://codeforces.com/contest/691/problem/D 题意: 题目给出一段序列,和m条关系,你可以无限次互相交换这m条关系 ,问这条序列字典序最大可以为多少 ...
- Educational Codeforces Round 14 D. Swaps in Permutation 并查集
D. Swaps in Permutation 题目连接: http://www.codeforces.com/contest/691/problem/D Description You are gi ...
- Educational Codeforces Round 14 C. Exponential notation 数字转科学计数法
C. Exponential notation 题目连接: http://www.codeforces.com/contest/691/problem/C Description You are gi ...
- Educational Codeforces Round 14 B. s-palindrome 水题
B. s-palindrome 题目连接: http://www.codeforces.com/contest/691/problem/B Description Let's call a strin ...
- Educational Codeforces Round 14 A. Fashion in Berland 水题
A. Fashion in Berland 题目连接: http://www.codeforces.com/contest/691/problem/A Description According to ...
- Educational Codeforces Round 14 - F (codeforces 691F)
题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围: ...
- Educational Codeforces Round 14 E.Xor-sequences
题目链接 分析:K很大,以我现有的极弱的知识储备,大概应该是快速幂了...怎么考虑这个快速幂呢,用到了dp的思想.定义表示从到的合法路径数.那么递推式就是.每次进行这样一次计算,那么序列的长度就会增加 ...
- Educational Codeforces Round 14 D. Swaps in Permutation
题目链接 分析:一些边把各个节点连接成了一颗颗树.因为每棵树上的边可以走任意次,所以不难想出要字典序最大,就是每棵树中数字大的放在树中节点编号比较小的位置. 我用了极为暴力的方法,先dfs每棵树,再用 ...
随机推荐
- JAVA! static什么作用?
是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只 ...
- 发送消息执行记事本的“另存为”菜单功能(通过WM_COMMAND控制使用别的程序的菜单命令)
发送消息执行记事本的“另存为”菜单功能procedure TForm1.FormCreate(Sender: TObject);var hNotepad: Cardinal;begin hNotepa ...
- java:定义线程
Thread是java.lang包的类,默认导入. 进程:操作系统中的程序,多进程即同时运行多个程序.线程:程序中的流,多线程即程序中有多个流同时执行. 一个线程用一个线程对象表示 创建线程的方法: ...
- Servlet的response输出到页面时乱码的解决方法
package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...
- PHP工程师面临成长瓶颈
作为开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢?PHP工程师面临成长瓶颈 ...
- openfire 介绍安装使用
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户.您可以使用 ...
- QTP10&QTP11&UFT11.5的安装和破解
QTP10的安装和破解方法 下载QTP10.0并安装. 安装成功后,在C:\Program Files\Common Files\Mercury Interactive下创建文件夹:License M ...
- SPOJ 1435 Vertex Cover 树形DP
i 表示节点 i ,j=0表示不选择其父节点,j=1表示选择其父节点.f 为其父节点. 取 每个节点选择/不选择 两者中较小的那个. 一组数据: 151 21 31 41 1010 910 1112 ...
- c语言 快排排序
快速排序(Quick Sort): 这个算法的霸气程度从它的名字就可以看出来了.快速排序的应用也是非常广的的,各种类库都可以看到他的身影.这当然与它的“快”是有联系的,正所谓天下武功唯快不破. 快速排 ...
- hadoop2 环境的搭建(自动HA)
zookeeper:hadoop112.hadoop113.hadoop114 namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113.ha ...