日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

*【CodeForces - 1088 ABC】套题比赛,A水题B模拟C构造D交互

發布時間:2023/12/10 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 *【CodeForces - 1088 ABC】套题比赛,A水题B模拟C构造D交互 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A.

Input

The only line contains the integer?xx?(1≤x≤100)(1≤x≤100).

Output

You should output two integers?aa?and?bb, satisfying the given conditions, separated by a space. If no pair of integers satisfy the conditions above, print "-1" (without quotes).

Examples

Input

10

Output

6 3

Input

1

Output

-1

解題報告:

? ?就是給你一個x,讓你構造一個a和b,滿足和x的這仨關系就行了。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5;int main() {int x,a,b;cin>>x;int flag = 0;for(int i = 1; i<=x; i++) {for(int j = i; j<=x; j+=i) {if(i*j>x && j/i < x) {flag = 1;a=j;b=i;break;}}if(flag) break;}if(flag) printf("%d %d\n",a,b);else puts("-1");return 0 ;}

?


B.

給你n個數的數組,給一個k。讓你重復執行k次下列操作:每次選中序列中不為0的最小的數并輸出,然后把序列中所有非零的數都減去這個選中的數。如果序列已經都是0了,那就輸出0.

Examples

Input

3 5 1 2 3

Output

1 1 1 0 0

Input

4 2 10 3 5 3

Output

3 2

Note

In the first sample:

In the first step: the array is?[1,2,3][1,2,3], so the minimum non-zero element is 1.

In the second step: the array is?[0,1,2][0,1,2], so the minimum non-zero element is 1.

In the third step: the array is?[0,0,1][0,0,1], so the minimum non-zero element is 1.

In the fourth and fifth step: the array is?[0,0,0][0,0,0], so we printed 0.

In the second sample:

In the first step: the array is?[10,3,5,3][10,3,5,3], so the minimum non-zero element is 3.

In the second step: the array is?[7,0,2,0][7,0,2,0], so the minimum non-zero element is 2.

解題報告:

? 先別看哪個Node,,有的時候會誤導你的思路。。其實這題就是將減的數給可持久化一下、、因為你想啊你總不能減一個數,就將序列中的數都變化一下吧,,所以解決方法就是用一個sub來動態記錄變化的數的值。為啥可以這樣呢?因為你雖然要變化整個數組中的值,,但是其實你就算不變化,,也不會影響下次你取數組中的最小值(因為大家都減同一個數,相對的大小關系肯定沒變啊)所以就用一個變量記錄就行了。

AC代碼1:(排序版)

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; ll a[MAX]; int main() {int n,k;cin>>n>>k;for(int i=1; i<=n; i++) scanf("%lld",a+i);ll sub=0;sort(a+1,a+n+1);for(int i=1,j=1;j<=k;i++,j++) {if(i>n) {printf("0\n");} else {while(1) {if(a[i]!=sub) break;i++;if(i > n) {printf("0\n");break;}}if(i<=n) {a[i]-=sub;printf("%lld\n",a[i]);sub+=a[i];}}}return 0; }

或者用優先隊列也可以寫:

AC代碼2:

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<set> #include<map> #include<queue> #include<cmath> #define ll long long #define mod 1000000007 #define inf 0x3f3f3f3f using namespace std; priority_queue<int, vector<int>, greater<int> > pq; int n,k; int main() {cin>>n>>k;for(int i = 1,tmp; i <= n; i ++) {scanf("%d",&tmp);if(tmp) pq.push(tmp);}int sub = 0;while(k--) {if(!pq.empty()) {int cur = pq.top();while(cur - sub == 0 && !pq.empty()) {pq.pop();cur=pq.top();}printf("%d\n",cur-sub);sub += (cur-sub);}else puts("0");}return 0; }

不過更適合我的方式其實是先判斷一堆直到只能變成0。然后再看看剩余的次數是否大于0,如果大于0再輸出k次的0就行了、

?


C.

不想寫題意了。。**構造一眼題

You're given an array?aa?of length?nn. You can perform the following operations on it:

  • choose an index?ii?(1≤i≤n)(1≤i≤n), an integer?xx?(0≤x≤106)(0≤x≤106), and replace?ajaj?with?aj+xaj+x?for all?(1≤j≤i)(1≤j≤i), which means add?xx?to all the elements in the prefix ending at?ii.
  • choose an index?ii?(1≤i≤n)(1≤i≤n), an integer?xx?(1≤x≤106)(1≤x≤106), and replace?ajaj?with?aj%xaj%x?for all?(1≤j≤i)(1≤j≤i), which means replace every element in the prefix ending at?ii?with the remainder after dividing it by?xx.

Can you make the array?strictly increasing?in no more than?n+1n+1?operations?

Input

The first line contains an integer?nn?(1≤n≤2000)(1≤n≤2000), the number of elements in the array?aa.

The second line contains?nn?space-separated integers?a1a1,?a2a2,?……,?anan?(0≤ai≤105)(0≤ai≤105), the elements of the array?aa.

Output

On the first line, print the number of operations you wish to perform. On the next lines, you should print the operations.

To print an adding operation, use the format "11?ii?xx"; to print a modding operation, use the format "22?ii?xx". If?ii?or?xx?don't satisfy the limitations above, or you use more than?n+1n+1?operations, you'll get?wrong answer?verdict.

Examples

Input

3 1 2 3

Output

0

Input

3 7 6 3

Output

2 1 1 1 2 2 4

Note

In the first sample, the array is already increasing so we don't need any operations.

In the second sample:

In the first step: the array becomes?[8,6,3][8,6,3].

In the second step: the array becomes?[0,2,3][0,2,3].

好吧我還是寫一下題意。。就是說給你n個數,給你兩種操作:1.任取一個x,讓區間內所有的數都加上這個x。2.任取一個x,讓區間內所有的數都取模這個x。(其中x<=1e6)。使得這個序列變成一個嚴格遞增序列,讓你輸出每次操作是什么,和怎么操作、、

解題報告:

? ?1分鐘出標算,,10分鐘WA兩發,,剛開始這個大數去了1e7,,(沒讀題),,后來WA1,改成1e6,感覺該沒問題了吧,WA2,,發現后面在取模的時候去的x會超過1e6,,再改成5e5,AC。。

其實這題上來就取個5000左右就行了啊。。

不難構造,,題意都提示的很明顯了,,n+1次操作,那肯定猜一個n次一個1次唄,,然后不難想到加一個大數,然后每次都取模,讓他構造成一個1~n的序列就完事了。

(白白丟掉100分啊,,,心疼)(另外,應該輸出a[i]-i,,別寫成了a[i]-1,,,)

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; ll a[MAX]; int main() {int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i); printf("%d\n",n+1);printf("1 %d 500000\n",n);for(int i = 1; i<=n; i++) a[i] += 500000;for(int i = 1; i<=n; i++) {printf("2 %d %lld\n",i,a[i]-i);}return 0 ;}

D.

?未補。抽空學學交互題吧、、

總結

以上是生活随笔為你收集整理的*【CodeForces - 1088 ABC】套题比赛,A水题B模拟C构造D交互的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。