我蓝了!蓝了!!!蒟蒻的蓝色。日常点开friend发现竟然没几个人打??然后去div1看了一下果然学长全都去打div1了呜呜呜。
看到了久违的黄大仙,以为他今晚要上grandmaster,结果打完发现他取消注册了。。。
题外话,div2半小时过完abc,d题推了一个多小时无果,div一千五百人同时在推D题,海上生明月,天涯共此时!(还好我手速快。。。)
上午考完英语三十个单选一百多个选项单词不认识。。。后天高数军理大后天大物,这几天暂时不打了。(好像也只有一场div3
A:我感觉我是瞎做的
all是整个数列的和,然后我们算前缀和sum,只要 sum!=all-sum,那么这个位置之前的都选出来就行了。注意特判个别情况
B:贪心+优先队列(或者存进数组然后排序),所有能分割的地方 都把 花费 存进来,然后前缀和<B就行。
只贴main方法,快速io太长容易引起不适,请忽略我的冒泡排序。。。
public static void main(String[] args) { int n = nextInt(); int B = nextInt(); int ans[] = new int[n]; int index = 0; int a[] = new int[n]; for(int i=0;iB){ out.print(i); out.flush(); return; } } out.print(index); out.flush(); return; }
C:用了十分钟过掉的,,,还是太菜了,看了好久才找到规律
很显然我们要找到 连续 0 子段 的 个数(我太菜了说不清楚),假如有n个,那么我们n次y操作一定可以,或者n-1次x操作加一次y操作。
public static void main(String[] args) { int n = nextInt(); long x = nextLong(); long y = nextLong(); String s = next(); char ch[] = s.toCharArray(); int num = 0; for(int i=0;i
D:毒瘤啊 刚才看了看学长的代码发现自己的思路竟然是错的,早知道半个小时过掉abc就去睡觉,也不至于今天英语考试一副要死的样子。。。
问题是我真的感觉自己要挂科了,贴一份学长的代码(大家可以努力看看。。。。。)
要是看懂了的话顺便给我讲讲,,考试周了我这种蒟蒻一般不敢打扰学长。。。
#includeusing namespace std;typedef long long LL;LL n;int dp[102][10002], ans[100];void test(){ dp[0][0]=1; for(int i=1;i<=30;i++){ for(int j=1;j<=10000;j++){ if(j>=1&&dp[i-1][j-1]) dp[i][j]=1; if(j>=5&&dp[i-1][j-5]) dp[i][j]=1; if(j>=10&&dp[i-1][j-10]) dp[i][j]=1; if(j>=50&&dp[i-1][j-50]) dp[i][j]=1; } int cnt=0; for(int j=1;j<=10000;j++) cnt+=dp[i][j]; ans[i]=cnt; //printf("%d %d\n", i, cnt); }}int main() { test(); cin>>n; if(n<20) printf("%d\n", ans[n]); else printf("%lld\n", ans[11]+(n-11)*49);}
下面这个是黄大仙的D题,,,看了下提交记录用了不到十分钟,,不过几乎没有可读性。。。可能这就是神仙吧.jpg
#include#include #include const int N=1005;std::bitset dp[14],tmp;int main() { dp[0][0]=1; for(int i=1;i<=13;i++) { tmp=dp[i-1]; dp[i]|=tmp<<1; dp[i]|=tmp<<5; dp[i]|=tmp<<10; dp[i]|=tmp<<50; } int n,ans=dp[13].count(); scanf("%d",&n); if(n<=13) printf("%d\n",int(dp[n].count())); else printf("%lld\n",1LL*(n-13)*49+ans); return 0;}