Codeforces Beta Round #107(Div2)
B.Phone Numbers
思路:就是简单的结构体排序,只是这里有一个技巧,就是结构体存储的时候,直接存各种类型的电话的数量是多少就行,在读入电话的时候,既然号码是一定的,那么就直接按照格式%c读取就好,在比较的时候也容易比较,直接比较ASCII码就行
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
struct people{
int num;
char s[100];
int t=0,p=0,c=0;
}a[1500];
bool cmpt(people a,people b){
if(a.t==b.t){
return a.num<b.num;
}
return a.t>b.t;
}
bool cmpp(people a,people b){
if(a.p==b.p){
return a.num<b.num;
}
return a.p>b.p;
}
bool cmpc(people a,people b){
if(a.c==b.c){
return a.num<b.num;
}
return a.c>b.c;
}
int main(){
int t;
scanf("%d",&t);
for(int i=0;i<t;i++){
a[i].num=i;
int n;
scanf("%d %s",&n,&a[i].s);
int t=0;
int p=0;
int cc=0; for(int j=0;j<n;j++){
char b,c,d,e,f,g;
char s;
getchar();
scanf("%c%c",&b,&c);
scanf("%c",&s);
scanf("%c%c",&d,&e);
scanf("%c",&s);
scanf("%c%c",&f,&g);
if(b==c&&c==d&&d==e&&e==f&&f==g){
t++;
}else if(b>c&&c>d&&d>e&&e>f&&f>g){
p++;
}else{
cc++;
}
}
a[i].p=p;
a[i].t=t;
a[i].c=cc;
}
/*for(int i=0;i<t;i++){
printf("%d %d %d\n",a[i].t,a[i].p,a[i].c);
}*/
int tt=0;
int p=0;
int c=0;
int sump=0,sumt=0,sumc=0;
sort(a,a+t,cmpt);
tt=a[0].t;
for(int i=0;i<t;i++){
if(a[i].t==tt){
sumt++;
}
}
printf("If you want to call a taxi, you should call: ");
for(int i=0;i<sumt;i++){
printf("%s",a[i].s);
if(i<sumt-1){
printf(", ");
}
}
printf(".\n");
sort(a,a+t,cmpp);
p=a[0].p;
for(int i=0;i<t;i++){
if(a[i].p==p){
sump++;
}
}
printf("If you want to order a pizza, you should call: ");
for(int i=0;i<sump;i++){
printf("%s",a[i].s);
if(i<sump-1){
printf(", ");
}
}
printf(".\n");
sort(a,a+t,cmpc);
c=a[0].c;
for(int i=0;i<t;i++){
if(a[i].c==c){
sumc++;
}
}
printf("If you want to go to a cafe with a wonderful girl, you should call: ");
for(int i=0;i<sumc;i++){
printf("%s",a[i].s);
if(i<sumc-1){
printf(", ");
}
}
printf(".");
}
C.Win or Freeze
思路:其实最多两局,如果给定的这个数质因子大于2或者是质数,那么就是1赢,1直接选定两个质因子的乘积就能确保自己赢,剩下的情况就是2赢
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
vector <pair<__int64, __int64> > divide(__int64 x) {
vector <pair<__int64, __int64> > v;
for (int i = 2; i <= x / i; ++i)
if (x % i == 0) {
int s = 0;
while (x % i == 0) x /= i, s++;
v.emplace_back(i, s);
}
if (x > 1) v.emplace_back(x, 1);
return v;
} /*vector<__int64> get_divisors(__int64 x) {
vector<__int64> res;
for (__int64 i = 1; i <= x / i; ++i)
if (x % i == 0) {
res.push_back(i);
if (i != x / i) res.push_back(x / i);
}
sort(res.begin(), res.end());
return res;
}*/
inline bool isprime(long long n) {
if (n < 2) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (long long i = 3; i <= n / i; i += 2)
if (n % i == 0) return false;
return true;
} int main(){
__int64 num;
int flag=0;
scanf("%I64d",&num);
if(num==1){
printf("1\n");
printf("0\n");
return 0;
}else if(isprime(num)==true){
printf("1\n");
printf("0\n");
return 0;
}
vector<pair<__int64,__int64>> v;
v=divide(num);
__int64 len=v.size();
__int64 sum=0;
__int64 sump=1;
int f=0;
for(__int64 i=0;i<len;i++){
__int64 se=v.back().second;
__int64 fi=v.back().first;
v.pop_back();
sum+=se;
if(f<2){
if(se>=2&&f==0){
f++;
f++;
sump*=fi;
sump*=fi;
}else if(se<2){
sump*=fi;
f++;
}else{
sump*=fi;
f++;
}
}
}
if(sum<=2){
printf("2\n");
}else{
printf("1\n");
printf("%I64d\n",sump);
}
}
D - Quantity of Strings
思路:主要分为k>n,k=n,k<n的情况,见代码,wa掉这么多主要是前两种考虑出了问题
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
const long long int modd=1e9+7;
int main(){
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
__int64 sum=0;
if(k<n){
if(k%2==0){
sum+=m;
/* if(k!=2){
sum+=((m-1)*m)%modd;
}*/
}else{
if(k==1){
__int64 num=1;
for(int i=0;i<n;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}else{
__int64 num=1; sum+=((m-1)*m)%modd; sum+=m;
}
}
}else if(k==n){
if(k%2==0){
__int64 num=1;
for(int i=0;i<n/2;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}else{
__int64 num=1;
for(int i=0;i<(n/2)+1;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}
}else{
__int64 num=1;
for(int i=0;i<n;i++){
num=(num*m)%modd;
num%=modd;
}
sum+=num;
}
printf("%I64d\n",sum);
}
Codeforces Beta Round #107(Div2)的更多相关文章
- Codeforces Beta Round #73(Div2)
A - Chord 题意:就是环中有12个字符,给你三个字符,判断他们之间的间隔,如果第一个和第二个间隔是3并且第二个和第三个间隔是4,那么就输出minor,如果第一个和第二个间隔是4并且第二个和第三 ...
- Codeforces Beta Round #94 div2 D 优先队列
B. String time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #13 C. Sequence (DP)
题目大意 给一个数列,长度不超过 5000,每次可以将其中的一个数加 1 或者减 1,问,最少需要多少次操作,才能使得这个数列单调不降 数列中每个数为 -109-109 中的一个数 做法分析 先这样考 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
随机推荐
- 数数字(JAVA语言)
package 第三章习题; /* * 把前n(n<=10000)个整数顺次写在一起: * 89101112... * 数一数0-9各出现多少次 * (输出10个整数,分别是09出现的次 ...
- [系统重装日志2]win10系统安装pytorch0.4.1(gpu版本)
目录 0,资源整理 1,安装最新版的显卡驱动 2,安装visual studio 3,安装cuda 4,安装cudnn,配置环境变量 5,安装pytorch 6,安装torchvision 7,验证 ...
- 用DeBug的方式,带你掌握HBase文件在Snapshot的各种变化
摘要:掌握Snapshot可以帮助我们很好的完成HBase数据备份和数据迁移的工作. 简介 HBase的Snapshot功能可以在不复制数据的情况下,快速克隆一张表,完成一次数据备份.通过Snapsh ...
- Java中的面向切面编程(AOP)
一.什么是AOP? Aspect Oriented Programming ,即面向切面编程. AOP是对面向对象编程的一个补充. 它的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中 ...
- 一文读懂MySql主从复制机制
作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得 ...
- 为了效率,我们可以用的招数 之 strlen
如果要你写一个计算字符串长度的函数 strlen,应该怎么写?相信你很容易写出如下实现: 1 int strlen_1(const char* str) { 2 int cnt = 0; 3 4 if ...
- C++中的广义集合于for范围访问
在C++11中可以通过for在范围循环中访问广义集合 如: std::vetcor v={1,2,3}; int a[4] {1,2,3,4}; std::array<int,4>a2 { ...
- OO_Unit3总结
OO_Unit3总结 一.JML情况 理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言,为严格的程序设计提供了一套行之有效的方法.通过J ...
- 前端 JS 原生 javascript 和 location.hash 实现一个单页应用的路由 router
开篇日常立个flag-- 前言 最近在做一些应用,类似于单页应用,想实现类似于 Vue 路由的效果. 但是个人 Vue 基础四舍五入约等于无,而且看着 Vue-router 吃力+用不起来(因为我的项 ...
- Java(171-194)【接口、多态】
1.接口概述与生活举例 接口就是一种公共的规范标准 只要符合规范标准,就可以大家通用 2.接口的定义基本格式 public interface 接口名称 { // 抽象方法 / ...