虽然我发这个随笔的时候估计已经比完了,不过仍是把连接放上来好了。java
一个比赛ios
http://116.196.97.99/contest.php若是连接没设置好的话,能够在这里复制网址
ZZH是北化acm界新生代的大佬,天天会和无数来自全球各地的大佬进行交流。可是,ZZH天天水群的时间有限。ZZH想尽量多的和更强的大佬进行交流。他把每一个大佬的实力用一个数字Ω表示出来,而且天天和Ω总和最高的几位大佬进行交流。可是ZZH正在忙着水群,因而把这个问题交给了你。事成以后,ZZH会给你2147483647%1的金币做为奖励算法
单组数据数组
第一行两个整数n,m,分别表明今天ZZH水群的时间(以分计算)和今天想要与ZZH交流的大佬的数量(<=2000)。服务器
以后m行,分别有两个数字,表明和第i个大佬交流花费的时间(<n),以及大佬的Ω(<1000)。函数
今天与ZZH交流的大佬的Ω的值的总和。网站
70 3 71 100 69 3 1 2
5
这道题一看就是很常见的背包问题,而后我不会作了,我用了本身之前的代码,我反省,我反思!云计算
#include <iostream> #include <cstring> using namespace std; int main() { int V,n; cin>>V>>n; int v[2100],p[2100],dp[2100]; memset(v,0,sizeof(v)); memset(p,0,sizeof(p)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) cin>>v[i]>>p[i]; for(int i=1;i<=n;i++) for(int j=V;j>=v[i];j--) dp[j]=max(dp[j-v[i]]+p[i],dp[j]); cout<<dp[V]; }
背包问题会就是会,不会也写不出来,大概。没什么好说的,下一道吧。加密
只有一行,有一个整数N,表示大三角形的层数(N<=45000)
有两行,
第一行只有一个数,表示小三角形的个数;
第二行也只有一个数,表示能量棒的个数。
8
64 108
听坐我对面的说A很好作,可是数据太大了。
emmmmm,好的,没问题,BigInteger走起!
大概思路就是第1行1个三角,第2行2+1个,第3行3+2个……
而后能量棒是第1行3根,第2行6根,第3行9根……
很简单的一道题,难点就在数据太大,不过,我BigInteger怕过谁??
import java.math.BigDecimal; import java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n=in.nextInt(); BigInteger x1 = BigInteger.ZERO; BigInteger x2 = BigInteger.ZERO; BigInteger x3 = BigInteger.ZERO; BigInteger y1 = BigInteger.ZERO; BigInteger a1 = BigInteger.ONE; BigInteger b1 = BigInteger.ONE; BigInteger a2 = BigInteger.ZERO; b1=b1.add(a1); b1=b1.add(a1); for(int i=0;i<n;i++) { x1=x1.add(a1); x2=x2.add(a2); a1=a1.add(BigInteger.ONE); a2=a2.add(BigInteger.ONE); y1=y1.add(b1); b1=b1.add(BigInteger.ONE); b1=b1.add(BigInteger.ONE); b1=b1.add(BigInteger.ONE); } x3=x1.add(x2); System.out.println(x3); System.out.println(y1); } }
能随意切换C++和JAVA的我真棒233333
下一道,H吧,感受挺简单的啊
故事不编了,m哥牛逼!
给出一个长度为n的数列a,如今有以下三种操做:
一、 1 p x: 将a[p]更改成x
二、 2 l r: 求a[l]到a[r]的最大值与最小值的差
三、 3 l r: 求a[l]到a[r]的和
如今给你一些操做,请你求出相应的数值。
第一行输入一个数字T表示数据组数(1<=T<=10)
接下来T组数据,每组数据第一行为两个整数n、m(1<=n,m<=1e5),分别表明a的长度和操做数,下一行n个整数表示a[1]到an,接下来m行,每行一个如题目给出的输入格式的操做
(1<=p,l,r<=n,0<=x<=1000)
对于每组数据
对每个操做2或3,输出一个整数表示结果
2 4 4 1 2 3 4 2 1 2 1 2 7 2 1 2 3 1 4 5 4 2 7 6 3 8 2 1 3 1 3 1 2 1 5 3 3 3
1 6 15 5 7 1
这题真的很简单啊,不就是一些数组的操做吗?怎么作的人那么少。。。
惟一须要注意的就是题目中的数组是从1开始的。
#include <iostream> using namespace std; int suan(int a[],int l,int r){ int m1,m2; m1=a[l]; m2=a[l]; for(int i=l+1;i<=r;i++){ m1=m1>a[i]?m1:a[i]; m2=m2<a[i]?m2:a[i]; } return m1-m2; } int add(int a[],int l,int r){ int s=0; for(int i=l;i<=r;i++){ s+=a[i]; } return s; } int main() { int t,n,m,x,p,y,l,r; cin>>t; while(t--){ cin>>n>>m; int a[n+1]; for(int i=1;i<=n;i++){ cin>>a[i]; } while(m--){ cin>>x; switch(x){ case 1:cin>>p>>y; a[p]=y; break; case 2:cin>>l>>r; cout<<suan(a,l,r)<<endl; break; case 3:cin>>l>>r; cout<<add(a,l,r)<<endl; break; } } } }
请不要在乎我乱起的函数名!
而后这个时候我发现我排第12??!历来没这么高过,信心大增!!!
继续加油!
看E好像作的人挺多的,我也来试试吧!
北化ACM社团有n台云服务器,每台服务器都有一个使用期限,第i台服务器还能使用Ri天。如今有m个任务须要部署到云服务器上运行,第j个任务须要运行Tj天。第j个任务可以部署在第i台服务器上时当且仅当 Tj <=Ri,而且每台服务器在其使用期限内总共只能运行一个任务。即便Tk+Tj <=Ri,你也没法将第k个和第j个任务一块儿部署到第i 台服务器上,不然这题将失去其签到题的做用(看到签到题这几个字的时候我笑了)。为了能充分利用云服务器,如今须要计算最多能部署多少任务。而你做为北化ACM的但愿,这个问题须要由你 来解决。
单组数据
第一行两个整数表明 n和m
第二行 n个整数表明 R1,R2,...,Rn
第三行 m个整数表明T1,T2,...,Tm
1<= n,m,Tj ,Ri <=100000
输出一个整数表明最多有多少个任务可以部署到云服务器上
5 5 6 1 3 4 2 4 6 6 2 5
3
既然是签到题,哈哈,那就没什么好说的了,来吧,我不怕你!
#include <iostream> #include <algorithm> using namespace std; int main() { int n,m,s=0; cin>>n>>m; int a[n],b[m]; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<m;i++){ cin>>b[i]; } sort(a,a+n); sort(b,b+n); int j=0; for(int i=0;i<m;){ if(b[i]<=a[j]){ i++; j++; s++; } else{ j++; } if(j==n){ break; } } cout<<s; }
嗯,很简单,就随便排排序,而后判断一下使用期限够不够就好了。
而后!!!第8了!!!
不过很惋惜,我就止步4道了,以后再也没作出来了,名次也掉到了50多名,不过也很强了啊!很久不作题了居然还能突破以前的最后成绩。
共两行:
第一行为N何L,中间用空格隔开。 (1<=N<=100 , 1<=L<=7)
第二行为N个0~9的数字,中间用空格隔开。
只有一行,含所有知足条件的素数,中间用逗号隔开,保证至少存在一个素数。
10 3 8 9 1 0 2 3 5 4 7 6
547
本身感受代码没问题了,但就是过不了。。就不放了。
我懒得编故事了 m哥牛逼!
有n个积木,第i个积木的高度为a[i],求每一个积木前面有几个比它矮的积木
多组输入,每组由两行组成,第一行输入n,第二行输入n个数,为n个积木的高度a[i]
//(1<=n<=100000)(1<=a[i]<=1000000000)
每组数据输出n个数,第i个数为第i个积木前面比他矮的积木的个数
5 1 2 3 4 5
0 1 2 3 4
这道题是喜闻乐见的超时,最后也没找到好的算法。
众所周知,罗dalao十分的厉害。有一天,罗dalao发明了一种密码,用来给文档加密(可认为文档是一个长度为n的字符串s)。
罗dalao要对s[l]...s[r]加密,首先要反转区间s[l]...sr,而后使k=(r-l+1)/2(向下取整),再反转区间s[l]...s[l+k-1]和s[l+k]...s[r],以此类推,一直到区间长度都为1为止。(加密整个文档至关于加密区间s[1]...s[n])
有一天你找到了一篇罗dalao加密过的文档,如今要你求出某个位置的字符加密前的位置。
第一行输入整数T(0<T<=1000),表示数据组数,接下来T行,每行两个整数n和p(1<=p<=n<=1e18),分别表示文档长度和询问的位置
输出T行,每行一个整数,表示每组数据中加密后p位置的字符的原位置
4 4 1 4 2 4 3 4 4
3 4 1 2
罗dalao很是的厉害,因而会有不少人向他请教一些问题,而他天天有L分钟专门用来解答问题。因为来请教的人不少,因此要找罗dalao请教问题,须要预约。
因而,罗dalao知道天天会有n我的来请教问题,第i个到来的人在第ai分钟到来,罗dalao解答问题要用ti分钟(罗dalao精明的安排保证ai+ti<=ti+1和an+tn<=L),然而罗dalao想找空闲的时间看小电影,罗dalao看每一部小电影都要从头看到尾,期间不能有中断,每部小电影的时长为m,罗dalao想知道他天天最多能够看多少部小电影,如今请你帮他计算一下。
单组
第一行3个整数:n,L和m(0<=n<=1e5,1<=L<=1e9,1<=m<=L)
接下来n行,每行两个整数ai和ti(0<=ai<=L-1,1<=ti<=L)
输出一个整数,表示罗dalao最多能观看多少部小电影
2 11 3 0 1 1 1
3
Leo喜欢吃烧烤,并且只吃三种,羊肉串,青菜,火腿肠,她吃烧烤以前喜欢把烧烤摆成一长串,并且还有特别的摆放规则,摆错了她这一顿就不吃了。
规则有:1.对于连续的三个烤串,不能三个烤串都是同一种。
2.对于连续的三个烤串,若是三种烤串都有,青菜不能放在中间(在吃肉中途吃菜是会使人自闭的)
3.依旧是对于连续的三个烤串,第一串和第三串都是青菜的话,中间不能是羊肉或者火腿肠(她的意思是吃素减肥)
如今有三种烤串都有无数根,她想摆出长度为n的烤串,请你求出方案数(因为结果可能会很大,因此只需给出答案模1000000007)
第一行有一个数字T(T<100),表示有T组数据
接下来的T行,每行一个数字n (1≤N≤1010)
对于每一组数据,输出摆出长度为n的烤串的方案数
4 2 3 4 6
9 20 46 244
Leo有两个数列,它们的长度都是n
在最开始,a数列里都是0,b数列是Leo随机填充的n个数(数字为1-n,保证b数列是1-n的一个排列)
如今Leo能够进行两种操做
\1. add L R 表示她给a数列从a[L],a[L+1],...,a[R],都加一
多组数据
对于每组数据,第一行有2个数字n,q,表示a与b的长度 和操做数。1<= n,q < =100000
第二行有n个数字,表示数列b的初始状态
接下来的q行,每行一个操做,具体操做格式如题目所给
1<= L <= R <= n
对于每个query操做,输出一行表示求和的结果。
6 10 6 1 4 3 2 5 query 1 4 add 2 2 query 3 6 add 1 6 add 3 4 query 2 5 query 1 6 add 2 4 query 1 4 query 3 5
0 0 2 2 4 1
我果真仍是只能作简单题。。