
题目链接.
A - Download More RAMB - GCD ArraysC - Meximum ArrayD - Peculiar Movie PreferencesE Grid Xor
A - Download More RAM#include#define ll long long #define inf 0x3f3f3f3f using namespace std; int t; ll n,k; struct node { ll a,b; }v[110]; bool cmp(node x,node y) { return x.a >t; while(t--) { cin>>n>>k; for(int i=1;i<=n;i++) { cin>>v[i].a; } for(int i=1;i<=n;i++) { cin>>v[i].b; } sort(v+1,v+1+n,cmp); for(int i=1;i<=n;i++) { if(k>=v[i].a) { k+=v[i].b; } else break; } cout< B - GCD Arrays 虽然是B,但还是想了一会,没有看完题就思路明确,所以代码写的很丑。
思路:
a a a只有一个数的话,该数是 1 1 1就为 N O NO NO,不是就为 Y E S YES YES。
a a a有多个数的话, k k k大于等于 a a a中奇数的个数就为 Y E S YES YES,否则为 N O NO NO。#includeC - Meximum Array#define ll long long #define inf 0x3f3f3f3f using namespace std; int t; int l,r,k; int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>t; while(t--) { cin>>l>>r>>k; if(l==r&&l==1) { cout<<"NOn"; continue; } if(r-l==k) { cout<<"YESn"; continue; } if(r-l+1<=k*2) { cout<<"YESn"; continue; } if((r-l+1)%2==1&&l%2==0&&k==(r-l+1)/2) { cout<<"YESn"; continue; } cout<<"NOn"; } return 0; } 是C没有什么思路的罚坐场了,fw落泪…
思路: 预先记录 0 − n 0-n 0−n每个数出现的位置,然后从初始位置s=0开始找mex,找完一个mex就更新初始位置s。#includeusing namespace std; int t; int n; vector a[200010],b; int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>t; while(t--) { cin>>n; for(int i=0;i<=n;i++)a[i].clear(); b.clear(); for(int i=0;i >x; a[x].push_back(i); } int i=0; while(i D - Peculiar Movie Preferences 思路:
一个字符串自身是回文就为 Y E S YES YES;
排除上述情况后字符串包括两种种类型ABC(ABB,AAB是特殊的ABC),AB;
组成回文的情况可能是(1)AB-BA(2)ABC-CBA (3)AB -CBA (4)ABC-BA
a-zzz可变为int:000001-262626;
可用set记录一下。#includeE Grid Xorusing namespace std; int t; int n; set s1,s2,s3,s4; int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>t; while(t--) { s1.clear();s2.clear(); s3.clear();s4.clear(); cin>>n; int flag=0; for(int i=0;i >s; if(!flag) { if(s.size()==1) { flag=1; continue; } if(s.size()==2) { if(s[0]==s[1]) { flag=1; continue; } int x=(s[0]-'a'+1)*100+s[1]-'a'+1; int y=(s[1]-'a'+1)*100+s[0]-'a'+1; if(s2.count(x)) { flag=1; } if(s1.count(y)) { flag=1; } if(s3.count(y)) { flag=1; } if(!flag) { s1.insert(x); s2.insert(y); } } if(s.size()==3) { if(s[0]==s[2]) { flag=1; continue; } int x=(s[0]-'a'+1)*10000+(s[1]-'a'+1)*100+(s[2]-'a'+1); int y=(s[2]-'a'+1)*10000+(s[1]-'a'+1)*100+(s[0]-'a'+1); int x2=(s[0]-'a'+1)*100+(s[1]-'a'+1); int y2=(s[2]-'a'+1)*100+(s[1]-'a'+1); if(s2.count(x)) { flag=1; } if(s1.count(y)) { flag=1; } if(s1.count(y2)) { flag=1; } if(!flag) { s1.insert(x); s2.insert(y); s3.insert(x2); s4.insert(y2); } } } } if(flag)cout<<"YESn"; else cout<<"NOn"; } return 0; } 找规律
一个正方形可以分为这样的四部分去填充,找填充规律#include#define ll long long using namespace std; int t; int n; int a[1010][1010]; int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin>>t; while(t--) { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } int ans=0; for(int i=1;i<=n;i+=2) { for(int j=i+1;j<=n;j+=4) { ans=ans^a[i][j]^a[n+1-i][j]; } } for(int i=1;i<=n;i+=2) { for(int j=i+3;j<=n;j+=4) { ans=ans^a[j][i]^a[n+1-j][i]; } } cout< 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)