A - Fashion in Berland

 // #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 ;
}

B - s-palindrome

题意:判断是否是 ‘镜像‘

 // #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 ;
}

C - Exponential notation

题意:把一个值转换成 表达式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 ;
}

D - Swaps in Permutation

题意: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 ;
}

E - Xor-sequences

题意: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 ;
}

F - Couple Cover

题意: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的更多相关文章

  1. Educational Codeforces Round 14 D. Swaps in Permutation (并查集orDFS)

    题目链接:http://codeforces.com/problemset/problem/691/D 给你n个数,各不相同,范围是1到n.然后是m行数a和b,表示下标为a的数和下标为b的数可以交换无 ...

  2. Educational Codeforces Round 14 D. Swaps in Permutation(并查集)

    题目链接:http://codeforces.com/contest/691/problem/D 题意: 题目给出一段序列,和m条关系,你可以无限次互相交换这m条关系 ,问这条序列字典序最大可以为多少 ...

  3. Educational Codeforces Round 14 D. Swaps in Permutation 并查集

    D. Swaps in Permutation 题目连接: http://www.codeforces.com/contest/691/problem/D Description You are gi ...

  4. Educational Codeforces Round 14 C. Exponential notation 数字转科学计数法

    C. Exponential notation 题目连接: http://www.codeforces.com/contest/691/problem/C Description You are gi ...

  5. Educational Codeforces Round 14 B. s-palindrome 水题

    B. s-palindrome 题目连接: http://www.codeforces.com/contest/691/problem/B Description Let's call a strin ...

  6. Educational Codeforces Round 14 A. Fashion in Berland 水题

    A. Fashion in Berland 题目连接: http://www.codeforces.com/contest/691/problem/A Description According to ...

  7. Educational Codeforces Round 14 - F (codeforces 691F)

    题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围: ...

  8. Educational Codeforces Round 14 E.Xor-sequences

    题目链接 分析:K很大,以我现有的极弱的知识储备,大概应该是快速幂了...怎么考虑这个快速幂呢,用到了dp的思想.定义表示从到的合法路径数.那么递推式就是.每次进行这样一次计算,那么序列的长度就会增加 ...

  9. Educational Codeforces Round 14 D. Swaps in Permutation

    题目链接 分析:一些边把各个节点连接成了一颗颗树.因为每棵树上的边可以走任意次,所以不难想出要字典序最大,就是每棵树中数字大的放在树中节点编号比较小的位置. 我用了极为暴力的方法,先dfs每棵树,再用 ...

随机推荐

  1. 78. Subsets

    题目: Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset mus ...

  2. Android Service实时向Activity传递数据

    演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下:1.新建一个android项目工程,取名为demo ...

  3. 告别无止境的增删改查:Java代码生成器

    对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里.那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢?   有感于马上要做个比较 ...

  4. 谷歌上不了?hoststool一键搞定host 支持在线更新

    https://hosts.huhamhire.com/ http://serve.netsh.org/pub/ipv4-hosts/

  5. 基于SimHash的微博去重

    一.需求:对微博数据进行去重,数据量比较小,几十万条左右. 二.解决方案 1.采用SimHash的指纹信息去重方法. 三.实现方案 1.对每一条微博使用tf-idf与特征词 2.使用每条微博的特征词, ...

  6. 简单的SocketExample

    客户端//---------------VerySimpleClient.java package SocketExample; // Tue Nov 2 18:34:53 EST 2004 // / ...

  7. asp.net TreeView与XML配合使用v1.1

    刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个 我是这样做的,如果有什么问题请大神指导,我是菜鸟额.. 1: ...

  8. POJ 3252 Round Numbers(组合)

    题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...

  9. Android Studio:libpng warning: iCCP: Not recognizing known sRGB profile that has been edited解决办法

    把以前的eclipse的项目导入Android Studio中,Build项目的时候,出现了一堆错误. 如下: AAPT err(Facade for 1944774242): ERROR: 9-pa ...

  10. C结构体之位域(位段)

    C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C ...