标签:line size 超出 display printf hid bit clu signed
A 只有判段相邻的差是不是有奇数,有奇数NO,反之YES
B 因为题目说随便两个相等+另一个数就是YES,所以map存第一次出现的数字的位置,如果再次出现,只要那个数的第一个位置不是i-1就是YES反之NO
C蛋疼题意,其实只要找两个RR之间最短的距离就行了
D
题意:
老师的n个想法价值ai,同学的n个想法价值bi,相互对应,找一共有多少对 ai+aj-bi-bj>0
思路:
直接将老师的思路减学生的思路,从小到大排序,用upper_lound去找他的相反数的大一点的位置,复杂度是O(lgn*n)
但是n是2e5的范围,答案可能会爆int,别忘了开ll
E
题意(题目描述进行魔改,但内容大致不变):
给n,h,l,r 四个值,表示n长度的数组,0~h-1的范围,在【l,r】区间得分能获得一个奖品(1<=n<=2000)
接下来的n个数,是按顺序的比赛得分,但是你有一个权力,每次得分可以保持不变,或者减一,进行累加,如果超出h,%h,问最多有多少奖品
思路:
dp【i】【j】,i表示第i个数字,j表示前面减了几次一,状态转移方程就是
cc数字i 全部累加情况(无减一)- j,这里有一个坑就是cc可能小于0,一定要while(cc<0)cc+h;而不是(cc+h)%h,因为这个h可能过小。//u1s1,比赛的时候如果写出,也会在这里被hack,因为惯性思维下意识写了(cc+h)%h
k=(l<=cc && r>=cc);
dp[i][j]=max(dp[i-1][j-1]+k,dp[i-1][j]+k); (当j==0的时候特判一下,因为没有-1这种)
再最好比较max(dp【n】【i】0<=i<=n)中
1 #include<iostream> 2 #include<map> 3 #include<set> 4 #include<queue> 5 #include<stdio.h> 6 #include<string.h> 7 #include<algorithm> 8 using namespace std; 9 #define ll long long 10 #define ull unsigned long long 11 #define il inline 12 #define it register int 13 #define inf 0x3f3f3f3f 14 #define lowbit(x) (x)&(-x) 15 #define pii pair<int,int> 16 #define mak(n,m) make_pair(n,m) 17 #define mem(a,b) memset(a,b,sizeof(a)) 18 #define mod 998244353 19 const int maxn=2e3+10; 20 int n,m,t,h,l,r; 21 int a[maxn],dp[maxn][maxn]; 22 int zhi[maxn][2]; 23 int main(){ 24 scanf("%d%d%d%d",&n,&h,&l,&r); 25 int ans=0,c=0;mem(dp,0); 26 for(it i=1;i<=n;i++){ 27 scanf("%d",&a[i]); 28 } 29 for(it i=1;i<=n;i++){ 30 c+=a[i];c%=h; 31 if(l<=c && r>=c){ 32 dp[i][0]=dp[i-1][0]+1; 33 } 34 else{ 35 dp[i][0]=dp[i-1][0]; 36 } 37 for(it j=1;j<=i;j++){ 38 int cc=(c-j+h)%h;while(cc<0){cc+=h;} 39 if(l<=cc && r>=cc){ 40 dp[i][j]=max(dp[i-1][j-1]+1,dp[i-1][j]+1); 41 } 42 else{ 43 dp[i][j]=max(dp[i-1][j-1],dp[i-1][j]); 44 } 45 } 46 } 47 for(int i=0;i<=n;i++){ 48 ans=max(dp[n][i],ans); 49 } 50 printf("%d\n",ans); 51 return 0; 52 }
F是个树
cf现在进不去,D题代码待会再放
Codeforces Round #627 (Div. 3)
标签:line size 超出 display printf hid bit clu signed
原文地址:https://www.cnblogs.com/luoyugongxi/p/12488050.html