AIM Tech Round 3 (Div. 2) A B C D
雖然打的時候是深夜但是狀態比較好 但還是犯了好多錯誤..加分場愣是打成了降分場
ABC都比較水 一會敲完去看D 很快的就想出了求0和1個數的辦法 然后一直wa在第四組..快結束的時候B因為低級錯誤被hack了...做完B想出了D的正解企圖絕殺..然而還是失敗了..
想了想還是由于自己不夠認真吧..手速做完前三題 看著能漲分的名次就不太努力的做D了..中間還水了一下群..浪費了很多時間 導致最后沒有能夠完成D
A n個數 大于b被拋棄 不然就加入容器 如果容器中的和大于d 清理容器 直接模擬就好
B n個x軸點和初始坐標a 問走完至少n-1個點需要多少時間 可以想到走n-1個點一定是最優的 那么排序之后分別嘗試拋棄x[1]和x[n] 輸出最小值 當n==1時 直接輸出0 因為這個被hack..
C 給出一個字符串 在其中選擇一個連續非空子串 使其中的所有字母都-1 求這樣操作一下這個字符串能達到的最小字典序 可以想到從前往后每個點的重要程度是依次下降的 尋找到第一個不是a的位置 使其作為子串的起點 再向右尋找直到尾點是a 如果找不到起點 說明全是a 那就把最后一個變為z
D 給出 a00 a01 a10 a11 分別代表 在一個由0 1組成的字符串中 00 01 10 11對的個數 問是否存在這樣的字符串 有就輸出 否則輸出im
可以由a00 和 a11求出0 1 的個數x y 需要注意的是a00為0的時候 x有兩個可能值 0 1 所以x與y的組合情況有四種?
當我們確定了x和y存在的時候 可以想出 x*y == a01 + a10 在四種情況中如果都不滿足 就輸出im
當有一個滿足的時候 就是說 x個0和y個1一定可以組成滿足題意的式子 這時候進行簡單的特判 即一個為0的時候 直接輸出另外一個
當都不為0的時候 可以將其擺為0..01..101..10..0的形式 先在1的尾部嘗試放0 如果a10可以整除 就不用在1中間插0
當把尾部和可能存在的中間的部位插完之后 我們的策略一定是滿足a10的 因為式子成立 所以剩下的0全部放在最前 一定是可以成立的
每次進行字符串的輸出之后直接return 0 到最后再搞一個輸出im出來
雖然比較長 .. 但是大部分都是復制粘貼的..?
一個trick即test4 是0 0 0 0 這時候 可能的字符串是存在的 即0或者1 .. 利用上面提到的四種情況是可以得到的..但是自己居然認為這個是錯點..寫了特判輸出im..真傻..
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<map> #include<queue> #include<iostream> #include<vector> #include<string> #include<set> #include<stack> using namespace std; long long a10,a01,a11,a00; int main() {cin>>a00>>a01>>a10>>a11;if(a00==0&&a01==0&&a10==0&&a11==0){printf("0\n");return 0;}long long x; /// 0long long y; /// 1long long a000=a00*2;long long a111=a11*2;long long q= sqrt(a000);bool ok = true;bool fin = false;if((q*(q+1))==a000){x=q+1;}else ok=false;if(ok){long long w= sqrt(a111);if((w*(w+1))==a111){y=w+1;}else ok=false;if(ok){/// 1 -if(a000==0)x=1;if(a111==0)y=1;if((x*y)==(a01+a10)){if((x+y)>1000000){printf("Impossible\n");return 0;}if(x==0&&y==0){printf("Impossible\n");return 0;}else if(x==0){for(int i=0; i<y; i++){printf("1");}printf("\n");return 0;}else if(y==0){for(int i=0; i<x; i++){printf("0");}printf("\n");return 0;}/// x yint aa01=a01;int aa10=a10;int cnt =0;int ss=-1;while(true){y--;if(aa01>x){cnt ++;aa01-=x;}else{ss=aa01;aa01=0;}if(aa01==0)break;}if(y>=0){if(ss==-1){for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}else{for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=ss; i++)printf("0");printf("1");for(int i=ss; i<x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}return 0;}}/// 2if(a000==0)x=0;if(a111==0)y=1;if((x*y)==(a01+a10)){if((x+y)>1000000){printf("Impossible\n");return 0;}if(x==0&&y==0){printf("Impossible\n");return 0;}else if(x==0){for(int i=0; i<y; i++){printf("1");}printf("\n");return 0;}else if(y==0){for(int i=0; i<x; i++){printf("0");}printf("\n");return 0;}int aa01=a01;int aa10=a10;int cnt =0;int ss=-1;while(true){y--;if(aa01>x){cnt ++;aa01-=x;}else{ss=aa01;aa01=0;}if(aa01==0)break;}if(y>=0){if(ss==-1){for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}else{for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=ss; i++)printf("0");printf("1");for(int i=ss; i<x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}return 0;}}/// 3if(a000==0)x=1;if(a111==0)y=0;if((x*y)==(a01+a10)){if((x+y)>1000000){printf("Impossible\n");return 0;}if(x==0&&y==0){printf("Impossible\n");return 0;}else if(x==0){for(int i=0; i<y; i++){printf("1");}printf("\n");return 0;}else if(y==0){for(int i=0; i<x; i++){printf("0");}printf("\n");return 0;}int aa01=a01;int aa10=a10;int cnt =0;int ss=-1;while(true){y--;if(aa01>x){cnt ++;aa01-=x;}else{ss=aa01;aa01=0;}if(aa01==0)break;}if(y>=0){if(ss==-1){for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}else{for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=ss; i++)printf("0");printf("1");for(int i=ss; i<x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}return 0;}}/// 4if(a000==0)x=0;if(a111==0)y=0;if((x*y)==(a01+a10)){if((x+y)>1000000){printf("Impossible\n");return 0;}if(x==0&&y==0){printf("Impossible\n");return 0;}else if(x==0){for(int i=0; i<y; i++){printf("1");}printf("\n");return 0;}else if(y==0){for(int i=0; i<x; i++){printf("0");}printf("\n");return 0;}int aa01=a01;int aa10=a10;int cnt =0;int ss=-1;while(true){y--;if(aa01>x){cnt ++;aa01-=x;}else{ss=aa01;aa01=0;}if(aa01==0)break;}if(y>=0){if(ss==-1){for(int i=1; i<=y; i++)printf("1");for(int i=1; i<x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}else{for(int i=1; i<=y; i++)printf("1");for(int i=1; i<=ss; i++)printf("0");printf("1");for(int i=ss; i<=x; i++)printf("0");for(int i=1; i<=cnt; i++)printf("1");printf("\n");}return 0;}}printf("Impossible\n");return 0;}else{printf("Impossible\n");}}else{printf("Impossible\n");} }
轉載于:https://www.cnblogs.com/rayrayrainrain/p/5807902.html
總結
以上是生活随笔為你收集整理的AIM Tech Round 3 (Div. 2) A B C D的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SSH网上商城项目实战05】完成数据库
- 下一篇: php中implode()和explod