博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 916 二进制1数目构造(阅读理解) 最小生成树1-N路径质数构造
阅读量:4356 次
发布时间:2019-06-07

本文共 3501 字,大约阅读时间需要 11 分钟。

A

#include 
#define PI acos(-1.0)#define mem(a,b) memset((a),b,sizeof(a))#define TS printf("!!!\n")#define pb push_back#define inf 1e9//std::ios::sync_with_stdio(false);using namespace std;//priority_queue
,greater
> que; get minconst double eps = 1.0e-10;const double EPS = 1.0e-4;typedef pair
pairint;typedef long long ll;typedef unsigned long long ull;const int turn[4][2] = {
{
1, 0}, { -1, 0}, {
0, 1}, {
0, -1}};//priority_queue
, less
> que;//next_permutationll mod = 3e7;const int MAXN=505;bool check(int x,int y){ if(x%10==7) return true; if(y%10==7) return true; return false;}int main(){ int n; int h,m; cin >> n >> h >> m; int cur=0; for(cur=0;!check(h,m);cur++) { m-=n; if(m<0) m+=60,h--; if(h<0) h+=24; } cout<
<
View Code

B

给你一个N 要求你分解成二进制的K个数并且要求你求出字典序尽量小情况下最大的答案

当原来1的数量>=k时 答案很明显 

当1的数量<k时 因为要最小字典序 所以前面的要尽量小 要把最前面的1尽量全部变成后面的

当最前面的1的数量大于剩下的k时就不能继续转化了转化了字典序就不是尽量小情况下的最大答案了

应该转化最后的一个1直到满足答案 这样字典序才是最大的

#include 
#define PI acos(-1.0)#define mem(a,b) memset((a),b,sizeof(a))#define TS printf("!!!\n")#define pb push_back#define inf 1e9//std::ios::sync_with_stdio(false);using namespace std;//priority_queue
,greater
> que; get minconst double eps = 1.0e-10;const double EPS = 1.0e-4;typedef pair
pairint;typedef long long ll;typedef unsigned long long ull;const int turn[4][2] = {
{
1, 0}, { -1, 0}, {
0, 1}, {
0, -1}};//priority_queue
, less
> que;//next_permutationpriority_queue
, less
> que;ll mod = 3e7;const int MAXN = 505;int er[100200],*aim = er+100002;int main(){ ll n; int k; cin >> n >> k; for(int i=0;i<=60;i++) { k-=aim[i]=(n>>i)&1; } if(k<0) { cout<<"No"<
=-100;i--) { if(aim[i]) cout<
<<" "; } cout<
=-100;i--) { if(k>=aim[i]) { aim[i-1]+=2*aim[i]; k-=aim[i]; aim[i]=0; } else { int cur=-100000; while(!aim[cur]) cur++; for(int j=1;j<=k;j++) { aim[cur-1]+=2; aim[cur--]--; } break; } } cout<<"Yes"<
=-100000;i--) while(aim[i]) cout<
<<" ",aim[i]--;}
View Code

C

给你N个点和M条边 要去你输出M条边 使得1到N的最短路长度是质数 最短生成树的值是质数

可以找个很大的质数 使得除了N-1与N的值为质数-(N-1)而其他i与i+1相连的值是1 剩下要构造的其他边直接取很大的值就可以了

#include 
#define PI acos(-1.0)#define mem(a,b) memset((a),b,sizeof(a))#define TS printf("!!!\n")#define pb push_back#define inf 1e9//std::ios::sync_with_stdio(false);using namespace std;//priority_queue
,greater
> que; get minconst double eps = 1.0e-10;const double EPS = 1.0e-4;typedef pair
pairint;typedef long long ll;typedef unsigned long long ull;const int turn[4][2] = {
{
1, 0}, { -1, 0}, {
0, 1}, {
0, -1}};//priority_queue
, less
> que;//next_permutationpriority_queue
, less
> que;ll mod = 3e7;const int MAXN = 505;int pop = 1;int prime;bool ok(int x){ for (int i = 2; i <= (int)sqrt(x); i++) { if (x % i == 0) { return false; } } return true;}int main(){ int want = 1e9; int n, m; for (int i = 100000; i <= 1000000; i++) { if (ok(i)) { prime = i; break; } } cin >> n >> m; cout << prime << " " << prime << endl; m -= n - 1; for (int i = 1; i <= n - 2; i++) { cout << i << " " << i + 1 << " " << 1 << endl; } prime -= n - 2; cout << n - 1 << " " << n << " " << prime << endl; for (int i = 2; i <= n - 1 && m; i++) { for (int j = 1; j <= n - i && m; j++, m--) { cout << j << " " << j + i << " " << want << endl; } }}
View Code

 

转载于:https://www.cnblogs.com/Aragaki/p/8711315.html

你可能感兴趣的文章
Android 下拉选择绑定Value和Text值
查看>>
HTML+CSS小结
查看>>
Android防止按钮连续点击
查看>>
ElasticSearch Mapping中的字段类型
查看>>
数据库中主键和外键的设计原则
查看>>
怎样理解阻塞非阻塞与同步异步的区别?
查看>>
Xcode 警告信息处理:Format string is not a string literal (potentially insecure)
查看>>
关于jQuery表单校验的应用
查看>>
matplotlib----初探------5直方图
查看>>
jquery之ajax
查看>>
Pro Git(中文版)
查看>>
解决phpmyadmin-1800秒超时链接失效问题
查看>>
OpenGL第十一节:拉伸和过滤
查看>>
AlertDialog的onCreateDialog与onPrepareDialog用法
查看>>
swift菜鸟入门视频教程-12-21讲
查看>>
PL/SQL 异常处理程序
查看>>
javascript小白学习指南1---0
查看>>
div:给div加滚动栏 div的滚动栏设置
查看>>
java随机函数使用方法Random
查看>>
链表中环的入口结点
查看>>