CF 61 div2 D. Petya and His Friends

2023-12-07 05:34
文章标签 cf div2 friends 61 petya

本文主要是介绍CF 61 div2 D. Petya and His Friends,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:D - Petya and His Friends

思路:高精度模板可以过,但是找规律也行


高精度的:


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <sstream>
#include <map>
using namespace std;
#define maxn 240
bool vis[maxn];
map<string,int>m;
stringstream ss;
string sss;
void Prime()
{m.clear();memset(vis,true,sizeof(vis));vis[0]=vis[1]=false;for(int i=2;i<maxn;i++){if(vis[i]){ss.clear();ss<<i;ss>>sss;m[sss]++;for(int j=2*i;j<maxn;j+=i)vis[j]=0;}}
}
struct BigInt
{string a;int sign;BigInt() {} // default constructorBigInt(string b){ // constructor for string(*this)=b;}int size(){return a.size();}BigInt inverseSign(){sign*=-1;return (*this);}BigInt normalize(int newSign){ // remove leading zero and fix signfor(int i=a.size()-1;i>0&&a[i]=='0';i--)a.erase(a.begin()+i);sign=(a.size()==1 &&a[0]=='0'  )?1:newSign;return (*this);}void operator = (string b){a=b[0]=='-'?b.substr(1):b;reverse(a.begin(),a.end());this->normalize(b[0]=='-'?-1:1);}bool operator < (const BigInt &b) const{if(sign!=b.sign)    return sign<b.sign;if(a.size()!=b.a.size())return sign==1?a.size()<b.a.size():a.size()>b.a.size();for(int i=a.size()-1;i>=0;i--)if(a[i]!=b.a[i])return sign==1?a[i]<b.a[i]:a[i]>b.a[i];return false;}bool operator == (const BigInt &b) const{return a==b.a && sign==b.sign ;}BigInt operator + (BigInt b){if(sign!=b.sign)return (*this)- b.inverseSign();BigInt c;for(int i=0,carry=0;i<a.size()||i<b.size()||carry;i++){carry+=(i<a.size()?a[i]-48:0)+(i<b.size()?b.a[i]-48:0);c.a+=(carry%10+48);carry/=10;}return c.normalize(sign);}BigInt operator - (BigInt b){if(sign!=b.sign)return (*this) + b.inverseSign();int s=sign;sign=b.sign=1;if((*this)<b)return ((b-(*this)).inverseSign()).normalize(-s);BigInt c;for(int i=0,borrow=0;i<a.size();i++){borrow=a[i]-borrow-(i<b.size()?b.a[i]:48);c.a+=borrow>=0?borrow+48:borrow+58;borrow=borrow>=0?0:1;}return c.normalize(s);}BigInt operator * (BigInt b){BigInt c("0");for(int i=0,k=a[i]-48;i<a.size();i++,k=a[i]-48){while(k--) c=c+b;b.a.insert(b.a.begin(),'0');}return c.normalize(sign*b.sign);}BigInt operator / (BigInt b){if(b.size()==1 && b.a[0]=='0')b.a[0]/=(b.a[0]-48);BigInt c("0"),d;for(int j=0;j<a.size();j++)d.a+="0";int dsign=sign*b.sign;b.sign=1;for(int i=a.size()-1;i>=0;i--){c.a.insert(c.a.begin(),'0');c=c+a.substr(i,1);while(!(c<b))c=c-b,d.a[i]++;}return d.normalize(dsign);}BigInt operator % (BigInt b){if(b.size()==1 && b.a[0]=='0')b.a[0]/=(b.a[0]-48);BigInt c("0");b.sign=1;for(int i=a.size()-1;i>=0;i--){c.a.insert(c.a.begin(),'0');c=c+a.substr(i,1);while(!(c<b))c=c-b;}return c.normalize(sign);}void Print(){if(sign==-1) putchar('-');for(int i=a.size()-1;i>=0;i--)putchar(a[i]);cout<<endl;}
};
int main()
{Prime();int n;cin>>n;if(n==1||n==2){cout<<-1<<endl;return 0;}sss="1";BigInt cnt,ans=sss;map<string,int>::iterator it=m.begin();for(int i=1;i<=n;i++){cnt=it->first;ans=ans*cnt;it++;}it=m.begin();for(int i=1;i<=n;i++){cnt=it->first;cnt=ans/cnt;it++;cnt.Print();}return 0;
}


找规律的话,假设a,b,c是素数,第一个数是a*b,第二个数是b*c,后面的数是 a*c*i  (1<=i<=n-2)


#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#define MAXN 100000
using namespace std;
int main()
{int n;cin>>n;if(n<=2)cout<<-1<<endl;else{cout<<35<<endl;cout<<77<<endl;for(int i=1;i<=n-2;i++)cout<<55*i<<endl;}return 0;
}








这篇关于CF 61 div2 D. Petya and His Friends的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464667

相关文章

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

【CF】E. Anya and Cubes(双向DFS)

根据题意的话每次递归分3种情况 一共最多25个数,时间复杂度为3^25,太大了 我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果 之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以 时间复杂度降低为 3 ^ (n/2+1) 题目链接:http://codeforces.com/contest/525/problem/E #include<set

【CF】D. Arthur and Walls(BFS + 贪心)

D题 解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为. 一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断 题目链接:http://codeforces.com/contest/525/problem/D #include<cstdio>#include<

CF#271 (Div. 2) D.(dp)

D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/474/problem/D We s

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi