博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #560 (Div. 3)
阅读量:6501 次
发布时间:2019-06-24

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

题目大意:给定一个十进制的01串,使得他对10^x取模后结果等于10^y.

思路直接枚举后x位数字,当前仅当倒数第y+1个位置数字为1,其余位置为0时等式成立,从后往前依次遍历即可。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef long long LL;12 const int maxn = 1e5+10;13 LL n,x,y;14 string str;15 int main()16 {17 while(cin>>n>>x>>y){18 int ans = 0,tmp=0;19 cin>>str;20 reverse(str.begin(),str.end());21 for(int i=0;i
View Code

题目大意:给定n个问题,想问你最多能选取多少个问题并且满足 第k个问题数 a[k]>=k

思路:排序+贪心

  从小到大遍历,若当前选取第x个数,若满足a[x]>=x,就选取当前的数,否则就跳过。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef long long LL;12 const int maxn = 1e5+10;13 LL n;14 priority_queue
,greater
>Q;15 int main()16 {17 while(cin>>n){18 for(int x,i=1;i<=n;i++){19 cin>>x;20 Q.push(x);21 }22 int k=1,ans=0;23 while(Q.size()){24 if(Q.top()>=k)ans++,k++;25 Q.pop();26 }27 cout<
<
View Code

题目大意:给定一个长度为N的字符串,求最少删除多少个字符使得剩下的字符串满足(a[i]!=a[i+1])(i= 1,3,5,7....) 最后输出最少删除的字符个数,已经删除后的字符串。

思路:模拟

  从第一个位置往后计算,若满足a[i]!=a[i+1],则将这两个字符添加到目标字符串中,否则删除第i个字符,再从第i+1个字符往后遍历。最后注意特判一下(若n-删除的字符数 = 奇数,则要加上原字符串的最后一个)

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef long long LL;12 const int maxn = 1e5+10;13 LL n;14 string str;15 int main()16 {17 while(cin>>n){18 cin>>str;19 string tmp="";20 int num=0;21 for(int i=0;i
View Code

题目大意:给定一个长度为n的整数序列a,求一个最小的数X,使得X的所有因子(1,X除外)都在a序列中。若能找到则输出这个数,若不能找到则输出-1

思路:排序+思维

  若一个数除1和他本身外所有的因子都在a序列中,则这个数等于min(a)*max(a);

  所以我们只需要将a序列排序,从两端往中间判断 每一次的a[l]*a[r]是否相等,若存在不相等则输出-1,若全相同,则判断这个数的所有因子数-2是否等于N,等于N则输出这个数,否则输出-1 (若n==1,只需要判断当前数是否为质数,若为质数则输出该数的平方,否则输出-1)

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef long long LL;12 const int maxn = 1e5+10;13 const LL INF = 1e16;14 LL n,t,a[400];15 string str;16 LL count(LL n){17 LL s=1;18 for(LL i=2;i*i<=n;i++){19 if(n%i==0){20 LL a=0;21 while(n%i==0){22 n/=i;23 a++;24 }25 s=s*(a+1);26 }27 }28 if(n>1) s=s*2;29 return s;30 }31 int main()32 {33 cin>>t;34 while(t--){35 cin>>n;36 for(int i=1;i<=n;i++)cin>>a[i];37 sort(a+1,a+n+1);38 LL ans = a[1]*a[n];39 if(n==1)ans = a[1]*a[1];40 else{41 LL l=2,r=n-1;42 while(l<=r){43 if(l==r){44 if(ans!=a[l]*a[r])ans=-1;45 break;46 }47 if(a[l]*a[r]!=ans){48 ans = -1;49 break;50 }else l++,r--;51 }52 }53 if(ans!=-1){54 LL num = count(ans)-2;55 if(num!=n)ans=-1;56 }57 cout<
<
View Code

题目大意:给定两个长度为n的序列a,b ,只能重新排列b数组的元素使得等式值最小。

思路:排序+贪心

  有题意我们知道,a序列不能打乱顺序。对于a序列来说第i个位置的数再计算f(l,r)时,会被计算i*(n-i+1)次,所以我们将a序列的每一个位置都乘上 (i*(n-i+1)) ;

  现在的问题转化为,重新排列a,b序列,使得他们对应位置乘积之和最小,结果对998244353取模,现在只需要用a的最小值乘上b的最大值,a的较小值乘上b的较大值..依次类推即可。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std;11 typedef long long LL;12 const LL mod = 998244353;13 const int maxn = 2e5+10;14 typedef pair
P;15 LL n,b[maxn],a[maxn];16 int main()17 {18 while(cin>>n){19 for(LL i=1;i<=n;i++){20 cin>>a[i];21 a[i] = (n-i+1)*i*a[i];22 }23 for(int i=1;i<=n;i++)cin>>b[i];24 sort(a+1,a+n+1);25 sort(b+1,b+n+1);26 LL ans = 0;27 for(int i=1;i<=n;i++)28 ans = (ans + (a[i]%mod*b[n-i+1]%mod)%mod)%mod;29 cout<
<
View Code

 

转载于:https://www.cnblogs.com/wangrunhu/p/10874885.html

你可能感兴趣的文章
20 个免费的 jQuery 的工具提示插件:
查看>>
project facet java version 1.6 is not supported
查看>>
Boost.Asio的使用技巧
查看>>
CreateProcess的使用方法
查看>>
jquery(入门篇)无缝滚动
查看>>
文博项目-质量评估监测-软件
查看>>
如何学习
查看>>
江城子
查看>>
广东省-IT红黑榜排名公司名称
查看>>
Python核心编程笔记---- input 与raw_input
查看>>
PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)
查看>>
赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
查看>>
第1章 游戏之乐——一摞烙饼的排序
查看>>
Windows录音API学习笔记(转)
查看>>
只有在北方的中国帝国能力享受免费的商业课程:财富规划法与愿景
查看>>
食谱API自由和开放接口-为了发展自己的健康厨房APP应用
查看>>
存储管理(两):openfiler它accounts
查看>>
[CareerCup] 3.2 Min Stack 最小栈
查看>>
汇编语言的应用
查看>>
当创业遇上O2O,新一批死亡名单,看完震惊了!
查看>>