关于最近做的一些题的归档吧
第一套题
1 CFGym 101853G Hard Equation
BSGS 算法的模板题 (题目中给的那个最后一个样例结果也可以是0)
[关于bsgs算法学习的链接1](http://blog.miskcoo.com/2015/05/discrete-logarithm-problem)
[关于bsgs算法学习的链接2](https://blog.csdn.net/lycheng1215/article/details/79047734)
[关于bsgs算法学习的链接3](https://ksmeow.moe/baby_step_giant_step/)
第二套题 (The 18th Zhejiang University Programming Contest Sponsored)
1 F-Schrödinger’s Knapsack
准确的来说这道题是一道背包,但是它的价值会变,当时就做成sb了淦
容易猜出来无论先装啥都要先装背包占比小的 所以排序
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll a, b, c, t, i, j, ans, n1, val, n2, q[2005], w[2005], dp[2005][2005];
ll s[2005][2005];
int main()
{while (~scanf("%lld", &t)){while (t--){scanf("%lld%lld%lld", &a, &b, &val);scanf("%lld%lld", &n1, &n2);for (i = 0; i < n1; i++){scanf("%lld", &q[i]);}for (i = 0; i < n2; i++){scanf("%lld", &w[i]);}for(i=0;i<=n1;i++)for(j=0;j<=n2;j++)s[i][j]=dp[i][j]=0;sort(q, q + n1);sort(w, w + n2);for (i = 0; i <= n1; i++){if (i == 0)s[0][0] = val;elses[i][0] = s[i - 1][0] - q[i - 1];if (s[i][0] <= 0)break;for (j = 1; j <= n2; j++){s[i][j] = s[i][j - 1] - w[j - 1];if (s[i][j] <= 0)break;}}ans = 0;for (i = 0; i <= n1; i++){for (j = 0; j <= n2; j++){if (s[i][j] <= 0)break;if (i > 0){dp[i][j] = max(dp[i][j], dp[i - 1][j] + s[i][j] * a);}if (j > 0){dp[i][j] = max(dp[i][j], dp[i][j - 1] + s[i][j] * b);}ans = max(ans, dp[i][j]);}}printf("%lld\n", ans);}}return 0;
}
G-Pretty Matrix
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
struct qwe
{int a, b;int flag;bool operator<(const qwe &a1) const{if (a == a1.a && b == a1.b)return flag < a1.flag;if (a == a1.a)return b < a1.b;return a < a1.a;}
};
struct qwe1
{int a, b;int val;
};
int t, n, m, ans, a, b, c, d;
int solve(int n,int m)
{int v[n+1][m+1];int i, j, d;for (i = 0; i < n; i++){for (j = 0; j < m; j++){scanf("%d", &v[i][j]);}}scanf("%d%d%d%d", &a, &b, &c, &d);int flag, d1;queue<qwe1> q1;map<qwe, int> m1;struct qwe1 a1;struct qwe b1;a1.a = a;a1.b = b;a1.val = 0;q1.push(a1);while (!q1.empty()){a1 = q1.front();q1.pop();d1 = a1.val;b1.a = a1.a;b1.b = a1.b;flag = (v[a1.a - 1][a1.b - 1] + d1) % 2;b1.flag = flag;//cout<<a1.a<<" "<<a1.b<<endl;//cout<<m1.count(b1)<<" "<<q1.size()<<endl;if (m1.count(b1) != 0)continue;if (a1.a == c && a1.b == d)return a1.val;m1[b1] = 1;if (flag){struct qwe1 tmp;tmp = a1;tmp.val = a1.val + 1;if (a1.b + 1 <= m){tmp.b = a1.b + 1;q1.push(tmp);}if (a1.b - 1 > 0){tmp.b = a1.b - 1;q1.push(tmp);}}else{struct qwe1 tmp;tmp = a1;tmp.val = a1.val + 1;if (a1.a + 1 <= n){tmp.a = a1.a + 1;q1.push(tmp);}if (a1.a - 1 > 0){tmp.a = a1.a - 1;q1.push(tmp);}}}return -1;
}
int main()
{while (~scanf("%d", &t)){while (t--){scanf("%d%d", &n, &m);ans=solve(n,m);printf("%d\n",ans);}}return 0;
}
第三套(The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored)
E - LIS
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
#define mod 1000000000
using namespace std;
typedef long long LL;
struct qwe {LL num,i;LL r,l;LL first;
}q[100005];
int cmp(struct qwe a,struct qwe b)
{if(a.i==b.i)return a.num>b.num;return a.i<b.i;
}
LL ans[100005],next1[100005],n,i,j,L,t;
int main()
{scanf("%lld",&t);while(t--){scanf("%lld",&n);memset(ans,0,sizeof(ans));for(i=0;i<n;i++){scanf("%lld",&q[i].i);q[i].num=i;q[i].first=next1[q[i].i-1];next1[q[i].i]=i;}for(i=0;i<n;i++){scanf("%lld%lld",&q[i].l,&q[i].r);}sort(q,q+n,cmp);L=0;for(i=0;i<n;i++){//cout<<ans[q[i].first]<<" ";if(i==0)ans[q[i].num]=L=q[i].l;else{if(q[i].i!=q[i-1].i){L=ans[q[i].first]+1;//cout<<q[i].num<<" "<<q[i].i<<" "<<q[i].l<<" "<<q[i].r<<" "<<L<<endl;ans[q[i].num]=L=max(q[i].l,L);}else{//cout<<q[i].num<<" "<<q[i].i<<" "<<q[i].l<<" "<<q[i].r<<" "<<L<<" "<<ans[q[i].first]+1<<endl;ans[q[i].num]=L=max(L,max(q[i].l,ans[q[i].first]+1));}}//cout<<ans[q[i].num]<<endl;}printf("%lld",ans[0]);for(i=1;i<n;i++){printf(" %lld",ans[i]);}printf("\n");}return 0;
}
F-Now Loading!!!
玛格级 想出这题的人都不是一般人 我是真想不出来 因为题给的数据范围太大就现将结果打表在后面输入查询的时候直接二分查表就行了 哔~哔~哔~(因不明原因屏蔽)
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
#define mod 1000000000
using namespace std;
typedef long long LL;LL t, i, j, n, ans, dd, dd1, dd2, a, b;
LL q[500050];
LL w, ans1, l, r, mid;
LL sum[32][500050];
int main()
{scanf("%lld", &t);while (t--){scanf("%lld%lld", &a, &b);for (i = 1; i <= a; i++)scanf("%lld", &q[i]);sort(q + 1, q + a + 1);for (j = 1; j <= 30; j++)for (i = 1; i <= a; i++){sum[j][i] = sum[j][i-1] + q[i] / j;}ans = 0;for (j = 1; j <= b; j++){scanf("%lld", &w);dd = 1;//kans1 = 0;//tempdd1 = 0;//posdd2 = w;//upfor (i = 1; i <= a; i = dd1 + 1){dd1 = i - 1;l = i;r = a;while (l <= r){mid = (l + r) >> 1;if (q[mid] <= dd2){dd1 = mid;l = mid + 1;}else{r = mid - 1;}}ans1 = (ans1 + sum[dd][dd1] - sum[dd][i-1] + mod) % mod;dd++;dd2 *= w;}ans = (ans + ans1 * j) % mod;}printf("%lld\n", (ans + mod) % mod);}return 0;
}
I-Magic Points
题意是对n*n的正方形取边上的点 连线不能平行x和y轴 问前 n条边连线交点最多的 就i和i+n就完事了 但是 最后一个点 会和之前的点有重复 所以 最后一点 要重新找
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
int t,i,j,n;
int main()
{while (~scanf("%d", &t)){while(t--){scanf("%d",&n);if(n==2)printf("0 2 1 3");else{for(i=0;i<n-1;i++){printf("%d %d ",i,i+n);}printf("%lld %lld",n-1,3*n-4);}printf("\n");}}return 0;
}
第四套
F - Never Wait for Weights
这题是个并查集 比赛 时候想到了 但是 犯蠢 减错了权值 ( 还是太菜 学不来
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
#define eps 0.0000000001
#define mem(a) memset(a,0,sizeof(a))
#define maxx 1e10
#define inf 0x3f3f3f3f
#define PI acos(-1)
#define show(a) cout<<a<<endl
//#define show(a,b) cout<<a<<" "<<b<<endl
using namespace std;
typedef long long ll;
ll father[100005],val1[100005];
ll Find(ll x)
{ll t=x,d=x,sum=0,sum1;while(x!=father[x]){sum+=val1[x];x=father[x];}sum+=val1[x];//cout<<"***"<<sum<<endl;while(x!=t){d=father[t];father[t]=x;sum1=val1[t];val1[t]=sum;t=d;sum=sum-sum1;}return x;
}
void Union(ll x,ll y,ll v)
{ll fx=Find(x);ll fy=Find(y);if(fx!=fy){father[fx]=fy;val1[fx]=v+val1[y]-val1[x];}
}
ll n,m,val,i,j,a,b,ans;
char q[20];
int main()
{while(~scanf("%lld%lld",&n,&m)){if(n==0&&m==0)break;for(i=1;i<=n;i++)father[i]=i;memset(val1,0,sizeof(val1));for(i=0;i<m;i++){scanf(" %s",q);if(q[0]=='!'){scanf("%lld%lld%lld",&a,&b,&val);Union(a,b,val);}else{scanf("%lld%lld",&a,&b);if(Find(a)!=Find(b)){printf("UNKNOWN\n");}else{ans=val1[b]-val1[a];printf("%lld\n",-ans);}}}}
}
第五套
没补
关于最近做的一些题的归档吧相关推荐
- java程序设计编程题_20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题...
20165237 2017-2018-2 <Java程序设计>第十周考试补做及编程题 知识点 1.链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用 . ...
- .net 获取字符串中的第一个逗号的位置_SQLZOO中做错过的题
第2关--简单查询 case......end表达式 更正下面链接中做错过的题 SQLZOO:SELECT from WORLD Tutorial/zhsqlzoo.net 参考答案链接地址: 第2 ...
- leetcode练习(简单总结做过的题)
文章目录 leetcode(简单总结做过的题) 两数之和:`简单` 整数反转:`简单` 回文数:`简单` 罗马数字转整数:`简单` 最长公共前缀:`简单` 有效的括号:`简单` 合并两个有序的链表:` ...
- 三维叉乘怎么算_3分钟做完这些题,你的CAD才算熟练
3分钟做完这些题,你的CAD才算熟练 "有没有CAD教程","如何学习CAD?" ...... 这样的留言每隔一段时间都能看到. CAD说简单其实也挺简单的,但 ...
- 用flash做连线题(线的一端跟随鼠标)
帮同事做课件,其中要做个连线测试题,需要实现用户可以用鼠标从一个点拉出一根线来的效果,实际上是线 的一端跟随鼠标,改变线的长度和倾斜角度.这和一般的图象或文字跟随鼠标有点区别.因为把高中的三角函数忘光 ...
- 笔试代码题--搜狗--汪仔做对的题数范围
笔试代码题--搜狗--汪仔做对的题数范围 注意:朋友对了k道题,不一定是str1中的所有对. * 题目:总共n道题,汪仔知道朋友做的k道题是对的,他知道自己做的题目是str1,问最少对几道,最 ...
- 饭店菜单选择c语言,求C语言大神,帮忙做一下这个题,要源代码设计实现一个餐厅点餐系统? 爱问知识人...
求C语言大神,帮忙做一下这个题,要源代码 设计实现一个餐厅点餐系统,实现电子点餐.要求实现二级菜单: 一级菜单: 请选择: 1.点餐 2.查看已点菜品 3.添菜 求C语言大神,帮忙做一下这个题,要源代 ...
- 计算机考试题太多,上机做题速度太慢!如何避免高会考试时做不完题?
高级会计实务考试题型全部为案例分析题,考察内容全面,材料阅读量大,答题文字内容多.而高级会计职称考试方式采用无纸化考试方式.试题.答题要求和答题界面在计算机显示屏上显示,考生应使用计算机鼠标和键盘在计 ...
- 520.1314用计算机怎么算出来的,来做个计算题 怎么算正确答案都是520.1314
来做个计算题 怎么算正确答案都是520.1314以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 来做个计算题 怎么算正确 ...
最新文章
- Nginx服务器上安装并配置PHPMyAdmin的教程
- Py之torchvision:torchvision库的简介、安装、使用方法之详细攻略
- 一个老外如何丑化中国程序员
- 微软已暂时停用你的帐户_Apple ID 被停用如何解决?
- 自定义 URL Scheme 完全指南
- C#趣味程序---水仙花数
- tp 数据库查询排序_怎么进行数据库分库分表?
- Emscripten 单词_极光单词独创多种学习方法助您高效背单词
- 常用并发工具类(锁和线程间通信工具类)
- django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能
- python中堆排序_Python实现堆排序的方法详解
- 论文笔记_S2D.50_Kimera 具有结构规律的增量视觉-惯性三维网格生成
- Flash MX 2004 基础知识
- 贪吃蛇c加加代码_贪吃蛇 C语言源代码
- 造福身心障碍者 Skype及PowerPoint新增实时字幕功能
- php递归算法的简单示例,php递归函数 php递归算法经典实例大全 | 帮助信息-动天数据...
- 打印服务Print Spooler自动停止解决方案
- 新商用密码产品认证梳理——检测和认证机构篇
- 【数据分享】全国县市2000-2020年医疗卫生机构床位数数据(excel和shp格式)
- 人人网主页登录_人人网回归,你的前任和全部黑历史将被翻开!买账吗?